Index: /trunk/archive/psdb/psDB.c
===================================================================
--- /trunk/archive/psdb/psDB.c	(revision 3197)
+++ /trunk/archive/psdb/psDB.c	(revision 3198)
@@ -8,6 +8,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.15 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-11 23:35:23 $
+ *  @version $Revision: 1.16 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-02-11 23:46:57 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -467,107 +467,21 @@
 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;         // 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);
-    if (!query) {
-        return NULL;
-    }
-
-    stmt = mysql_stmt_init(dbh->mysql);
-    if (!stmt) {
-        // call abort?
-        fprintf(stderr, " mysql_stmt_init(), out of memory\n");
+    psArray         *rowSet;            // psArray of row to insert
+
+    // this is to prevent row from being free'd when rowSet is free'd. this
+    // will have to be removed when psArrayAdd is modified to do this for you.
+    psMemIncrRefCounter(row);
+
+    rowSet = psArrayAlloc(1);
+    rowSet->n = 0;
+    psArrayAdd(rowSet, 0, row);
+
+    if (!psDBInsertRows(dbh, tableName, rowSet)) {
+        psFree(rowSet);
 
         return false;
     }
 
-    if (mysql_stmt_prepare(stmt, query, (unsigned long)strlen(query))) {
-            fprintf(stderr, "Failed to prepare query.  Error: %s\n", mysql_stmt_error(stmt));
-
-            mysql_stmt_close(stmt);
-            psFree(query);
-
-            return false;
-    }
-
-    psFree(query);
-
-    paramCount = (psU32)mysql_stmt_param_count(stmt);
-
-    bind = psAlloc(sizeof(MYSQL_BIND) * paramCount);
-    memset(bind, 0, sizeof(MYSQL_BIND) * paramCount);
-
-    mysqlFieldType = psDBGetPSToMySQLTable();
-
-    cursor = psListIteratorAlloc(row->list, 0);
-
-    i = 0;
-    while ((item = psListGetNext(cursor))) {
-        key = psDBIntToString((psU64)item->pType);
-        mType = psHashLookup(mysqlFieldType, key);
-        psFree(key);
-
-        // input data length is determined by the MYSQL_TYPE_* unless it's a string
-        bind[i].buffer  = (char *)item->data.V;
-        bind[i].buffer_type = mType->type;
-        bind[i].is_unsigned = mType->isUnsigned;
-
-        // convert NaNs to NULL
-        bind[i].is_null = psDBIsPTypeNaN(item->pType, item->data.V) 
-                        ? (my_bool *)&isNull
-                        : NULL;
-
-        if (item->pType == PS_TYPE_PTR) {
-            if (item->type == PS_META_STR) {
-                if (*(char *)item->data.V == '\0') {
-                    bind[i].is_null = (my_bool *)&isNull;
-                } else {
-                    bind[i].buffer_length = (unsigned long)strlen((char *)item->data.V);
-                    bind[i].is_null = NULL;
-                }
-            } else {
-                // error, not a pointer to a string
-            }
-        }
-
-        // increment field index
-        i++;
-    }
-
-    psFree(mysqlFieldType);
-
-    if (mysql_stmt_bind_param(stmt, bind)) {
-        fprintf(stderr, "Failed to bind params.  Error: %s\n", mysql_stmt_error(stmt));
-
-        psFree(bind);
-        mysql_stmt_close(stmt);
-
-        return false;
-    }
-
-    if (mysql_stmt_execute(stmt)) {
-        fprintf(stderr, "Failed to execute prepared statement.  Error: %s\n", mysql_stmt_error(stmt));
-
-        psFree(bind);
-        mysql_stmt_close(stmt);
-
-        return false;
-    }
-
-    // point of no return
-    mysql_commit(dbh->mysql);
-
-    psFree(bind);
-    mysql_stmt_close(stmt);
+    psFree(rowSet);
 
     return true;
