Index: trunk/psLib/src/db/psDB.c
===================================================================
--- trunk/psLib/src/db/psDB.c	(revision 21401)
+++ trunk/psLib/src/db/psDB.c	(revision 22708)
@@ -866,5 +866,5 @@
                             const psArray *rowSet,
                             const char *query
-    )                            
+    )
 {
     PS_ASSERT_PTR_NON_NULL(dbh, -1);
@@ -1040,175 +1040,175 @@
 
       for (i = 0; i < fieldCount; i++) {
-	// lookup MySQL column type
-	pType = psDBMySQLToPType(field[i].type, field[i].flags);
-	if (!pType) {
-	  psError(PS_ERR_UNKNOWN, false, "Failed to lookup type.");
-	  psFree(md);
-	  mysql_free_result(result);
-	  psFree(resultSet);
-	  return NULL;
-	}
-
-	len = fieldLength[i];
-	if (len) {
-	  // copy the data out of the result set struct
-	  data = psAlloc(len + 1);
-	  memcpy(data, row[i], len);
-	  ((char*)data)[len] = '\0';
-	} else {
-	  // if len is zero then the value is NULL
-	  psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name);
-	  data = psDBGetPTypeNaN(pType);
-
-	  // the NULL case must be handled for each type differently
-	  switch (pType) {
-	    case PS_DATA_STRING:
-	      if (!psMetadataAddStr(md, PS_LIST_TAIL, field[i].name, 0, "", data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_U8:
-	      if (!psMetadataAddU8(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU8 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_U16:
-	      if (!psMetadataAddU16(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU16 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_U32:
-	      if (!psMetadataAddU32(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU32 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_U64:
-	      if (!psMetadataAddU64(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU64 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_S8:
-	      if (!psMetadataAddS8(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS8 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_S16:
-	      if (!psMetadataAddS16(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS16 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_S32:
-	      if (!psMetadataAddS32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS32 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_S64:
-	      if (!psMetadataAddS64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS64 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_F32:
-	      if (!psMetadataAddF32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF32 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_F64:
-	      if (!psMetadataAddF64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF64 *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_BOOL:
-	      if (!psMetadataAddBool(md, PS_LIST_TAIL, field[i].name, 0, "", *(bool *)data)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	    case PS_DATA_TIME:
-	      // just pass NULL values through as there is currently no
-	      // concept of a psTime with a NULL value
-	      if (!psMetadataAddTime(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-
-	    default:
-	      // just pass NULL values for all other types
-	      if (!psMetadataAddUnknown(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {
-		psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
-		psFree(data);
-		psFree(md);
-		mysql_free_result(result);
-		psFree(resultSet);
-		return NULL;
-	      }
-	      break;
-	  }
-	  psFree(data);
-	  continue;
-	}
+        // lookup MySQL column type
+        pType = psDBMySQLToPType(field[i].type, field[i].flags);
+        if (!pType) {
+          psError(PS_ERR_UNKNOWN, false, "Failed to lookup type.");
+          psFree(md);
+          mysql_free_result(result);
+          psFree(resultSet);
+          return NULL;
+        }
+
+        len = fieldLength[i];
+        if (len) {
+          // copy the data out of the result set struct
+          data = psAlloc(len + 1);
+          memcpy(data, row[i], len);
+          ((char*)data)[len] = '\0';
+        } else {
+          // if len is zero then the value is NULL
+          psTrace("psLib.db", PS_LOG_INFO, "database field name %s contains a NULL", field[i].name);
+          data = psDBGetPTypeNaN(pType);
+
+          // the NULL case must be handled for each type differently
+          switch (pType) {
+            case PS_DATA_STRING:
+              if (!psMetadataAddStr(md, PS_LIST_TAIL, field[i].name, 0, "", data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_U8:
+              if (!psMetadataAddU8(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU8 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_U16:
+              if (!psMetadataAddU16(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU16 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_U32:
+              if (!psMetadataAddU32(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU32 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_U64:
+              if (!psMetadataAddU64(md, PS_LIST_TAIL, field[i].name, 0, "",*(psU64 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_S8:
+              if (!psMetadataAddS8(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS8 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_S16:
+              if (!psMetadataAddS16(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS16 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_S32:
+              if (!psMetadataAddS32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS32 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_S64:
+              if (!psMetadataAddS64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psS64 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_F32:
+              if (!psMetadataAddF32(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF32 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_F64:
+              if (!psMetadataAddF64(md, PS_LIST_TAIL, field[i].name, 0, "", *(psF64 *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_BOOL:
+              if (!psMetadataAddBool(md, PS_LIST_TAIL, field[i].name, 0, "", *(bool *)data)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+            case PS_DATA_TIME:
+              // just pass NULL values through as there is currently no
+              // concept of a psTime with a NULL value
+              if (!psMetadataAddTime(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+
+            default:
+              // just pass NULL values for all other types
+              if (!psMetadataAddUnknown(md, PS_LIST_TAIL, field[i].name, 0, "", NULL)) {
+                psError(PS_ERR_UNKNOWN, false, "Failed to add item %s", field[i].name);
+                psFree(data);
+                psFree(md);
+                mysql_free_result(result);
+                psFree(resultSet);
+                return NULL;
+              }
+              break;
+          }
+          psFree(data);
+          continue;
+        }
 
             switch (pType) {
@@ -2423,5 +2423,5 @@
     case PS_DATA_TIME: {
             if (item->data.V) {
-                psString timeStr = psTimeToISO(item->data.V);
+                psString timeStr = psTimeToString(item->data.V, 6); // MySQL only handles microseconds
                 psStringAppend(&query, "%s %s '%s'", itemName, opStr, timeStr);
                 psFree(timeStr);
