Index: /trunk/archive/psdb/psDB.c
===================================================================
--- /trunk/archive/psdb/psDB.c	(revision 3222)
+++ /trunk/archive/psdb/psDB.c	(revision 3223)
@@ -8,6 +8,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.24 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-15 07:27:02 $
+ *  @version $Revision: 1.25 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-02-15 07:28:50 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -39,4 +39,5 @@
 static char    *psDBGenerateInsertRowSQL(const char *tableName, psMetadata *row);
 static char    *psDBGenerateUpdateRowSQL(const char *tableName, psMetadata *where, psMetadata *values);
+static char    *psDBGenerateDeleteRowSQL(const char *tableName, psMetadata *where);
 static char    *psDBGenerateWhereSQL(psMetadata *where);
 static char    *psDBGenerateSetSQL(psMetadata *set);
@@ -638,5 +639,5 @@
     psU32           paramCount;         // number of placeholders in query
     MYSQL_BIND      *bind;              // field values to insert
-    psU64           rowsAffected;
+    psU64           rowsAffected;       // number of rows affected by query
 
     query = psDBGenerateUpdateRowSQL(tableName, where, values);
@@ -716,4 +717,29 @@
 }
 
+psS64 psDBDeleteRows(psDB *dbh, const char *tableName, psMetadata *where)
+{
+    char            *query;
+
+    query = psDBGenerateDeleteRowSQL(tableName, where);
+    if (!query) {
+        return -1;
+    }
+
+    if (!psDBRunQuery(dbh, query)) {
+        psFree(query);
+
+        return -1;
+    }
+
+    psFree(query);
+
+    if (!where) {
+        // we truncated the table so mysql_affected_rows() won't work
+
+        return 1;
+    }
+
+    return (psS64)mysql_affected_rows(dbh->mysql);
+}
 
 // database utility functions
@@ -967,4 +993,26 @@
     psFree(setSQL);
     psFree(whereSQL);
+
+    return query;
+}
+
+static char *psDBGenerateDeleteRowSQL(const char *tableName, psMetadata *where)
+{
+    char            *query = NULL;
+    char            *whereSQL;
+
+    // delete all rows if where is NULL
+    if (!where) {
+        psStringAppend(&query, "TRUNCATE TABLE %s", tableName);
+
+        return query;
+    }
+    
+    whereSQL = psDBGenerateWhereSQL(where);
+    if (!whereSQL) {
+        return NULL;
+    }
+
+    psStringAppend(&query, "DELETE FROM %s %s", tableName, whereSQL);
 
     return query;
Index: /trunk/archive/psdb/psDB.h
===================================================================
--- /trunk/archive/psdb/psDB.h	(revision 3222)
+++ /trunk/archive/psdb/psDB.h	(revision 3223)
@@ -10,6 +10,6 @@
  *  @author Joshua Hoblitt
  *
- *  @version $Revision: 1.6 $ $Name: not supported by cvs2svn $
- *  @date $Date: 2005-02-12 02:40:21 $
+ *  @version $Revision: 1.7 $ $Name: not supported by cvs2svn $
+ *  @date $Date: 2005-02-15 07:28:50 $
  *
  *  Copyright 2005 Joshua Hoblitt, University of Hawaii
@@ -59,4 +59,6 @@
 psS64 psDBUpdateRows(psDB *dbh, const char *tableName, psMetadata *where, psMetadata *values);
 
+psS64 psDBDeleteRows(psDB *dbh, const char *tableName, psMetadata *where);
+
 /// @}
 
Index: /trunk/archive/psdb/test.c
===================================================================
--- /trunk/archive/psdb/test.c	(revision 3222)
+++ /trunk/archive/psdb/test.c	(revision 3223)
@@ -248,4 +248,7 @@
         OK(rowsAffected, "psDBUpdateRows()");
     }
+
+    // psDBDeleteRows()
+    OK(psDBDeleteRows(dbh, "yak", NULL), "psDBDeleteRows()");
     
     // cleanup other tests
