Index: /trunk/glueforge/templates/psdb/Makefile.am
===================================================================
--- /trunk/glueforge/templates/psdb/Makefile.am	(revision 8262)
+++ /trunk/glueforge/templates/psdb/Makefile.am	(revision 8263)
@@ -21,4 +21,6 @@
     delete.tt \
     delete_h.tt \
+    deleteobject.tt \
+    deleteobject_h.tt \
     deleterowobjects.tt \
     deleterowobjects_h.tt \
Index: /trunk/glueforge/templates/psdb/code.tt
===================================================================
--- /trunk/glueforge/templates/psdb/code.tt	(revision 8262)
+++ /trunk/glueforge/templates/psdb/code.tt	(revision 8263)
@@ -31,4 +31,5 @@
 [% INCLUDE objectfrommetadata.tt -%]
 [% INCLUDE selectrowobjects.tt -%]
+[% INCLUDE deleteobject.tt -%]
 [% INCLUDE deleterowobjects.tt -%]
 [% INCLUDE printobjects.tt -%]
Index: /trunk/glueforge/templates/psdb/deleteobject.tt
===================================================================
--- /trunk/glueforge/templates/psdb/deleteobject.tt	(revision 8263)
+++ /trunk/glueforge/templates/psdb/deleteobject.tt	(revision 8263)
@@ -0,0 +1,18 @@
+bool [% table.namespace %]DeleteObject(psDB *dbh, const [% table.object_name %] *object)
+{
+    psMetadata *where = [% table.namespace %]MetadataFromObject(object);
+    long long count = psDBDeleteRows(dbh, [% table.namespace FILTER upper %]_TABLE_NAME, where, 0);
+    psFree(where)
+    if (count < 0) {
+        psError(PS_ERR_UNKNOWN, true, "failed to delete row from [% table.namespace %]");
+        return false;
+    }
+    if (count > 1) {
+        // XXX should this be a psAbort() instead?  It is possible that
+        // having an object match multiple rows was by design.
+        psError(PS_ERR_UNKNOWN, true, "[% table.object_name%] object matched more then one row.  Check your database schema");
+        return false;
+    }
+
+    return true;
+}
Index: /trunk/glueforge/templates/psdb/deleteobject_h.tt
===================================================================
--- /trunk/glueforge/templates/psdb/deleteobject_h.tt	(revision 8263)
+++ /trunk/glueforge/templates/psdb/deleteobject_h.tt	(revision 8263)
@@ -0,0 +1,12 @@
+/** Deletes a row from the database coresponding to an [% table.namespace %]
+ *
+ *  Note that a 'where' search psMetadata is constructed from each object and
+ *  used to find rows to delete.
+ *
+ * @return A The number of rows removed or a negative value on error
+ */
+
+bool [% table.namespace %]DeleteObject(
+    psDB            *dbh,               ///< Database handle
+    const [% table.object_name %] *object    ///< Object to delete
+);
Index: /trunk/glueforge/templates/psdb/header.tt
===================================================================
--- /trunk/glueforge/templates/psdb/header.tt	(revision 8262)
+++ /trunk/glueforge/templates/psdb/header.tt	(revision 8263)
@@ -33,4 +33,5 @@
 [% INCLUDE objectfrommetadata_h.tt -%]
 [% INCLUDE selectrowobjects_h.tt -%]
+[% INCLUDE deleteobject_h.tt -%]
 [% INCLUDE deleterowobjects_h.tt -%]
 [% INCLUDE printobjects_h.tt -%]
