Index: /trunk/psLib/test/astronomy/tst_psDB.c
===================================================================
--- /trunk/psLib/test/astronomy/tst_psDB.c	(revision 3544)
+++ /trunk/psLib/test/astronomy/tst_psDB.c	(revision 3545)
@@ -1,18 +1,18 @@
 /** @file  tst_psDB.c
-*
-* -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
-* vim: set cindent ts=8 sw=4 expandtab:
-*
-*  @brief Contains the tests for psDB.[ch]
-*
-*
-*  @author Aaron Culliney, MHPCC
-*
-*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-03-28 22:52:32 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
+ *
+ * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
+ * vim: set cindent ts=8 sw=4 expandtab:
+ *
+ *  @brief Contains the tests for psDB.[ch]
+ *
+ *
+ *  @author Aaron Culliney, MHPCC
+ *
+ *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-03-29 22:14:48 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
 
 #define PS_ALLOW_MALLOC // for MySQL internals ...
@@ -30,5 +30,4 @@
 
 static psDB *_init_psDB( void );
-static void  _cleanup_psDB(psDB *dbh);
 static psMetadata *_get_CreateTableMetadata( void );
 static psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3);
@@ -60,18 +59,18 @@
 testDescription tests[] = {
                               {TPDBInit,            -1,  "dbInit",            0, false},
-                              {TPDBCreateTable,     -1,  "dbCreateTable",     0, false},
-                              {TPDBDropTable,       -2,  "dbDropTable",       0, true},
-                              {TPDBSelectColumn,    -3,  "dbSelectColumn",    0, true},
-                              {TPDBSelectColumnNum, -4,  "dbSelectColumnNum", 0, true},
-                              {TPDBSelectRows,      -5,  "dbSelectRows",      0, true},
-                              {TPDBInsertOneRow,    -6,  "dbInsertOneRow",    0, true},
-                              {TPDBInsertRows,      -7,  "dbInsertRows",      0, true},
-                              {TPDBDumpRows,        -8,  "dbDumpRows",        0, true},
-                              {TPDBDumpCols,        -9,  "dbDumpCols",        0, true},
-                              {TPDBUpdateRows,      -10, "dbUpdateRows",      0, true},
-                              {TPDBDeleteRows,      -11, "dbDeleteRows",      0, true},
-                              {TPDBChange,          -12, "dbChange",          0, true},
-                              //{TPDBCreate,        -15, "dbCreate",          0, false},
-                              //{TPDBDrop,          -16, "dbDrop",            0, false},
+                              {TPDBChange,          -2,  "dbChange",          0, false},
+                              {TPDBCreateTable,     -3,  "dbCreateTable",     0, false},
+                              {TPDBDropTable,       -4,  "dbDropTable",       0, false},
+                              {TPDBSelectColumn,    -5,  "dbSelectColumn",    0, false},
+                              {TPDBSelectColumnNum, -6,  "dbSelectColumnNum", 0, false},
+                              {TPDBSelectRows,      -7,  "dbSelectRows",      0, false},
+                              {TPDBInsertOneRow,    -8,  "dbInsertOneRow",    0, false},
+                              {TPDBInsertRows,      -9,  "dbInsertRows",      0, false},
+                              {TPDBDumpRows,        -10, "dbDumpRows",        0, false},
+                              {TPDBDumpCols,        -11, "dbDumpCols",        0, false},
+                              {TPDBUpdateRows,      -12, "dbUpdateRows",      0, false},
+                              {TPDBDeleteRows,      -13, "dbDeleteRows",      0, false},
+                              //{TPDBCreate,        -14, "dbCreate",          0, false},
+                              //{TPDBDrop,          -15, "dbDrop",            0, false},
                               {NULL}
                           };
@@ -95,10 +94,4 @@
 
     return dbh;
-}
-
-// internal method to handle DB cleanup
-void _cleanup_psDB(psDB *dbh)
-{
-    psDBCleanup(dbh);
 }
 
@@ -135,17 +128,15 @@
         return NULL;
     }
-    str = psMetadataItemAllocStr(key0, comm0, val0);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", str->type );
+    if (key0 != NULL) {
+        str = psMetadataItemAllocStr(key0, comm0, val0);
+    }
     s32 = psMetadataItemAllocS32(key1, comm1, val1);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", s32->type );
     f32 = psMetadataItemAllocF32(key2, comm2, val2);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f32->type );
     f64 = psMetadataItemAllocF64(key3, comm3, val3);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f64->type );
-    if ((str == NULL) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
+    if ( ((key0 != NULL) && (str == NULL)) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
         psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem(s) in %s!", __func__ );
         return NULL;
     }
-    if ( !psMetadataAddItem(md, str, 0, 0) || !psMetadataAddItem(md, s32, 0, 0) ||
+    if ( ((key0 != NULL) && !psMetadataAddItem(md, str, 0, 0)) || !psMetadataAddItem(md, s32, 0, 0) ||
             !psMetadataAddItem(md, f32, 0, 0) || !psMetadataAddItem(md, f64, 0, 0)) {
         psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
@@ -153,16 +144,12 @@
     }
 
+    if (str != NULL) {
+        psFree(str);
+    }
+    psFree(s32);
+    psFree(f32);
+    psFree(f64);
+
     return md;
-}
-
-void _cleanup_Metadata (psMetadata *md)
-{
-    psMetadataItem* item = NULL;
-    psMetadataIterator* mdi = psMetadataIteratorAlloc(md, 0, NULL);
-    while ((item = psMetadataGetAndIncrement(mdi)) != NULL) {
-        psFree(item);
-    }
-    psFree(mdi);
-    psFree(md);
 }
 
@@ -178,5 +165,9 @@
 psMetadata *_get_where( void )
 {
-    return _get_row();
+    return _get_RowMetadata(
+               NULL, NULL, NULL,
+               "key_s32",    "comment-s32",     1974,
+               "key_f32",    "comment-f32",     3.14159,
+               "key_f64",    "comment-f64",     2.71828);
 }
 
@@ -206,53 +197,5 @@
     }
 
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBCreate shall create a new test database.
-psS32 TPDBCreate( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
-
-    failed = ! psDBCreate(dbh, test_db);
-    if (!failed) {
-        psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBDrop shall create a new test database.
-psS32 TPDBDrop( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
-
-    failed = psDBCreate(dbh, test_db);
-    if (!failed) {
-        failed = ! psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -274,5 +217,5 @@
     failed = ! psDBChange(dbh, dbname);
 
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -299,7 +242,6 @@
     }
 
-    _cleanup_Metadata(md);
-
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -312,4 +254,5 @@
     psDB *dbh = NULL;
     const char* table = "table2";
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -320,10 +263,11 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable shall create/drop a new table in the new test database.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
+    failed = ! psDBCreateTable(dbh, table, md);
     if (!failed) {
         failed = ! psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -337,4 +281,5 @@
     const char* table = "table3";
     psArray *ary = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -345,12 +290,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        ary = psDBSelectColumn(dbh, table, "", 1);
-        failed = (ary == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        ary = psDBSelectColumn(dbh, table, "key_string", 1);
+        if (ary == NULL) {
+            failed = 1;
+        } else {
+            psFree(ary);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -364,4 +314,5 @@
     const char* table = "table4";
     psVector *vec = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -372,12 +323,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumnNum shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        vec = psDBSelectColumnNum(dbh, table, "key-string", PS_TYPE_PTR, 1);
-        failed = (vec == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        vec = psDBSelectColumnNum(dbh, table, "key_string", PS_TYPE_PTR, 1);
+        if (vec == NULL) {
+            failed = 1;
+        } else {
+            psFree(vec);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -391,4 +347,5 @@
     const char* table = "table5";
     psArray *ary = NULL;
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -399,17 +356,34 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectRows shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        psDBInsertOneRow(dbh, table, _get_row());             // 3X rows for general case
-        psDBInsertOneRow(dbh, table, _get_row());
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
         if (!failed) {
-            ary = psDBSelectRows(dbh, table, _get_where(), 0);
-            failed = (ary == NULL);
+            where = _get_where();
+            ary = psDBSelectRows(dbh, table, /*NULL*/where, 0);
+            psFree(where);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
         }
         psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -422,4 +396,5 @@
     psDB *dbh = NULL;
     const char* table = "table6";
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -430,11 +405,14 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertOneRow shall insert a row into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -448,4 +426,5 @@
     const char* table = "table7";
     psArray *rowSet = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -456,16 +435,29 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertRows shall insert rows into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+        psFree(rowSet);
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -478,63 +470,132 @@
     psDB *dbh = NULL;
     const char* table = "table8";
