Index: /trunk/dbconfig/config.md
===================================================================
--- /trunk/dbconfig/config.md	(revision 8305)
+++ /trunk/dbconfig/config.md	(revision 8306)
@@ -2,4 +2,4 @@
     pkg_name        STR     ippdb
     pkg_namespace   STR     ippdb
-    pkg_version     STR     0.0.25
+    pkg_version     STR     0.0.26
 END
Index: /trunk/ippdb/configure.ac
===================================================================
--- /trunk/ippdb/configure.ac	(revision 8305)
+++ /trunk/ippdb/configure.ac	(revision 8306)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.59)
 
-AC_INIT([ippdb], [0.0.25], [pan-starrs.ifa.hawaii.edu])
+AC_INIT([ippdb], [0.0.26], [pan-starrs.ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([ippdb.pc.in])
 
Index: /trunk/ippdb/src/ippdb.c
===================================================================
--- /trunk/ippdb/src/ippdb.c	(revision 8305)
+++ /trunk/ippdb/src/ippdb.c	(revision 8306)
@@ -481,4 +481,15 @@
 }
 
+bool weatherInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!weatherInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 weatherRow *weatherPopObject(psDB *dbh)
 {
@@ -1029,4 +1040,15 @@
 }
 
+bool skyp_transparencyInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!skyp_transparencyInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 skyp_transparencyRow *skyp_transparencyPopObject(psDB *dbh)
 {
@@ -1611,4 +1633,15 @@
 }
 
+bool skyp_absorptionInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!skyp_absorptionInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 skyp_absorptionRow *skyp_absorptionPopObject(psDB *dbh)
 {
@@ -2166,4 +2199,15 @@
 }
 
+bool skyp_emissionInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!skyp_emissionInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 skyp_emissionRow *skyp_emissionPopObject(psDB *dbh)
 {
@@ -2702,4 +2746,15 @@
 }
 
+bool dimmInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!dimmInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 dimmRow *dimmPopObject(psDB *dbh)
 {
@@ -3232,4 +3287,15 @@
 }
 
+bool skyp_irInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!skyp_irInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 skyp_irRow *skyp_irPopObject(psDB *dbh)
 {
@@ -3716,4 +3782,15 @@
 }
 
+bool domeInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!domeInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 domeRow *domePopObject(psDB *dbh)
 {
@@ -4194,4 +4271,15 @@
 }
 
+bool telescopeInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!telescopeInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 telescopeRow *telescopePopObject(psDB *dbh)
 {
@@ -4688,4 +4776,15 @@
 }
 
+bool summitExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!summitExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 summitExpRow *summitExpPopObject(psDB *dbh)
 {
@@ -5181,4 +5280,15 @@
 }
 
+bool pzPendingExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!pzPendingExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 pzPendingExpRow *pzPendingExpPopObject(psDB *dbh)
 {
@@ -5692,4 +5802,15 @@
 }
 
+bool pzPendingImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!pzPendingImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 pzPendingImfileRow *pzPendingImfilePopObject(psDB *dbh)
 {
@@ -6197,4 +6318,15 @@
 }
 
+bool newExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!newExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 newExpRow *newExpPopObject(psDB *dbh)
 {
@@ -6671,4 +6803,15 @@
 {
     return newImfileInsert(dbh, object->exp_id, object->class, object->class_id, object->uri);
+}
+
+bool newImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!newImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
 }
 
@@ -7357,4 +7500,15 @@
 {
     return rawDetrendExpInsert(dbh, object->exp_id, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang);
+}
+
+bool rawDetrendExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!rawDetrendExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
 }
 
@@ -8201,4 +8355,15 @@
 }
 
+bool rawScienceExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!rawScienceExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 rawScienceExpRow *rawScienceExpPopObject(psDB *dbh)
 {
@@ -9026,4 +9191,15 @@
 }
 
+bool rawImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!rawImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 rawImfileRow *rawImfilePopObject(psDB *dbh)
 {
@@ -9615,4 +9791,15 @@
 }
 
+bool p1PendingExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p1PendingExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p1PendingExpRow *p1PendingExpPopObject(psDB *dbh)
 {
@@ -10065,4 +10252,15 @@
 }
 
+bool p2PendingExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p2PendingExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p2PendingExpRow *p2PendingExpPopObject(psDB *dbh)
 {
@@ -10563,4 +10761,15 @@
 }
 
