Index: trunk/ippTools/src/caltool.c
===================================================================
--- trunk/ippTools/src/caltool.c	(revision 18336)
+++ trunk/ippTools/src/caltool.c	(revision 18561)
@@ -110,10 +110,4 @@
 
     psString query = psStringCopy("SELECT * FROM calDB");
-
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereSQL(config->where, NULL);
-        psStringAppend(&query, " %s", whereClause);
-        psFree(whereClause);
-    }
 
     // treat limit == 0 as "no limit"
@@ -195,19 +189,32 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where,  "-cal_id",     "cal_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    PXOPT_LOOKUP_BOOL(faulted, config->args, "-simple", false);
 
     psString query = psStringCopy("SELECT * FROM calRun");
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereSQL(config->where, NULL);
+    if (faulted) {
+        // list only faulted rows
+        psStringAppend(&query, " %s", "WHERE fault != 0");
+    } else {
+        // don't list faulted rows
+        psStringAppend(&query, " %s", "WHERE fault = 0");
+    }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
         psStringAppend(&query, " %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
     if (limit) {
         psString limitString = psDBGenerateLimitSQL(limit);
-        psStringAppend(&query, " %s", limitString);
+        psStringAppend(&query, " AND %s", limitString);
         psFree(limitString);
     }
