Index: trunk/psLib/test/dataIO/tst_psDB.c
===================================================================
--- trunk/psLib/test/dataIO/tst_psDB.c	(revision 4292)
+++ trunk/psLib/test/dataIO/tst_psDB.c	(revision 4294)
@@ -9,6 +9,6 @@
  *  @author Aaron Culliney, MHPCC
  *
- *  @version $Revision: 1.18 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-06-16 23:35:07 $
+ *  @version $Revision: 1.19 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-06-17 02:16:53 $
  *
  *  Copyright 2004-2005 Maui High Performance Computing Center, University of Hawaii
@@ -662,5 +662,4 @@
 psS32 TPDBSelectColumnNum( void )
 {
-    psS32 failed = 0;
     psDB *dbh = NULL;
     const char* table = "table4";
@@ -828,88 +827,130 @@
     psDBCleanup(dbh);
 
-    return failed;
-}
-
-// Testpoint #XXX, TPDBSelectRows shall write/select data from a test table ...
+    return 0;
+}
+
+// Testpoint #847, TPDBSelectRows shall write/select data from a test table ...
 psS32 TPDBSelectRows( void )
 {
     int i;
-    psS32 failed = 0;
     psDB *dbh = NULL;
     const char* table = "table5";
     psArray *ary=NULL, *ary1=NULL, *ary2=NULL;
+    psMetadataItem *item = NULL;
+
+    // Create database table definition
     psMetadata *where=NULL, *row=NULL, *md = _get_CreateTableMetadata();
-    psMetadataItem *item = NULL;
-
+
+    // Initialize database connection
     dbh = _init_psDB();
     if (dbh == NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expected NULL return to initialize database");
         return 1;
     }
 
-    psLogMsg( __func__, PS_LOG_INFO, "psDBSelectRows shall select data from a test table.\n" );
-
-    failed = ! psDBCreateTable(dbh, table, md);
-    if (!failed) {
-
-        row = _get_const_row1();
-        psDBInsertOneRow(dbh, table, row);
-        psFree(row);
-
-        row = _get_const_row2();
-        psDBInsertOneRow(dbh, table, row);
-        psFree(row);
-
-        row = _get_row();
-        failed = ! psDBInsertOneRow(dbh, table, row);
-        psFree(row);
-
-        if (!failed) {
-            where = _get_where();
-            ary1 = psDBSelectRows(dbh, table, where, 0);
-            ary2 = psDBSelectRows(dbh, table, where, 1); /* specify limit */
-            psFree(where);
-            for (i=0; i<2; i++) {
-                ary = i ? ary2 : ary1;
-                if (ary == NULL) {
-                    failed = 1;
-                } else {
-                    row = (psMetadata*)psArrayGet(ary, 0);
-                    _print_row(row);
-
-                    item = psMetadataLookup(row, "key_s32");
-                    if (item == NULL) {
-                        psLogMsg( __func__, PS_LOG_INFO, "oops, key_s32 not found!\n" );
-                        failed = 1;
-                    } else if (item->data.S32 != S32_1) {
-                        psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output (%d vs %d)!\n",
-                                  item->data.S32,S32_1);
-                        failed = 1;
-                    } else {
-                        psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
-                    }
-
-                    item = psMetadataLookup(row, "key_bool");
-                    if (item == NULL) {
-                        psLogMsg( __func__, PS_LOG_INFO, "oops, key_bool not found!\n" );
-                        failed = 1;
-                    } else if (item->data.B != B_1) {
-                        psLogMsg( __func__, PS_LOG_INFO, "oops, did not find expected output (%d vs %d)!\n",
-                                  item->data.B,B_1);
-                        failed = 1;
-                    } else {
-                        psLogMsg( __func__, PS_LOG_INFO, "found expected output.\n" );
-                    }
-
-                    psFree(ary);
-                }
-            }
+    // Create database table for test
+    if(!psDBCreateTable(dbh, table, md)) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect return false for create table");
+        psDBCleanup(dbh);
+        return 2;
+    }
+
+    // Initialize database table with known rows
+    row = _get_const_row1();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_const_row2();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    row = _get_row();
+    psDBInsertOneRow(dbh, table, row);
+    psFree(row);
+
+    // Generate valid where clause
+    where = _get_where();
+
+    // Select rows with non limit
+    ary1 = psDBSelectRows(dbh, table, where, 0);
+
+    // Select rows with a limit
+    ary2 = psDBSelectRows(dbh, table, where, 1);
+    psFree(where);
+
+    // Cycle through both arrays to verify results
+    for (i=0; i<2; i++) {
+        ary = i ? ary2 : ary1;
+
+        // Verify return array not NULL
+        if (ary == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Did not expect return NULL");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 1;
         }
-        psDBDropTable(dbh, table);
-    }
+
+        // Get metadata which contains row from array
+        row = (psMetadata*)psArrayGet(ary, 0);
+
+        // Get key_s32 item from metadata
+        item = psMetadataLookup(row, "key_s32");
+        if (item == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Could not find key_s32 item in row metadata");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 2;
+        }
+        if (item->data.S32 != S32_1) {
+            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
+                    item->data.S32,S32_1);
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 3;
+        }
+
+        // Get key_bool item from metadata
+        item = psMetadataLookup(row, "key_bool");
+        if (item == NULL) {
+            psError(PS_ERR_UNKNOWN,true,"Could not find key_bool item in row metadata");
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 2;
+        }
+        if (item->data.B != B_1) {
+            psError(PS_ERR_UNKNOWN,true,"Row item %d not as expected %d",
+                    item->data.S32,S32_1);
+            psDBDropTable(dbh,table);
+            psDBCleanup(dbh);
+            return 4;
+        }
+        psFree(ary);
+    }
+
+    // Attempt to select rows with NULL database object
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for NULL database object");
+    if(psDBSelectRows(NULL, table, where, 0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+
+    // Attempt to select rows with invalid table
+    psLogMsg(__func__,PS_LOG_INFO,"Following should generate an error message for invalid table");
+    if(psDBSelectRows(dbh, NULL, where, 0) != NULL) {
+        psError(PS_ERR_UNKNOWN,true,"Did not expect non-NULL return for NULL database object");
+        psDBDropTable(dbh,table);
+        psDBCleanup(dbh);
+        return 5;
+    }
+
+
+    psDBDropTable(dbh, table);
 
     psFree(md);
     psDBCleanup(dbh);
 
-    return failed;
+    return 0;
 }
 