+bool p2PendingImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p2PendingImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p2PendingImfileRow *p2PendingImfilePopObject(psDB *dbh)
 {
@@ -11049,4 +11258,15 @@
 }
 
+bool p2DoneExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p2DoneExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p2DoneExpRow *p2DoneExpPopObject(psDB *dbh)
 {
@@ -11547,4 +11767,15 @@
 }
 
+bool p2DoneImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p2DoneImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p2DoneImfileRow *p2DoneImfilePopObject(psDB *dbh)
 {
@@ -12033,4 +12264,15 @@
 }
 
+bool p3PendingExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!p3PendingExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 p3PendingExpRow *p3PendingExpPopObject(psDB *dbh)
 {
@@ -12460,4 +12702,15 @@
 }
 
+bool detRunInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detRunInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detRunRow *detRunPopObject(psDB *dbh)
 {
@@ -12914,4 +13167,15 @@
 }
 
+bool detInputExpInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detInputExpInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detInputExpRow *detInputExpPopObject(psDB *dbh)
 {
@@ -13407,4 +13671,15 @@
 }
 
+bool detProcessedImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detProcessedImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detProcessedImfileRow *detProcessedImfilePopObject(psDB *dbh)
 {
@@ -13899,4 +14174,15 @@
 }
 
+bool detStackedImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detStackedImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detStackedImfileRow *detStackedImfilePopObject(psDB *dbh)
 {
@@ -14391,4 +14677,15 @@
 }
 
+bool detNormalizedImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detNormalizedImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detNormalizedImfileRow *detNormalizedImfilePopObject(psDB *dbh)
 {
@@ -14847,4 +15144,15 @@
 }
 
+bool detMasterFrameInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detMasterFrameInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detMasterFrameRow *detMasterFramePopObject(psDB *dbh)
 {
@@ -15298,4 +15606,15 @@
 }
 
+bool detMasterImfileInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detMasterImfileInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detMasterImfileRow *detMasterImfilePopObject(psDB *dbh)
 {
@@ -15832,4 +16151,15 @@
 }
 
+bool detResidImfileAnalysisInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detResidImfileAnalysisInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detResidImfileAnalysisRow *detResidImfileAnalysisPopObject(psDB *dbh)
 {
@@ -16376,4 +16706,15 @@
 }
 
+bool detResidExpAnalysisInsertObjects(psDB *dbh, psArray *objects)
+{
+    for (long i = 0; i < psArrayLength(objects); i++) {
+        if (!detResidExpAnalysisInsertObject(dbh, objects->data[i])) {
+            return false;
+        }
+    }
+
+    return true;
+}
+
 detResidExpAnalysisRow *detResidExpAnalysisPopObject(psDB *dbh)
 {
Index: /trunk/ippdb/src/ippdb.h
===================================================================
--- /trunk/ippdb/src/ippdb.h	(revision 8305)
+++ /trunk/ippdb/src/ippdb.h	(revision 8306)
@@ -202,4 +202,16 @@
 );
 