+    psArray *ary = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        if (!failed) {
+            ary = psDBDumpRows(dbh, table);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
+        }
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
+psS32 TPDBDumpCols( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table9";
+    psMetadata *meta=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        meta = psDBDumpCols(dbh, table);
+        if (meta == NULL) {
+            failed = 1;
+        } else {
+            psFree(meta);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
+psS32 TPDBUpdateRows( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table10";
     psArray *rowSet = NULL;
-    psArray *ary = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *row=NULL, *where=NULL, *updates=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall update rows in a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            ary = psDBDumpRows(dbh, table);
-            failed = (ary == NULL);
+            where = _get_where();
+            updates = _get_update_values("foobar", -1, 3.3333, 1234.5);
+            failed = (psDBUpdateRows(dbh, table, where, updates) < 0);
+            psFree(updates);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
-psS32 TPDBDumpCols( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table9";
-    psMetadata *meta = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        meta = psDBDumpCols(dbh, table);
-        failed = (meta == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
-psS32 TPDBUpdateRows( void )
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
+psS32 TPDBDeleteRows( void )
 {
     psS32 failed = 0;
@@ -542,64 +603,92 @@
     const char* table = "table10";
     psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            failed = (psDBUpdateRows(dbh, table, _get_where(), _get_update_values(
-                                         "foobar", -1, 3.3333, 1234.5)) < 0);
+            where = _get_where();
+            failed = (psDBDeleteRows(dbh, table, where) < 0);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
-psS32 TPDBDeleteRows( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table10";
-    psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
-        rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        failed = ! psDBInsertRows(dbh, table, rowSet);
-        if (!failed) {
-            failed = (psDBDeleteRows(dbh, table, _get_where()) < 0);
-        }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, psDBCreate shall create a new test database.
+//psS32 TPDBCreate( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
+//
+//    failed = ! psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
+// Testpoint #XXX, psDBDrop shall create a new test database.
+//psS32 TPDBDrop( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
+//
+//    failed = psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        failed = ! psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
Index: /trunk/psLib/test/dataIO/tst_psDB.c
===================================================================
--- /trunk/psLib/test/dataIO/tst_psDB.c	(revision 3544)
+++ /trunk/psLib/test/dataIO/tst_psDB.c	(revision 3545)
@@ -1,18 +1,18 @@
 /** @file  tst_psDB.c
-*
-* -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
-* vim: set cindent ts=8 sw=4 expandtab:
-*
-*  @brief Contains the tests for psDB.[ch]
-*
-*
-*  @author Aaron Culliney, MHPCC
-*
-*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-03-28 22:52:32 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
+ *
+ * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
+ * vim: set cindent ts=8 sw=4 expandtab:
+ *
+ *  @brief Contains the tests for psDB.[ch]
+ *
+ *
+ *  @author Aaron Culliney, MHPCC
+ *
+ *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-03-29 22:14:48 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
 
 #define PS_ALLOW_MALLOC // for MySQL internals ...
@@ -30,5 +30,4 @@
 
 static psDB *_init_psDB( void );
-static void  _cleanup_psDB(psDB *dbh);
 static psMetadata *_get_CreateTableMetadata( void );
 static psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3);
@@ -60,18 +59,18 @@
 testDescription tests[] = {
                               {TPDBInit,            -1,  "dbInit",            0, false},
-                              {TPDBCreateTable,     -1,  "dbCreateTable",     0, false},
-                              {TPDBDropTable,       -2,  "dbDropTable",       0, true},
-                              {TPDBSelectColumn,    -3,  "dbSelectColumn",    0, true},
-                              {TPDBSelectColumnNum, -4,  "dbSelectColumnNum", 0, true},
-                              {TPDBSelectRows,      -5,  "dbSelectRows",      0, true},
-                              {TPDBInsertOneRow,    -6,  "dbInsertOneRow",    0, true},
-                              {TPDBInsertRows,      -7,  "dbInsertRows",      0, true},
-                              {TPDBDumpRows,        -8,  "dbDumpRows",        0, true},
-                              {TPDBDumpCols,        -9,  "dbDumpCols",        0, true},
-                              {TPDBUpdateRows,      -10, "dbUpdateRows",      0, true},
-                              {TPDBDeleteRows,      -11, "dbDeleteRows",      0, true},
-                              {TPDBChange,          -12, "dbChange",          0, true},
-                              //{TPDBCreate,        -15, "dbCreate",          0, false},
-                              //{TPDBDrop,          -16, "dbDrop",            0, false},
+                              {TPDBChange,          -2,  "dbChange",          0, false},
+                              {TPDBCreateTable,     -3,  "dbCreateTable",     0, false},
+                              {TPDBDropTable,       -4,  "dbDropTable",       0, false},
+                              {TPDBSelectColumn,    -5,  "dbSelectColumn",    0, false},
+                              {TPDBSelectColumnNum, -6,  "dbSelectColumnNum", 0, false},
+                              {TPDBSelectRows,      -7,  "dbSelectRows",      0, false},
+                              {TPDBInsertOneRow,    -8,  "dbInsertOneRow",    0, false},
+                              {TPDBInsertRows,      -9,  "dbInsertRows",      0, false},
+                              {TPDBDumpRows,        -10, "dbDumpRows",        0, false},
+                              {TPDBDumpCols,        -11, "dbDumpCols",        0, false},
+                              {TPDBUpdateRows,      -12, "dbUpdateRows",      0, false},
+                              {TPDBDeleteRows,      -13, "dbDeleteRows",      0, false},
+                              //{TPDBCreate,        -14, "dbCreate",          0, false},
+                              //{TPDBDrop,          -15, "dbDrop",            0, false},
                               {NULL}
                           };
@@ -95,10 +94,4 @@
 
     return dbh;
-}
-
-// internal method to handle DB cleanup
-void _cleanup_psDB(psDB *dbh)
-{
-    psDBCleanup(dbh);
 }
 
@@ -135,17 +128,15 @@
         return NULL;
     }
-    str = psMetadataItemAllocStr(key0, comm0, val0);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", str->type );
+    if (key0 != NULL) {
+        str = psMetadataItemAllocStr(key0, comm0, val0);
+    }
     s32 = psMetadataItemAllocS32(key1, comm1, val1);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", s32->type );
     f32 = psMetadataItemAllocF32(key2, comm2, val2);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f32->type );
     f64 = psMetadataItemAllocF64(key3, comm3, val3);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f64->type );
-    if ((str == NULL) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
+    if ( ((key0 != NULL) && (str == NULL)) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
         psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem(s) in %s!", __func__ );
         return NULL;
     }
-    if ( !psMetadataAddItem(md, str, 0, 0) || !psMetadataAddItem(md, s32, 0, 0) ||
+    if ( ((key0 != NULL) && !psMetadataAddItem(md, str, 0, 0)) || !psMetadataAddItem(md, s32, 0, 0) ||
             !psMetadataAddItem(md, f32, 0, 0) || !psMetadataAddItem(md, f64, 0, 0)) {
         psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
@@ -153,16 +144,12 @@
     }
 
+    if (str != NULL) {
+        psFree(str);
+    }
+    psFree(s32);
+    psFree(f32);
+    psFree(f64);
+
     return md;
-}
-
-void _cleanup_Metadata (psMetadata *md)
-{
-    psMetadataItem* item = NULL;
-    psMetadataIterator* mdi = psMetadataIteratorAlloc(md, 0, NULL);
-    while ((item = psMetadataGetAndIncrement(mdi)) != NULL) {
-        psFree(item);
-    }
-    psFree(mdi);
-    psFree(md);
 }
 
@@ -178,5 +165,9 @@
 psMetadata *_get_where( void )
 {
-    return _get_row();
+    return _get_RowMetadata(
+               NULL, NULL, NULL,
+               "key_s32",    "comment-s32",     1974,
+               "key_f32",    "comment-f32",     3.14159,
+               "key_f64",    "comment-f64",     2.71828);
 }
 
@@ -206,53 +197,5 @@
     }
 
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBCreate shall create a new test database.
-psS32 TPDBCreate( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
-
-    failed = ! psDBCreate(dbh, test_db);
-    if (!failed) {
-        psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBDrop shall create a new test database.
-psS32 TPDBDrop( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
-
-    failed = psDBCreate(dbh, test_db);
-    if (!failed) {
-        failed = ! psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -274,5 +217,5 @@
     failed = ! psDBChange(dbh, dbname);
 
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -299,7 +242,6 @@
     }
 
-    _cleanup_Metadata(md);
-
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -312,4 +254,5 @@
     psDB *dbh = NULL;
     const char* table = "table2";
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -320,10 +263,11 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable shall create/drop a new table in the new test database.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
+    failed = ! psDBCreateTable(dbh, table, md);
     if (!failed) {
         failed = ! psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -337,4 +281,5 @@
     const char* table = "table3";
     psArray *ary = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -345,12 +290,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        ary = psDBSelectColumn(dbh, table, "", 1);
-        failed = (ary == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        ary = psDBSelectColumn(dbh, table, "key_string", 1);
+        if (ary == NULL) {
+            failed = 1;
+        } else {
+            psFree(ary);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -364,4 +314,5 @@
     const char* table = "table4";
     psVector *vec = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -372,12 +323,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumnNum shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        vec = psDBSelectColumnNum(dbh, table, "key-string", PS_TYPE_PTR, 1);
-        failed = (vec == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        vec = psDBSelectColumnNum(dbh, table, "key_string", PS_TYPE_PTR, 1);
+        if (vec == NULL) {
+            failed = 1;
+        } else {
+            psFree(vec);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -391,4 +347,5 @@
     const char* table = "table5";
     psArray *ary = NULL;
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -399,17 +356,34 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectRows shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        psDBInsertOneRow(dbh, table, _get_row());             // 3X rows for general case
-        psDBInsertOneRow(dbh, table, _get_row());
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
         if (!failed) {
-            ary = psDBSelectRows(dbh, table, _get_where(), 0);
-            failed = (ary == NULL);
+            where = _get_where();
+            ary = psDBSelectRows(dbh, table, /*NULL*/where, 0);
+            psFree(where);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
         }
         psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -422,4 +396,5 @@
     psDB *dbh = NULL;
     const char* table = "table6";
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -430,11 +405,14 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertOneRow shall insert a row into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -448,4 +426,5 @@
     const char* table = "table7";
     psArray *rowSet = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -456,16 +435,29 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertRows shall insert rows into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+        psFree(rowSet);
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -478,63 +470,132 @@
     psDB *dbh = NULL;
     const char* table = "table8";
+    psArray *ary = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        if (!failed) {
+            ary = psDBDumpRows(dbh, table);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
+        }
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
+psS32 TPDBDumpCols( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table9";
+    psMetadata *meta=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        meta = psDBDumpCols(dbh, table);
+        if (meta == NULL) {
+            failed = 1;
+        } else {
+            psFree(meta);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
+psS32 TPDBUpdateRows( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table10";
     psArray *rowSet = NULL;
-    psArray *ary = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *row=NULL, *where=NULL, *updates=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall update rows in a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            ary = psDBDumpRows(dbh, table);
-            failed = (ary == NULL);
+            where = _get_where();
+            updates = _get_update_values("foobar", -1, 3.3333, 1234.5);
+            failed = (psDBUpdateRows(dbh, table, where, updates) < 0);
+            psFree(updates);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
-psS32 TPDBDumpCols( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table9";
-    psMetadata *meta = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        meta = psDBDumpCols(dbh, table);
-        failed = (meta == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
-psS32 TPDBUpdateRows( void )
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
+psS32 TPDBDeleteRows( void )
 {
     psS32 failed = 0;
@@ -542,64 +603,92 @@
     const char* table = "table10";
     psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            failed = (psDBUpdateRows(dbh, table, _get_where(), _get_update_values(
-                                         "foobar", -1, 3.3333, 1234.5)) < 0);
+            where = _get_where();
+            failed = (psDBDeleteRows(dbh, table, where) < 0);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
-psS32 TPDBDeleteRows( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table10";
-    psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
-        rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        failed = ! psDBInsertRows(dbh, table, rowSet);
-        if (!failed) {
-            failed = (psDBDeleteRows(dbh, table, _get_where()) < 0);
-        }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, psDBCreate shall create a new test database.
+//psS32 TPDBCreate( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
+//
+//    failed = ! psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
+// Testpoint #XXX, psDBDrop shall create a new test database.
+//psS32 TPDBDrop( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
+//
+//    failed = psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        failed = ! psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
Index: /trunk/psLib/test/fileUtils/tst_psDB.c
===================================================================
--- /trunk/psLib/test/fileUtils/tst_psDB.c	(revision 3544)
+++ /trunk/psLib/test/fileUtils/tst_psDB.c	(revision 3545)
@@ -1,18 +1,18 @@
 /** @file  tst_psDB.c
-*
-* -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
-* vim: set cindent ts=8 sw=4 expandtab:
-*
-*  @brief Contains the tests for psDB.[ch]
-*
-*
-*  @author Aaron Culliney, MHPCC
-*
-*  @version $Revision: 1.1 $ $Name: not supported by cvs2svn $
-*  @date $Date: 2005-03-28 22:52:32 $
-*
-*  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
-*
-*/
+ *
+ * -*- mode: C; c-basic-indent: 4; tab-width: 8; indent-tabs-mode: nil -*-
+ * vim: set cindent ts=8 sw=4 expandtab:
+ *
+ *  @brief Contains the tests for psDB.[ch]
+ *
+ *
+ *  @author Aaron Culliney, MHPCC
+ *
+ *  @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-03-29 22:14:48 $
+ *
+ *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
+ *
+ */
 
 #define PS_ALLOW_MALLOC // for MySQL internals ...
@@ -30,5 +30,4 @@
 
 static psDB *_init_psDB( void );
-static void  _cleanup_psDB(psDB *dbh);
 static psMetadata *_get_CreateTableMetadata( void );
 static psMetadata *_get_RowMetadataValues(const char *val0, psS32 val1, psF32 val2, psF64 val3);
@@ -60,18 +59,18 @@
 testDescription tests[] = {
                               {TPDBInit,            -1,  "dbInit",            0, false},
-                              {TPDBCreateTable,     -1,  "dbCreateTable",     0, false},
-                              {TPDBDropTable,       -2,  "dbDropTable",       0, true},
-                              {TPDBSelectColumn,    -3,  "dbSelectColumn",    0, true},
-                              {TPDBSelectColumnNum, -4,  "dbSelectColumnNum", 0, true},
-                              {TPDBSelectRows,      -5,  "dbSelectRows",      0, true},
-                              {TPDBInsertOneRow,    -6,  "dbInsertOneRow",    0, true},
-                              {TPDBInsertRows,      -7,  "dbInsertRows",      0, true},
-                              {TPDBDumpRows,        -8,  "dbDumpRows",        0, true},
-                              {TPDBDumpCols,        -9,  "dbDumpCols",        0, true},
-                              {TPDBUpdateRows,      -10, "dbUpdateRows",      0, true},
-                              {TPDBDeleteRows,      -11, "dbDeleteRows",      0, true},
-                              {TPDBChange,          -12, "dbChange",          0, true},
-                              //{TPDBCreate,        -15, "dbCreate",          0, false},
-                              //{TPDBDrop,          -16, "dbDrop",            0, false},
+                              {TPDBChange,          -2,  "dbChange",          0, false},
+                              {TPDBCreateTable,     -3,  "dbCreateTable",     0, false},
+                              {TPDBDropTable,       -4,  "dbDropTable",       0, false},
+                              {TPDBSelectColumn,    -5,  "dbSelectColumn",    0, false},
+                              {TPDBSelectColumnNum, -6,  "dbSelectColumnNum", 0, false},
+                              {TPDBSelectRows,      -7,  "dbSelectRows",      0, false},
+                              {TPDBInsertOneRow,    -8,  "dbInsertOneRow",    0, false},
+                              {TPDBInsertRows,      -9,  "dbInsertRows",      0, false},
+                              {TPDBDumpRows,        -10, "dbDumpRows",        0, false},
+                              {TPDBDumpCols,        -11, "dbDumpCols",        0, false},
+                              {TPDBUpdateRows,      -12, "dbUpdateRows",      0, false},
+                              {TPDBDeleteRows,      -13, "dbDeleteRows",      0, false},
+                              //{TPDBCreate,        -14, "dbCreate",          0, false},
+                              //{TPDBDrop,          -15, "dbDrop",            0, false},
                               {NULL}
                           };
@@ -95,10 +94,4 @@
 
     return dbh;
-}
-
-// internal method to handle DB cleanup
-void _cleanup_psDB(psDB *dbh)
-{
-    psDBCleanup(dbh);
 }
 
@@ -135,17 +128,15 @@
         return NULL;
     }
-    str = psMetadataItemAllocStr(key0, comm0, val0);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", str->type );
+    if (key0 != NULL) {
+        str = psMetadataItemAllocStr(key0, comm0, val0);
+    }
     s32 = psMetadataItemAllocS32(key1, comm1, val1);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", s32->type );
     f32 = psMetadataItemAllocF32(key2, comm2, val2);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f32->type );
     f64 = psMetadataItemAllocF64(key3, comm3, val3);
-    //psLogMsg( __func__, PS_LOG_INFO, "MetaDataItemType (%d).\n", f64->type );
-    if ((str == NULL) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
+    if ( ((key0 != NULL) && (str == NULL)) || (s32 == NULL) || (f32 == NULL) || (f64 == NULL)) {
         psError(PS_ERR_UNKNOWN, true, "could not create psMetadataItem(s) in %s!", __func__ );
         return NULL;
     }
-    if ( !psMetadataAddItem(md, str, 0, 0) || !psMetadataAddItem(md, s32, 0, 0) ||
+    if ( ((key0 != NULL) && !psMetadataAddItem(md, str, 0, 0)) || !psMetadataAddItem(md, s32, 0, 0) ||
             !psMetadataAddItem(md, f32, 0, 0) || !psMetadataAddItem(md, f64, 0, 0)) {
         psError(PS_ERR_UNKNOWN, true, "could not add psMetadataItem(s) to psMetadata in %s!", __func__ );
@@ -153,16 +144,12 @@
     }
 
+    if (str != NULL) {
+        psFree(str);
+    }
+    psFree(s32);
+    psFree(f32);
+    psFree(f64);
+
     return md;
-}
-
-void _cleanup_Metadata (psMetadata *md)
-{
-    psMetadataItem* item = NULL;
-    psMetadataIterator* mdi = psMetadataIteratorAlloc(md, 0, NULL);
-    while ((item = psMetadataGetAndIncrement(mdi)) != NULL) {
-        psFree(item);
-    }
-    psFree(mdi);
-    psFree(md);
 }
 
@@ -178,5 +165,9 @@
 psMetadata *_get_where( void )
 {
-    return _get_row();
+    return _get_RowMetadata(
+               NULL, NULL, NULL,
+               "key_s32",    "comment-s32",     1974,
+               "key_f32",    "comment-f32",     3.14159,
+               "key_f64",    "comment-f64",     2.71828);
 }
 
@@ -206,53 +197,5 @@
     }
 
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBCreate shall create a new test database.
-psS32 TPDBCreate( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
-
-    failed = ! psDBCreate(dbh, test_db);
-    if (!failed) {
-        psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, psDBDrop shall create a new test database.
-psS32 TPDBDrop( void )
-{
-    const char *test_db = "ps_test_db";
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
-
-    failed = psDBCreate(dbh, test_db);
-    if (!failed) {
-        failed = ! psDBDrop(dbh, test_db);
-    }
-
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -274,5 +217,5 @@
     failed = ! psDBChange(dbh, dbname);
 
-    _cleanup_psDB(dbh);
+    psDBCleanup(dbh);
 
     return failed;
@@ -299,7 +242,6 @@
     }
 
-    _cleanup_Metadata(md);
-
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -312,4 +254,5 @@
     psDB *dbh = NULL;
     const char* table = "table2";
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -320,10 +263,11 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBDropTable shall create/drop a new table in the new test database.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
+    failed = ! psDBCreateTable(dbh, table, md);
     if (!failed) {
         failed = ! psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -337,4 +281,5 @@
     const char* table = "table3";
     psArray *ary = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -345,12 +290,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumn shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        ary = psDBSelectColumn(dbh, table, "", 1);
-        failed = (ary == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        ary = psDBSelectColumn(dbh, table, "key_string", 1);
+        if (ary == NULL) {
+            failed = 1;
+        } else {
+            psFree(ary);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -364,4 +314,5 @@
     const char* table = "table4";
     psVector *vec = NULL;
+    psMetadata *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -372,12 +323,17 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectColumnNum shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        vec = psDBSelectColumnNum(dbh, table, "key-string", PS_TYPE_PTR, 1);
-        failed = (vec == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        vec = psDBSelectColumnNum(dbh, table, "key_string", PS_TYPE_PTR, 1);
+        if (vec == NULL) {
+            failed = 1;
+        } else {
+            psFree(vec);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -391,4 +347,5 @@
     const char* table = "table5";
     psArray *ary = NULL;
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -399,17 +356,34 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBSelectRows shall select data from a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        psDBInsertOneRow(dbh, table, _get_row());             // 3X rows for general case
-        psDBInsertOneRow(dbh, table, _get_row());
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
         if (!failed) {
-            ary = psDBSelectRows(dbh, table, _get_where(), 0);
-            failed = (ary == NULL);
+            where = _get_where();
+            ary = psDBSelectRows(dbh, table, /*NULL*/where, 0);
+            psFree(where);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
         }
         psDBDropTable(dbh, table);
     }
 
-    _cleanup_psDB(dbh);
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -422,4 +396,5 @@
     psDB *dbh = NULL;
     const char* table = "table6";
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -430,11 +405,14 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertOneRow shall insert a row into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        failed = ! psDBInsertOneRow(dbh, table, _get_row());
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -448,4 +426,5 @@
     const char* table = "table7";
     psArray *rowSet = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
 
     dbh = _init_psDB();
@@ -456,16 +435,29 @@
     psLogMsg( __func__, PS_LOG_INFO, "psDBInsertRows shall insert rows into a test table.\n" );
 
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
+        psFree(rowSet);
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
 
     return failed;
@@ -478,63 +470,132 @@
     psDB *dbh = NULL;
     const char* table = "table8";
+    psArray *ary = NULL;
+    psMetadata *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        row = _get_row();
+        failed = ! psDBInsertOneRow(dbh, table, row);
+        psFree(row);
+
+        if (!failed) {
+            ary = psDBDumpRows(dbh, table);
+            if (ary == NULL) {
+                failed = 1;
+            } else {
+                psFree(ary);
+            }
+        }
+
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
+psS32 TPDBDumpCols( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table9";
+    psMetadata *meta=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        meta = psDBDumpCols(dbh, table);
+        if (meta == NULL) {
+            failed = 1;
+        } else {
+            psFree(meta);
+        }
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
+psS32 TPDBUpdateRows( void )
+{
+    psS32 failed = 0;
+    psDB *dbh = NULL;
+    const char* table = "table10";
     psArray *rowSet = NULL;
-    psArray *ary = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *row=NULL, *where=NULL, *updates=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall update rows in a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            ary = psDBDumpRows(dbh, table);
-            failed = (ary == NULL);
+            where = _get_where();
+            updates = _get_update_values("foobar", -1, 3.3333, 1234.5);
+            failed = (psDBUpdateRows(dbh, table, where, updates) < 0);
+            psFree(updates);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDumpCols shall dump all cols from a test table ...
-psS32 TPDBDumpCols( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table9";
-    psMetadata *meta = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDumpCols shall dump all cols from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        meta = psDBDumpCols(dbh, table);
-        failed = (meta == NULL);
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBUpdateRows shall update rows in a test table ...
-psS32 TPDBUpdateRows( void )
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
+psS32 TPDBDeleteRows( void )
 {
     psS32 failed = 0;
@@ -542,64 +603,92 @@
     const char* table = "table10";
     psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBUpdateRows shall dump all rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
+    psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
+
+    dbh = _init_psDB();
+    if (dbh == NULL) {
+        return 1;
+    }
+
+    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
+
+    failed = ! psDBCreateTable(dbh, table, md);
+    if (!failed) {
+        rowSet = psArrayAlloc(3);
         rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
+        row = _get_row();
+        psArrayAdd(rowSet, 0, row);
+        psFree(row);
+
         failed = ! psDBInsertRows(dbh, table, rowSet);
         if (!failed) {
-            failed = (psDBUpdateRows(dbh, table, _get_where(), _get_update_values(
-                                         "foobar", -1, 3.3333, 1234.5)) < 0);
+            where = _get_where();
+            failed = (psDBDeleteRows(dbh, table, where) < 0);
+            psFree(where);
         }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
-// Testpoint #XXX, TPDBDeleteRows shall update rows in a test table ...
-psS32 TPDBDeleteRows( void )
-{
-    psS32 failed = 0;
-    psDB *dbh = NULL;
-    const char* table = "table10";
-    psArray *rowSet = NULL;
-
-    dbh = _init_psDB();
-    if (dbh == NULL) {
-        return 1;
-    }
-
-    psLogMsg( __func__, PS_LOG_INFO, "psDBDeleteRows shall delete rows from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, _get_CreateTableMetadata());
-    if (!failed) {
-        rowSet = psArrayAlloc(1);
-        rowSet->n = 0;
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        psArrayAdd(rowSet, 0, _get_row());
-        failed = ! psDBInsertRows(dbh, table, rowSet);
-        if (!failed) {
-            failed = (psDBDeleteRows(dbh, table, _get_where()) < 0);
-        }
-        psDBDropTable(dbh, table);
-    }
-
-    _cleanup_psDB(dbh);
-
-    return failed;
-}
-
+        psFree(rowSet);
+        psDBDropTable(dbh, table);
+    }
+
+    psFree(md);
+    psDBCleanup(dbh);
+
+    return failed;
+}
+
+// Testpoint #XXX, psDBCreate shall create a new test database.
+//psS32 TPDBCreate( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBCreate shall create new new test database.\n" );
+//
+//    failed = ! psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
+// Testpoint #XXX, psDBDrop shall create a new test database.
+//psS32 TPDBDrop( void )
+//{
+//    const char *test_db = "ps_test_db";
+//    psS32 failed = 0;
+//    psDB *dbh = NULL;
+//
+//    dbh = _init_psDB();
+//    if (dbh == NULL) {
+//        return 1;
+//    }
+//
+//    psLogMsg( __func__, PS_LOG_INFO, "psDBDrop shall create/drop a new new test database.\n" );
+//
+//    failed = psDBCreate(dbh, test_db);
+//    if (!failed) {
+//        failed = ! psDBDrop(dbh, test_db);
+//    }
+//
+//    psDBCleanup(dbh);
+//
+//    return failed;
+//}
+
