Index: trunk/archive/psdb/psDB.c
===================================================================
--- trunk/archive/psdb/psDB.c	(revision 3157)
+++ trunk/archive/psdb/psDB.c	(revision 3166)
@@ -8,6 +8,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-08 05:03:09 $
+ *  @version $Revision: 1.8 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-02-09 01:15:39 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -68,4 +68,11 @@
 
     mysql = mysql_init(NULL);
+    if (!mysql) {
+        // call abort?
+        fprintf(stderr, " mysql_init(), out of memory\n");
+
+        return NULL;
+    }
+
     if (!mysql_real_connect(mysql, host, user, passwd, dbname, 0, NULL, 0)) {
         fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql));
@@ -181,6 +188,6 @@
 {
     MYSQL_RES       *result;            // complete db result set
-    MYSQL_ROW       row;
-    char            *query;
+    MYSQL_ROW       row;                // single row of db result set
+    char            *query;             // SQL query
     psU64           rowCount;           // number of rows in db result set
     psU64           dataSize;           // size of field
@@ -334,7 +341,7 @@
 {
     MYSQL_RES       *result;            // complete db result set
-    MYSQL_ROW       row;
+    MYSQL_ROW       row;                // single row of db result set
     MYSQL_FIELD     *field;             // field type info
-    char            *query;
+    char            *query;             // SQL query
     psU64           rowCount;           // number of rows in db result set
     psU64           fieldCount;         // number of fields in db result set
@@ -344,11 +351,11 @@
     psMetadataItem  *item;              // field of a row
     psMetadata      *md;                // a row
-    psHash          *mysqlToSQLTable;
-    psHash          *sqlToPSTable;
-    char            *key;
-    char            *value;
+    psHash          *mysqlToSQLTable;   // type lookup table
+    psHash          *sqlToPSTable;      // type lookup table
+    char            *key;               // hash tmp value
+    char            *value;             // hash tmp value
     psU32           pType;              // psElemType of a field
     psU32           type;               // psMetadataType of a a field
-    char            *sqlType;
+    char            *sqlType;           // copy of lookup table result
     psPtr           data;               // copy of result field
 
@@ -458,17 +465,17 @@
 }
 
-bool psDBInsertRow(psDB *dbh, const char *tableName, psMetadata *row)
-{
-    char            *query;
+bool psDBInsertOneRow(psDB *dbh, const char *tableName, psMetadata *row)
+{
+    char            *query;             // SQL query
     MYSQL_STMT      *stmt;              // prepared db statement
     MYSQL_BIND      *bind;              // field values to insert
-    psU32           paramCount;
-    psHash          *mysqlFieldType;
-    mysqlType       *mType;
-    char            *key;
-    psMetadataItem  *item;
-    psListIterator  *cursor;
-    psU32           i;
-    bool            isNull = true;
+    psU32           paramCount;         // number of placeholders in query
+    psHash          *mysqlFieldType;    // type lookup table
+    mysqlType       *mType;             // type tmp variable
+    char            *key;               // hash tmp variable
+    psMetadataItem  *item;              // field in row
+    psListIterator  *cursor;            // row iterator
+    psU32           i;                  // field index
+    bool            isNull = true;      // used in a MYSQL_BIND to indicate NULL
 
     query = psDBGenerateInsertRowSQL(tableName, row);
@@ -493,4 +500,6 @@
             return false;
     }
+
+    psFree(query);
 
     paramCount = (psU32)mysql_stmt_param_count(stmt);
@@ -514,4 +523,5 @@
         bind[i].is_unsigned = mType->isUnsigned;
 
+        // convert NaNs to NULL
         bind[i].is_null = psDBIsPTypeNaN(item->pType, item->data.V) 
                         ? (my_bool *)&isNull
@@ -531,9 +541,5 @@
         }
 
-        if (!cursor->offEnd) {
-            // + , + _
-            psStringAppend(&query, ", ");
-        }
-
+        // increment field index
         i++;
     }
@@ -546,5 +552,4 @@
         psFree(bind);
         mysql_stmt_close(stmt);
-        psFree(query);
 
         return false;
@@ -556,5 +561,4 @@
         psFree(bind);
         mysql_stmt_close(stmt);
-        psFree(query);
 
         return false;
@@ -566,5 +570,4 @@
     psFree(bind);
     mysql_stmt_close(stmt);
-    psFree(query);
 
     return true;
@@ -593,6 +596,6 @@
         psStringAppend(&query, item->name);
 
+        // + , + _ between every field name
         if (!cursor->offEnd) {
-            // + , + _
             psStringAppend(&query, ", ");
         }
@@ -604,5 +607,5 @@
     psListIteratorSet(cursor, 0);
 
-    // create field place holders
+    // create value place holders
     while ((item = psListGetNext(cursor))) {
         psStringAppend(&query, "?");
@@ -616,4 +619,5 @@
     psFree(cursor);
 
+    // end of values
     psStringAppend(&query, ")");
 
@@ -666,10 +670,10 @@
 static char *psDBGenerateCreateTableSQL(const char *tableName, psMetadata *table)
 {
-    psMetadataItem  *item;
-    psListIterator  *cursor;
-    psHash          *colType;
-    char            *query;
-    char            *key;
-    char            *value;
+    psMetadataItem  *item;              // column description
+    psListIterator  *cursor;            // column iterator
+    psHash          *colType;           // type lookup table
+    char            *query;             // complete query
+    char            *key;               // hash tmp variable
+    char            *value;             // hash tmp variable
 
     // init query with a psMemBlock
@@ -751,4 +755,5 @@
     psStringAppend(&query, tableName);
 
+    // treat limit == 0 as "no limit"
     if (limit) {
         psStringAppend(&query, " LIMIT ");
@@ -986,5 +991,4 @@
     size_t          newSize;
     char            *oldDest;
-
 
     // dest + source + \0
