Index: trunk/ippTools/src/pztool.c
===================================================================
--- trunk/ippTools/src/pztool.c	(revision 14627)
+++ trunk/ippTools/src/pztool.c	(revision 15032)
@@ -137,4 +137,11 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    bool status = false;
+    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
+        return false;
+    }
+
     psString query = psStringCopy(
             "SELECT"
@@ -151,4 +158,11 @@
     }
 
+    // treat limit == 0 as "no limit"
+    if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
+    }
+
     if (!p_psDBRunQuery(config->dbh, query)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -196,4 +210,11 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    bool status = false;
+    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
+    if (!status) {
+        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
+        return false;
+    }
+
     psString query = psStringCopy(
             "SELECT"
@@ -208,4 +229,11 @@
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
+    }
+
+    // treat limit == 0 as "no limit"
+    if (limit) {
+        psString limitString = psDBGenerateLimitSQL(limit);
+        psStringAppend(&query, " %s", limitString);
+        psFree(limitString);
     }
 
@@ -478,5 +506,5 @@
         psS64 exp_id = psDBLastInsertID(config->dbh);
 
-        // insert new pzDoneImfile into newImfile
+        // insert new all pzDoneImfile for the exp into newImfile
         {
             char *query =
@@ -503,12 +531,12 @@
             } 
 
-            // sanity check: we should have inserted only one row
+            // sanity check: we should have inserted at least one row
             psU64 affected = psDBAffectedRows(config->dbh);
-            if (psDBAffectedRows(config->dbh) != 1) {
+            if (psDBAffectedRows(config->dbh) < 1) {
                 // rollback
                 if (!psDBRollback(config->dbh)) {
                     psError(PS_ERR_UNKNOWN, false, "database error");
                 }
-                psError(PS_ERR_UNKNOWN, false, "should have affected 1 row but %" PRIu64 " rows were modified", affected);
+                psError(PS_ERR_UNKNOWN, false, "should have affected at least 1 row but %" PRIu64 " rows were modified", affected);
                 psFree(doneExp);
                 psFree(output);