+/** Insert an array of weatherRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool weatherInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of weatherRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -427,4 +439,16 @@
     psDB            *dbh,               ///< Database handle
     skyp_transparencyRow *object             ///< skyp_transparencyRow object
+);
+
+/** Insert an array of skyp_transparencyRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool skyp_transparencyInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of skyp_transparencyRow objects
 );
 
@@ -664,4 +688,16 @@
 );
 
+/** Insert an array of skyp_absorptionRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool skyp_absorptionInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of skyp_absorptionRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -885,4 +921,16 @@
     psDB            *dbh,               ///< Database handle
     skyp_emissionRow *object             ///< skyp_emissionRow object
+);
+
+/** Insert an array of skyp_emissionRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool skyp_emissionInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of skyp_emissionRow objects
 );
 
@@ -1114,4 +1162,16 @@
 );
 
+/** Insert an array of dimmRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool dimmInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of dimmRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -1337,4 +1397,16 @@
 );
 
+/** Insert an array of skyp_irRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool skyp_irInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of skyp_irRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -1550,4 +1622,16 @@
     psDB            *dbh,               ///< Database handle
     domeRow         *object             ///< domeRow object
+);
+
+/** Insert an array of domeRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool domeInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of domeRow objects
 );
 
@@ -1771,4 +1855,16 @@
 );
 
+/** Insert an array of telescopeRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool telescopeInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of telescopeRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -1990,4 +2086,16 @@
 );
 
+/** Insert an array of summitExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool summitExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of summitExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -2207,4 +2315,16 @@
     psDB            *dbh,               ///< Database handle
     pzPendingExpRow *object             ///< pzPendingExpRow object
+);
+
+/** Insert an array of pzPendingExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool pzPendingExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of pzPendingExpRow objects
 );
 
@@ -2432,4 +2552,16 @@
 );
 
+/** Insert an array of pzPendingImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool pzPendingImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of pzPendingImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -2651,4 +2783,16 @@
 );
 
+/** Insert an array of newExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool newExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of newExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -2864,4 +3008,16 @@
     psDB            *dbh,               ///< Database handle
     newImfileRow    *object             ///< newImfileRow object
+);
+
+/** Insert an array of newImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool newImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of newImfileRow objects
 );
 
@@ -3133,4 +3289,16 @@
 );
 
+/** Insert an array of rawDetrendExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool rawDetrendExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of rawDetrendExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -3400,4 +3568,16 @@
 );
 
+/** Insert an array of rawScienceExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool rawScienceExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of rawScienceExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -3663,4 +3843,16 @@
 );
 
+/** Insert an array of rawImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool rawImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of rawImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -3872,4 +4064,16 @@
     psDB            *dbh,               ///< Database handle
     p1PendingExpRow *object             ///< p1PendingExpRow object
+);
+
+/** Insert an array of p1PendingExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p1PendingExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p1PendingExpRow objects
 );
 
@@ -4087,4 +4291,16 @@
     psDB            *dbh,               ///< Database handle
     p2PendingExpRow *object             ///< p2PendingExpRow object
+);
+
+/** Insert an array of p2PendingExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p2PendingExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p2PendingExpRow objects
 );
 
@@ -4312,4 +4528,16 @@
 );
 
+/** Insert an array of p2PendingImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p2PendingImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p2PendingImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -4525,4 +4753,16 @@
     psDB            *dbh,               ///< Database handle
     p2DoneExpRow    *object             ///< p2DoneExpRow object
+);
+
+/** Insert an array of p2DoneExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p2DoneExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p2DoneExpRow objects
 );
 
@@ -4750,4 +4990,16 @@
 );
 
+/** Insert an array of p2DoneImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p2DoneImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p2DoneImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -4965,4 +5217,16 @@
 );
 
+/** Insert an array of p3PendingExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool p3PendingExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of p3PendingExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -5170,4 +5434,16 @@
     psDB            *dbh,               ///< Database handle
     detRunRow       *object             ///< detRunRow object
+);
+
+/** Insert an array of detRunRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detRunInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detRunRow objects
 );
 
@@ -5391,4 +5667,16 @@
 );
 
+/** Insert an array of detInputExpRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detInputExpInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detInputExpRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -5610,4 +5898,16 @@
 );
 
+/** Insert an array of detProcessedImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detProcessedImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detProcessedImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -5829,4 +6129,16 @@
 );
 
+/** Insert an array of detStackedImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detStackedImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detStackedImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -6048,4 +6360,16 @@
 );
 
+/** Insert an array of detNormalizedImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detNormalizedImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detNormalizedImfileRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -6257,4 +6581,16 @@
     psDB            *dbh,               ///< Database handle
     detMasterFrameRow *object             ///< detMasterFrameRow object
+);
+
+/** Insert an array of detMasterFrameRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detMasterFrameInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detMasterFrameRow objects
 );
 
@@ -6472,4 +6808,16 @@
     psDB            *dbh,               ///< Database handle
     detMasterImfileRow *object             ///< detMasterImfileRow object
+);
+
+/** Insert an array of detMasterImfileRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detMasterImfileInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detMasterImfileRow objects
 );
 
@@ -6705,4 +7053,16 @@
 );
 
+/** Insert an array of detResidImfileAnalysisRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detResidImfileAnalysisInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detResidImfileAnalysisRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
@@ -6928,4 +7288,16 @@
 );
 
+/** Insert an array of detResidExpAnalysisRow object into a table
+ *
+ * This function constructs and inserts multiple rows based on it's parameters.
+ *
+ * @return true on success
+ */
+
+bool detResidExpAnalysisInsertObjects(
+    psDB            *dbh,               ///< Database handle
+    psArray         *objects            ///< array of detResidExpAnalysisRow objects
+);
+
 /** Removes the last row from the database and returns it
  *
