Index: /branches/eam_branch_20080706/ippTools/src/chiptool.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/chiptool.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/chiptool.c	(revision 18496)
@@ -665,10 +665,16 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-exp_id",  "exp_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-class_id", "class_id", "==");
+
     PXOPT_LOOKUP_S16(code, config->args, "-code", true, false);
 
-    if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", config->where, code)) {
+    if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", where, code)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         return false;
     }
+    psFree(where);
 
     return true;
Index: /branches/eam_branch_20080706/ippTools/src/flatcorr.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/flatcorr.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/flatcorr.c	(revision 18496)
@@ -92,16 +92,7 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    PXOPT_LOOKUP_STR(exp_id, config->args, "-exp_id", false, false);
-
     psMetadata *where = psMetadataAlloc();
-    // convert exp_id into a psS64
-    if (exp_id) {
-        if (!psMetadataAddS64(where, PS_LIST_TAIL, "exp_id", 0, "==", (psS64)atoll(exp_id))) {
-            psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
-            psFree(where);
-            return false; 
-        }
-    }
-
+
+    PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
     PXOPT_COPY_STR(config->args, where, "-exp_name", "exp_name", "==");
     PXOPT_COPY_STR(config->args, where, "-inst", "camera", "==");
@@ -110,9 +101,10 @@
     PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "dateobs", "<=");
     PXOPT_COPY_STR(config->args, where, "-exp_tag", "exp_tag", "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type", "exp_type", "==");
     PXOPT_COPY_STR(config->args, where, "-filelevel", "filelvel", "==");
     PXOPT_COPY_STR(config->args, where, "-reduction", "reduction", "==");
     PXOPT_COPY_STR(config->args, where, "-filter", "filter", "==");
-    PXOPT_COPY_F64(config->args, where, "-airmass_min", "airmass", ">=");
-    PXOPT_COPY_F64(config->args, where, "-airmass_max", "airmass", "<");
+    PXOPT_COPY_F32(config->args, where, "-airmass_min", "airmass", ">=");
+    PXOPT_COPY_F32(config->args, where, "-airmass_max", "airmass", "<");
     PXOPT_COPY_F64(config->args, where, "-ra_min", "ra", ">=");
     PXOPT_COPY_F64(config->args, where, "-ra_max", "ra", "<");
@@ -157,7 +149,4 @@
     PXOPT_LOOKUP_STR(region, config->args, "-set_region", false, false);
 
-    // default
-    PXOPT_COPY_STR(config->args, where, "-exp_type", "exp_type", "==");
-
     PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -324,39 +313,40 @@
 
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+    PXOPT_LOOKUP_BOOL(limit, config->args, "-limit", false);
 
     // create a temp table to hold completely processed chipRuns
-{
-    psString query = pxDataGet("flatcorr_create_tmp_chiprundone.sql");
-    if (!query) {
-        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
-        return false;
-    }
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
-    }
-
-    psFree(query);
-}
-
+    {
+	psString query = pxDataGet("flatcorr_create_tmp_chiprundone.sql");
+	if (!query) {
+	    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	    return false;
+	}
+
+	if (!p_psDBRunQuery(config->dbh, query)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	    psFree(query);
+	    return false;
+	}
+
+	psFree(query);
+    }
    
     // find all completed chipRuns
-{
-    psString query = pxDataGet("flatcorr_completely_processed_chiprun.sql");
-    if (!query) {
-        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
-        return false;
-    }
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
-    }
-
-    psFree(query);
-}
+    {
+	psString query = pxDataGet("flatcorr_completely_processed_chiprun.sql");
+	if (!query) {
+	    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	    return false;
+	}
+
+	if (!p_psDBRunQuery(config->dbh, query)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	    psFree(query);
+	    return false;
+	}
+
+	psFree(query);
+    }
+
     // find flatcorrRun's that have had all of their chipRun's completed by
     // comparing against the temp table
@@ -367,4 +357,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");
@@ -377,10 +374,10 @@
         psErrorCode err = psErrorCodeLast();
         switch (err) {
-            case PS_ERR_DB_CLIENT:
-                psError(PXTOOLS_ERR_SYS, false, "database error");
-            case PS_ERR_DB_SERVER:
-                psError(PXTOOLS_ERR_PROG, false, "database error");
-            default:
-                psError(PXTOOLS_ERR_PROG, false, "unknown error");
+	  case PS_ERR_DB_CLIENT:
+	    psError(PXTOOLS_ERR_SYS, false, "database error");
+	  case PS_ERR_DB_SERVER:
+	    psError(PXTOOLS_ERR_PROG, false, "database error");
+	  default:
+	    psError(PXTOOLS_ERR_PROG, false, "unknown error");
         }
 
@@ -412,4 +409,7 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-corr_id", "corr_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -422,9 +422,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, NULL);
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
Index: /branches/eam_branch_20080706/ippTools/src/flatcorrConfig.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/flatcorrConfig.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/flatcorrConfig.c	(revision 18496)
@@ -48,140 +48,81 @@
     psMetadata *newrunArgs = psMetadataAlloc();
     // XXX need to allow multiple exp_ids
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_id",  0,
-            "search by exp_id", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_name",  0,
-            "search by exp_name", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-inst",  0,
-            "search for camera", NULL); 
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-telescope",  0,
-            "search for telescope", NULL);
-    psMetadataAddTime(newrunArgs, PS_LIST_TAIL, "-dateobs_begin", 0,   
-            "search for exposures by time (>=)", NULL);
-    psMetadataAddTime(newrunArgs, PS_LIST_TAIL, "-dateobs_end", 0,
-            "search for exposures by time (<)", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_tag",  0,
-            "search by exp_tag", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_type",  0,
-            "search by exp_type", "object");
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-filelevel",  0,
-            "search by filelevel", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-reduction",  0,
-            "search by reduction class", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-filter",  0,
-            "search for filter", NULL); 
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-airmass_min",  0,
-            "define min airmass", NAN);
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-airmass_max",  0,
-            "define max airmass", NAN); 
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ra_min",  0,
-            "define min", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ra_max",  0,
-            "define max", NAN); 
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-decl_min",  0,
-            "define min", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-decl_max",  0,
-            "define max", NAN); 
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-exp_time_min",  0,
-            "define min", NAN);
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-exp_time_max",  0,
-            "define max", NAN); 
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-sat_pixel_frac_min",  0,
-            "define max fraction of saturated pixels", NAN);
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-sat_pixel_frac_max",  0,
-            "define min fraction of saturated pixels", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_min",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_max",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_stdev_min",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_stdev_max",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_mean_stdev_min",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_mean_stdev_max",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-alt_min",  0,
-            "define min", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-alt_max",  0,
-            "define max", NAN); 
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-az_min",  0,
-            "define min", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-az_max",  0,
-            "define max", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,   
-            "define min ccd tempature", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,
-            "define max ccd tempature", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-posang_min",  0,
-            "define min rotator position angle", NAN);
-    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-posang_max",  0,
-            "define max rotator position angle", NAN);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-object",  0,
-            "search by exposure object", NULL);
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-solang_min",  0,
-            "define min solar angle", NAN);
-    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-solang_max",  0,
-            "define max solar angle", NAN);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_workdir",  0,
-            "define workdir", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_label",  0,
-            "define label", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_reduction",  0,
-            "define reduction class", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_expgroup",  0,
-            "define exposure group", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_dvodb",  0,
-            "define DVO db", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_filter",  0,
-            "define filter", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_tess_id",  0,
-            "define tessalation", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_end_stage",  0,
-            "define processing end stage", NULL);
-    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_region",  0,
-            "define region", NULL);
+    psMetadataAddS64(newrunArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by exp_id", 0);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_name",  0,            "search by exp_name", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-inst",  0,            "search for camera", NULL); 
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-telescope",  0,            "search for telescope", NULL);
+    psMetadataAddTime(newrunArgs, PS_LIST_TAIL, "-dateobs_begin", 0,               "search for exposures by time (>=)", NULL);
+    psMetadataAddTime(newrunArgs, PS_LIST_TAIL, "-dateobs_end", 0,            "search for exposures by time (<)", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_tag",  0,            "search by exp_tag", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-exp_type",  0,            "search by exp_type", "object");
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-filelevel",  0,            "search by filelevel", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-reduction",  0,            "search by reduction class", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-filter",  0,            "search for filter", NULL); 
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-airmass_min",  0,            "define min airmass", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-airmass_max",  0,            "define max airmass", NAN); 
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ra_min",  0,            "define min", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-ra_max",  0,            "define max", NAN); 
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-decl_min",  0,            "define min", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-decl_max",  0,            "define max", NAN); 
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-exp_time_min",  0,            "define min", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-exp_time_max",  0,            "define max", NAN); 
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-sat_pixel_frac_min",  0,            "define max fraction of saturated pixels", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-sat_pixel_frac_max",  0,            "define min fraction of saturated pixels", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_min",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_max",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_stdev_min",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_stdev_max",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_mean_stdev_min",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-bg_mean_stdev_max",  0,            "define max", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-alt_min",  0,            "define min", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-alt_max",  0,            "define max", NAN); 
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-az_min",  0,            "define min", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-az_max",  0,            "define max", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-ccd_temp_min",  0,               "define min ccd tempature", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-ccd_temp_max",  0,            "define max ccd tempature", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-posang_min",  0,            "define min rotator position angle", NAN);
+    psMetadataAddF64(newrunArgs, PS_LIST_TAIL, "-posang_max",  0,            "define max rotator position angle", NAN);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-object",  0,            "search by exposure object", NULL);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-solang_min",  0,            "define min solar angle", NAN);
+    psMetadataAddF32(newrunArgs, PS_LIST_TAIL, "-solang_max",  0,            "define max solar angle", NAN);
 
-    psMetadataAddBool(newrunArgs, PS_LIST_TAIL, "-pretend",  0,
-            "print the exposures that would be included in the detrend run and exit", false);
-    psMetadataAddBool(newrunArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_workdir",  0,            "define workdir", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_label",  0,            "define label", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_reduction",  0,            "define reduction class", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_expgroup",  0,            "define exposure group", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_dvodb",  0,            "define DVO db", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_filter",  0,            "define filter", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_tess_id",  0,            "define tessalation", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_end_stage",  0,            "define processing end stage", NULL);
+    psMetadataAddStr(newrunArgs, PS_LIST_TAIL, "-set_region",  0,            "define region", NULL);
+
+    psMetadataAddBool(newrunArgs, PS_LIST_TAIL, "-pretend",  0,            "print the exposures that would be included in the detrend run and exit", false);
+    psMetadataAddBool(newrunArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -addexp
     psMetadata *addexpArgs = psMetadataAlloc();
-    psMetadataAddStr(addexpArgs, PS_LIST_TAIL, "-corr_id", 0,
-            "define Flat Correction ID (required)", NULL);
-    psMetadataAddStr(addexpArgs, PS_LIST_TAIL, "-chip_id", 0,
-            "define Chip ID (required)", NULL);
+    psMetadataAddStr(addexpArgs, PS_LIST_TAIL, "-corr_id", 0,            "define Flat Correction ID (required)", NULL);
+    psMetadataAddStr(addexpArgs, PS_LIST_TAIL, "-chip_id", 0,            "define Chip ID (required)", NULL);
 
     // -pending
     psMetadata *pendingArgs = psMetadataAlloc();
-    psMetadataAddU64(pendingArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(pendingArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddU64(pendingArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(pendingArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -flatcorrimfile
     psMetadata *flatcorrimfileArgs = psMetadataAlloc();
-    psMetadataAddStr(flatcorrimfileArgs, PS_LIST_TAIL, "-corr_id",  0,
-            "search by flat correction ID (required)", NULL);
-    psMetadataAddU64(flatcorrimfileArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(flatcorrimfileArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(flatcorrimfileArgs, PS_LIST_TAIL, "-corr_id",  0,            "search by flat correction ID (required)", NULL);
+    psMetadataAddU64(flatcorrimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(flatcorrimfileArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -done
     psMetadata *doneArgs = psMetadataAlloc();
-    psMetadataAddStr(doneArgs, PS_LIST_TAIL, "-corr_id",  0,
-            "define correction id (required)", NULL);
-    psMetadataAddStr(doneArgs, PS_LIST_TAIL, "-stats",  0,
-            "define stats (required)", NULL);
+    psMetadataAddStr(doneArgs, PS_LIST_TAIL, "-corr_id",  0,            "define correction id (required)", NULL);
+    psMetadataAddStr(doneArgs, PS_LIST_TAIL, "-stats",  0,            "define stats (required)", NULL);
 
     // -updaterun
     psMetadata *updaterunArgs = psMetadataAlloc();
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-corr_id",  0,
-            "define correction id (required)", NULL);
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0,
-            "set state (required)", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-corr_id",  0,            "define correction id (required)", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0,            "set state (required)", NULL);
 
     psFree(now);
@@ -190,16 +131,10 @@
     psMetadata *modes = psMetadataAlloc();
 
-    PXOPT_ADD_MODE("-newrun",  "start a new flat correction run",
-        FLATCORR_MODE_NEWRUN,       newrunArgs);
-    PXOPT_ADD_MODE("-addexp",  "add an exp to a flat correction run",
-        FLATCORR_MODE_ADDEXP,       addexpArgs);
-    PXOPT_ADD_MODE("-pending", "show flat correction runs needing to be processed",
-        FLATCORR_MODE_PENDING,      pendingArgs);
-    PXOPT_ADD_MODE("-flatcorrimfile", "list all the imfiles in a flat correction run",
-        FLATCORR_MODE_FLATCORRIMFILE, flatcorrimfileArgs);
-    PXOPT_ADD_MODE("-done",  "change a flat calibration run's state",
-        FLATCORR_MODE_DONE,         doneArgs);
-    PXOPT_ADD_MODE("-updaterun",  "change a flat calibration run's state",
-        FLATCORR_MODE_UPDATERUN,   updaterunArgs);
+    PXOPT_ADD_MODE("-newrun",  "start a new flat correction run",        FLATCORR_MODE_NEWRUN,       newrunArgs);
+    PXOPT_ADD_MODE("-addexp",  "add an exp to a flat correction run",        FLATCORR_MODE_ADDEXP,       addexpArgs);
+    PXOPT_ADD_MODE("-pending", "show flat correction runs needing to be processed",        FLATCORR_MODE_PENDING,      pendingArgs);
+    PXOPT_ADD_MODE("-flatcorrimfile", "list all the imfiles in a flat correction run",        FLATCORR_MODE_FLATCORRIMFILE, flatcorrimfileArgs);
+    PXOPT_ADD_MODE("-done",  "change a flat calibration run's state",        FLATCORR_MODE_DONE,         doneArgs);
+    PXOPT_ADD_MODE("-updaterun",  "change a flat calibration run's state",        FLATCORR_MODE_UPDATERUN,   updaterunArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
@@ -213,14 +148,4 @@
     psFree(argSets);
     psFree(modes);
-
-    // generate SQL where clause
-    config->where = psMetadataAlloc();
-
-    PXOPT_ADD_WHERE_S64(corr_id);
-
-    if (config->where->list->n < 1) {
-        psFree(config->where);
-        config->where = NULL;
-    }
 
     // define Database handle, if used
Index: /branches/eam_branch_20080706/ippTools/src/guidetool.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/guidetool.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/guidetool.c	(revision 18496)
@@ -61,15 +61,26 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-exp_id",        "exp_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-inst",          "camera", "==");
+    PXOPT_COPY_STR(config->args, where, "-telescope", 	  "telescope", "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type",  	  "exp_type", "==");
+    PXOPT_COPY_S32(config->args, where, "-imfiles",   	  "imfiles", "==");
+    PXOPT_COPY_STR(config->args, where, "-filter",    	  "filter", "==");
+    PXOPT_COPY_STR(config->args, where, "-recip",         "recipe", "==");
+    PXOPT_COPY_S32(config->args, where, "-guide_version", "guide_version", "==");
+    if (!psListLength(where->list)) {
+	psFree (where);
+	where = NULL;
+    }
+
     // return all guidePendingExp rows unless there CLI search options
-    psArray *guidePendingExp = guidePendingExpSelectRowObjects(
-        config->dbh,
-        config->where ? config->where : NULL,
-        0
-    );
+    psArray *guidePendingExp = guidePendingExpSelectRowObjects(config->dbh, where, 0);
+    psFree (where);
+
     if (!guidePendingExp) {
         psError(PS_ERR_UNKNOWN, false, "no guidePendingExp found");
         return false;
     }
-
     psMetadata *output = psMetadataAlloc();
 
@@ -94,11 +105,20 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
     
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-exp_id",        "exp_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-inst",          "camera", "==");
+    PXOPT_COPY_STR(config->args, where, "-telescope", 	  "telescope", "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type",  	  "exp_type", "==");
+    PXOPT_COPY_S32(config->args, where, "-imfiles",   	  "imfiles", "==");
+    PXOPT_COPY_STR(config->args, where, "-filter",    	  "filter", "==");
+    if (!psListLength(where->list)) {
+	psFree (where);
+	where = NULL;
+    }
+
     // return all rawScienceExp rows unless there CLI search options
-    psArray *rawScienceExps = rawScienceExpSelectRowObjects(
-        config->dbh,
-        config->where ? config->where : NULL,
-        0
-    );
-
+    psArray *rawScienceExps = rawScienceExpSelectRowObjects(config->dbh, where, 0);
+    psFree (where);
+    
     if (!rawScienceExps) {
         psError(PS_ERR_UNKNOWN, false, "no rawScienceExp rows found");
Index: /branches/eam_branch_20080706/ippTools/src/guidetoolConfig.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/guidetoolConfig.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/guidetoolConfig.c	(revision 18496)
@@ -52,40 +52,24 @@
     // -pending search
     psMetadata *pendingArgs = psMetadataAlloc();
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,
-        "define exposure ID", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,
-        "define telescope of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,
-        "define exposure type", NULL);
-    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-imfiles",  0,
-        "define number of imfiles", 0);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0,
-        "define filter of interest", NULL);
-    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-recipe",  0,
-        "define recipe of interest", NULL);
-    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-guide_version",  0,
-        "define guide_version of interest", 0);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,        "define exposure ID", NULL);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,        "define camera of interest", NULL);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,        "define telescope of interest", NULL);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,        "define exposure type", NULL);
+    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-imfiles",  0,        "define number of imfiles", 0);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0,        "define filter of interest", NULL);
+    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-recipe",  0,        "define recipe of interest", NULL);
+    psMetadataAddS32(pendingArgs, PS_LIST_TAIL, "-guide_version",  0,        "define guide_version of interest", 0);
 
     // -define inputs
     psMetadata *defineArgs = psMetadataAlloc();
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id",  0,
-        "define class", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-inst",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-telescope",  0,
-        "define camera of interest", NULL);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_type",  0,
-        "define class", NULL);
-    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-imfiles",  0,
-        "define number of imfiles", 0);
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-filter",  0,
-        "define filter of interest", NULL);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id",  0,        "define class", NULL);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-inst",  0,        "define camera of interest", NULL);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-telescope",  0,        "define camera of interest", NULL);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_type",  0,        "define class", NULL);
+    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-imfiles",  0,        "define number of imfiles", 0);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-filter",  0,        "define filter of interest", NULL);
     // these two are inputs NOT search parameters
-    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-recipe",  0,
-        "define recipe of interest", NULL);
-    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-guide_version",  0,
-        "define guide_version of interest", 0);
+    psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-recipe",  0,        "define recipe of interest", NULL);
+    psMetadataAddS32(defineArgs, PS_LIST_TAIL, "-guide_version",  0,        "define guide_version of interest", 0);
 
     // find which mode we're running under
@@ -146,21 +130,4 @@
     psFree(defineArgs);
 
-    // generate SQL where clause
-    config->where = psMetadataAlloc();
-
-    PXOPT_ADD_WHERE_STR_ALIAS("-inst","camera");
-    PXOPT_ADD_WHERE_STR(telescope);
-    PXOPT_ADD_WHERE_STR(exp_type);
-    PXOPT_ADD_WHERE_S32(imfiles);
-    PXOPT_ADD_WHERE_STR(filter);
-    PXOPT_ADD_WHERE_STR(stats);
-    PXOPT_ADD_WHERE_STR(recipe);
-    PXOPT_ADD_WHERE_S32(guide_version);
-
-    if (config->where->list->n < 1) {
-        psFree(config->where);
-        config->where = NULL;
-    }
-
     // define Database handle, if used
     config->dbh = psMemIncrRefCounter(pmConfigDB(config->modules));
Index: /branches/eam_branch_20080706/ippTools/src/magictool.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/magictool.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/magictool.c	(revision 18496)
@@ -103,57 +103,58 @@
 
     // create warped skycells temp table
-{
-    char *query =
-        "CREATE TEMPORARY TABLE warpComplete\n"
-        " (warp_id BIGINT, skycell_id VARCHAR(64), tess_id VARCHAR(64),\n"
-        " PRIMARY KEY(warp_id, skycell_id, tess_id)) ENGINE=MEMORY\n";
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        return false;
-    }
-}
+    {
+	psString query = pxDataGet("magictool_create_tmp_warpcomplete.sql");
+	if (!query) {
+	    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	    return false;
+	}
+
+	if (!p_psDBRunQuery(config->dbh, query)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	    return false;
+	}
+    }
 
     // find warped skycells
-{
-    psString query = pxDataGet("magictool_find_complete_warpruns.sql");
-    if (!query) {
-        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
-        return false;
-    }
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
-    }
-    psFree(query);
-}
+    {
+	psString query = pxDataGet("magictool_find_complete_warpruns.sql");
+	if (!query) {
+	    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	    return false;
+	}
+
+	if (!p_psDBRunQuery(config->dbh, query)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	    psFree(query);
+	    return false;
+	}
+	psFree(query);
+    }
 
     // find the diff_id's of the warped skycells
-{
-    psString query = pxDataGet("magictool_find_complete_diffed_exposures.sql");
-    if (!query) {
-        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
-        return false;
-    }
-
-    if (!p_psDBRunQuery(config->dbh, query)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(query);
-        return false;
-    }
-    psFree(query);
-}
+    {
+	psString query = pxDataGet("magictool_find_complete_diffed_exposures.sql");
+	if (!query) {
+	    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+	    return false;
+	}
+
+	if (!p_psDBRunQuery(config->dbh, query)) {
+	    psError(PS_ERR_UNKNOWN, false, "database error");
+	    psFree(query);
+	    return false;
+	}
+	psFree(query);
+    }
     psArray *output = p_psDBFetchResult(config->dbh);
     if (!output) {
         psErrorCode err = psErrorCodeLast();
         switch (err) {
-            case PS_ERR_DB_CLIENT:
-                psError(PXTOOLS_ERR_SYS, false, "database error");
-            case PS_ERR_DB_SERVER:
-                psError(PXTOOLS_ERR_PROG, false, "database error");
-            default:
-                psError(PXTOOLS_ERR_PROG, false, "unknown error");
+	  case PS_ERR_DB_CLIENT:
+	    psError(PXTOOLS_ERR_SYS, false, "database error");
+	  case PS_ERR_DB_SERVER:
+	    psError(PXTOOLS_ERR_PROG, false, "database error");
+	  default:
+	    psError(PXTOOLS_ERR_PROG, false, "unknown error");
         }
 
@@ -205,12 +206,12 @@
 
         magicRunRow *run = magicRunRowAlloc(
-                0,          // ID
-                "reg",      // state
-                NULL,       // workdir
-                "dirty",    // workdir_state
-                NULL,       // label
-                NULL,       // dvodb
-                NULL        // registered
-        );
+	    0,          // ID
+	    "reg",      // state
+	    NULL,       // workdir
+	    "dirty",    // workdir_state
+	    NULL,       // label
+	    NULL,       // dvodb
+	    NULL        // registered
+	    );
         if (!run) {
             psAbort("failed to alloc magicRun object");
@@ -241,7 +242,7 @@
 
             if (!magicInputSkyfileInsert(config->dbh,
-                magic_id,
-                diff_id,
-                node)) {
+					 magic_id,
+					 diff_id,
+					 node)) {
                 psError(PS_ERR_UNKNOWN, false, "database error");
                 psFree(grouped);
@@ -268,6 +269,6 @@
     PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
     PXOPT_LOOKUP_STR(dvodb, config->args, "-dvodb", false, false);
+    PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
-    PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
 
     magicRunRow *run = magicRunRowAlloc(
@@ -348,4 +349,9 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-magic_id", "magic_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-diff_id", "diff_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-node", "node", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -358,9 +364,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "magicInputSkyfile");
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "magicInputSkyfile");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -500,5 +507,13 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    PXOPT_LOOKUP_STR(magic_id, config->args, "-magic_id", false, false);
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-magic_id", "magic_id", "==");
+
+    psString whereClause = NULL;
+    if (psListLength(where->list)) {
+        whereClause = psDBGenerateWhereSQL(where, NULL);
+    }
+    psFree(where);
+
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
@@ -510,11 +525,6 @@
     }
 
-    if (magic_id) {
-        psMetadata *where = psMetadataAlloc();
-        psMetadataAddS64(where, PS_LIST_TAIL, "magic_id", 0, "==", (psS64)atoll(magic_id));
-        psString whereClause = psDBGenerateWhereSQL(where, NULL);
-        psFree(where);
+    if (whereClause) {
         psStringAppend(&query, " %s", whereClause);
-        psFree(whereClause);
     }
 
@@ -542,6 +552,6 @@
     if (!psArrayLength(output)) {
         psTrace("magictool", PS_LOG_INFO, "no rows found");
-//        psFree(output);
-//        return true;
+	// psFree(output);
+        // return true;
     }
 
@@ -553,12 +563,6 @@
     }
 
-
-    if (magic_id) {
-        psMetadata *where = psMetadataAlloc();
-        psMetadataAddS64(where, PS_LIST_TAIL, "magic_id", 0, "==", (psS64)atoll(magic_id));
-        psString whereClause = psDBGenerateWhereSQL(where, NULL);
-        psFree(where);
+    if (whereClause) {
         psStringAppend(&query, " %s", whereClause);
-        psFree(whereClause);
     }
 
@@ -613,5 +617,5 @@
     pxNode *root = psHashLookup(forest, "root");
     psFree(forest);
-//    pxTreePrint(stdout, root);
+    // pxTreePrint(stdout, root);
 
     // crawl through the tree and looking for nodes with children that are all
@@ -630,4 +634,5 @@
 
     psFree(output);
+    psFree(whereClause);
 
     return true;
@@ -744,4 +749,7 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-magic_id", "magic_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -752,4 +760,11 @@
         return false;
     }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "magicRun");
+        psStringAppend(&query, " AND %s", whereClause);
+        psFree(whereClause);
+    }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
Index: /branches/eam_branch_20080706/ippTools/src/magictoolConfig.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/magictoolConfig.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/magictoolConfig.c	(revision 18496)
@@ -52,106 +52,67 @@
     // -definerun
     psMetadata *definerunArgs = psMetadataAlloc();
-    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-workdir", 0,
-            "define workdir (required)", NULL);
-    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-label", 0,
-            "define label", NULL);
-    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-dvodb", 0,
-            "define dvodb", NULL);
-    psMetadataAddTime(definerunArgs, PS_LIST_TAIL, "-registered",  0,
-            "time detrend run was registered", now);
-    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-simple",  0,
-            "use the simple output format", false);
+    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-workdir", 0,            "define workdir (required)", NULL);
+    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-label", 0,            "define label", NULL);
+    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-dvodb", 0,            "define dvodb", NULL);
+    psMetadataAddTime(definerunArgs, PS_LIST_TAIL, "-registered",  0,            "time detrend run was registered", now);
+    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
 
     // -updaterun
     psMetadata *updaterunArgs = psMetadataAlloc();
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define warptool ID (required)", NULL);
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0,
-            "set state (required)", NULL);
-#if 0
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-workdir", 0,
-            "define workdir (required)", NULL);
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-registered",  0,
-            "time detrend run was registered", now);
-#endif
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-magic_id", 0,            "define warptool ID (required)", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0,            "set state (required)", NULL);
 
     // -addinputskyfile
     psMetadata *addinputskyfileArgs = psMetadataAlloc();
-    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define magictool ID (required)", NULL);
-    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,
-            "define difftool ID (required)", NULL);
-    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-node",  0,
-            "define symbolic node name (required)", NULL);
+    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-magic_id", 0,            "define magictool ID (required)", NULL);
+    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,            "define difftool ID (required)", NULL);
+    psMetadataAddStr(addinputskyfileArgs, PS_LIST_TAIL, "-node",  0,            "define symbolic node name (required)", NULL);
 
     // -inputskyfile
     psMetadata *inputskyfileArgs = psMetadataAlloc();
-    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "search by magictool ID", NULL);
-    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,
-            "search by difftool ID", NULL);
-    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-node",  0,
-            "search by symbolic node name", NULL);
-    psMetadataAddU64(inputskyfileArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(inputskyfileArgs, PS_LIST_TAIL, "-simple",  0,
-            "use the simple output format", false);
+    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-magic_id", 0,            "search by magictool ID", NULL);
+    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,            "search by difftool ID", NULL);
+    psMetadataAddStr(inputskyfileArgs, PS_LIST_TAIL, "-node",  0,            "search by symbolic node name", NULL);
+    psMetadataAddU64(inputskyfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(inputskyfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
 
     // -inputtree
     psMetadata *inputtreeArgs = psMetadataAlloc();
-    psMetadataAddStr(inputtreeArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define magictool ID (required)", NULL);
-    psMetadataAddStr(inputtreeArgs, PS_LIST_TAIL, "-dep_file", 0,
-            "order of operations dep. file (required)", NULL);
+    psMetadataAddStr(inputtreeArgs, PS_LIST_TAIL, "-magic_id", 0,            "define magictool ID (required)", NULL);
+    psMetadataAddStr(inputtreeArgs, PS_LIST_TAIL, "-dep_file", 0,            "order of operations dep. file (required)", NULL);
 
     // -tooprocess
     psMetadata *toprocessArgs = psMetadataAlloc();
-    psMetadataAddStr(toprocessArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "search by magic ID", NULL);
-    psMetadataAddU64(toprocessArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(toprocessArgs, PS_LIST_TAIL, "-simple",  0,
-            "use the simple output format", false);
+    psMetadataAddStr(toprocessArgs, PS_LIST_TAIL, "-magic_id", 0,            "search by magic ID", NULL);
+    psMetadataAddU64(toprocessArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(toprocessArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
 
     // -addresult
     psMetadata *addresultArgs = psMetadataAlloc();
-    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define magictool ID (required)", NULL);
-    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-node",  0,
-            "define symbolic node name (required)", NULL);
-    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-uri",  0,
-            "define URI (required)", NULL);
+    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-magic_id", 0,            "define magictool ID (required)", NULL);
+    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-node",  0,            "define symbolic node name (required)", NULL);
+    psMetadataAddStr(addresultArgs, PS_LIST_TAIL, "-uri",  0,            "define URI (required)", NULL);
 
     // -tomask
     psMetadata *tomaskArgs = psMetadataAlloc();
-    psMetadataAddU64(tomaskArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(tomaskArgs, PS_LIST_TAIL, "-simple",  0,
-            "use the simple output format", false);
+    psMetadataAddU64(tomaskArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(tomaskArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
 
     // -addmask
     psMetadata *addmaskArgs = psMetadataAlloc();
-    psMetadataAddStr(addmaskArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define magictool ID (required)", NULL);
-    psMetadataAddStr(addmaskArgs, PS_LIST_TAIL, "-uri",  0,
-            "define URI (required)", NULL);
+    psMetadataAddStr(addmaskArgs, PS_LIST_TAIL, "-magic_id", 0,            "define magictool ID (required)", NULL);
+    psMetadataAddStr(addmaskArgs, PS_LIST_TAIL, "-uri",  0,            "define URI (required)", NULL);
 
     // -toskyfilemask
     psMetadata *toskyfilemaskArgs = psMetadataAlloc();
-    psMetadataAddStr(toskyfilemaskArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "search by magic ID", NULL);
-    psMetadataAddU64(toskyfilemaskArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(toskyfilemaskArgs, PS_LIST_TAIL, "-simple",  0,
-            "use the simple output format", false);
+    psMetadataAddStr(toskyfilemaskArgs, PS_LIST_TAIL, "-magic_id", 0,            "search by magic ID", NULL);
+    psMetadataAddU64(toskyfilemaskArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(toskyfilemaskArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
 
     // -addskyfilemask
     psMetadata *addskyfilemaskArgs = psMetadataAlloc();
-    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-magic_id", 0,
-            "define magictool ID (required)", NULL);
-    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-diff_id",  0,
-            "define difftool ID (required)", NULL);
-    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-uri",  0,
-            "define URI (required)", NULL);
+    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-magic_id", 0,            "define magictool ID (required)", NULL);
+    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-diff_id",  0,            "define difftool ID (required)", NULL);
+    psMetadataAddStr(addskyfilemaskArgs, PS_LIST_TAIL, "-uri",  0,            "define URI (required)", NULL);
 
     psFree(now);
@@ -184,18 +145,4 @@
     psFree(modes);
 
-    // generate SQL where clause
-    config->where = psMetadataAlloc();
-
-    PXOPT_ADD_WHERE_S64(warp_id);
-    PXOPT_ADD_WHERE_STR(skycell_id);
-    PXOPT_ADD_WHERE_STR(tess_id);
-    PXOPT_ADD_WHERE_STR(exp_id);
-    PXOPT_ADD_WHERE_STR_ALIAS("-code", "fault");
-
-    if (config->where->list->n < 1) {
-        psFree(config->where);
-        config->where = NULL;
-    }
-
     // define Database handle, if used
     // do this last so we don't setup a connection before CLI options are
Index: /branches/eam_branch_20080706/ippTools/src/pstamptool.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/pstamptool.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/pstamptool.c	(revision 18496)
@@ -100,29 +100,8 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
-    bool status = false;
-    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri");
-        return false;
-    }
-    if (!uri) {
-        psError(PS_ERR_UNKNOWN, true, "-uri is required");
-        return false;
-    }
-    psString outProduct = psMetadataLookupStr(&status, config->args, "-out_product");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to looku value for -out_product");
-        return false;
-    }
-    if (!outProduct) {
-        psError(PS_ERR_UNKNOWN, true, "-out_product is required");
-        return false;
-    }
-
-    psString lastFileset = psMetadataLookupStr(&status, config->args, "-last_fileset");
-    psString state = psMetadataLookupStr(&status, config->args, "-state");
-    if (!state) {
-        state = "enabled";
-    }
+    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",           true, false);
+    PXOPT_LOOKUP_STR(outProduct,  config->args, "-out_product",   true, false);
+    PXOPT_LOOKUP_STR(lastFileset, config->args, "-last_fileset", false, false);
+    PXOPT_LOOKUP_STR(state,       config->args, "-state",         false, false);
 
     if (!pstampDataStoreInsert(config->dbh,
@@ -142,18 +121,24 @@
 static bool datastoreMode(pxConfig *config)
 {
-    bool status = false;
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString ds_id = psMetadataLookupStr(&status, config->args, "-ds_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ds_id");
-        return false;
-    }
-
-    psString query = NULL;
-    psStringAppend(&query, "SELECT * FROM pstampDataStore");
-    if (ds_id) {
-        psStringAppend(&query, " WHERE ds_id = '%s'", ds_id);
-    }
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-ds_id", "ds_id", "==");
+
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = pxDataGet("pstamptool_datastore.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereSQL(where, NULL);
+        psStringAppend(&query, " %s", whereClause);
+        psFree(whereClause);
+    }
+    psFree(where);
+
     if (!p_psDBRunQuery(config->dbh, query)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
@@ -170,14 +155,4 @@
         psFree(output);
         return true;
-    }
-
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            return false;
-        }
     }
 
@@ -195,27 +170,9 @@
 static bool moddatastoreMode(pxConfig *config)
 {
-    bool    status;
-
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString ds_id = psMetadataLookupStr(&status, config->args, "-ds_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ds_id");
-        return false;
-    }
-    if (!ds_id) {
-        psError(PS_ERR_UNKNOWN, true, "-ds_id is required");
-        return false;
-    }
-    psString lastFileset = psMetadataLookupStr(&status, config->args, "-last_fileset");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -last_fileset");
-        return false;
-    }
-    psString state = psMetadataLookupStr(&status, config->args, "-state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -state");
-        return false;
-    }
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(ds_id,       config->args, "-ds_id",         true, false);
+    PXOPT_LOOKUP_STR(lastFileset, config->args, "-last_fileset",  false, false);
+    PXOPT_LOOKUP_STR(state,       config->args, "-state",         false, false);
 
     if (!state && !lastFileset) {
@@ -224,9 +181,7 @@
     }
 
-    char *query = NULL;
+    char *query = psStringCopy ("UPDATE pstampDataStore SET");
     bool needComma = false;
     
-    psStringAppend(&query, "UPDATE pstampDataStore SET");
-
     if (lastFileset) {
         psStringAppend(&query, " lastFileset = '%s'", lastFileset);
@@ -235,6 +190,5 @@
 
     if (state) {
-        psStringAppend(&query, "%s state = '%s'", needComma ? "," : " ",
-            state);
+        psStringAppend(&query, "%s state = '%s'", needComma ? "," : " ", state);
         needComma = true; // be ready in case we add another field
     }
@@ -261,4 +215,7 @@
 
 // Replace $REQ_ID with the value of the request id if present in the outFileset
+// XXX EAM : rewrite this using psStringSubstitute:
+// word = psStringAppend (NULL, "%" PRId64, req_id;
+// converted = psStringSubstitute (outFileset, word, MAGIC_STR); 
 
 static bool
@@ -303,36 +260,9 @@
 static bool addReqMode(pxConfig *config)
 {
-    bool    status;
-
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri");
-        return false;
-    }
-    if (!uri) {
-        psError(PS_ERR_UNKNOWN, true, "-uri is required");
-        return false;
-    }
-    psString outFileset = psMetadataLookupStr(&status, config->args, "-out_fileset");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -out_fileset");
-        return false;
-    }
-    if (!outFileset) {
-        psError(PS_ERR_UNKNOWN, true, "-out_fileset is required");
-        return false;
-    }
-
-    // Data Store ID is optional
-    psString ds_id = psMetadataLookupStr(&status, config->args, "-ds_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -ds_id");
-        return false;
-    }
-    if (!ds_id) {
-        ds_id = "0";
-    }
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",           true, false);
+    PXOPT_LOOKUP_STR(outFileset,  config->args, "-out_fileset",   true, false);
+    PXOPT_LOOKUP_STR(ds_id,       config->args, "-ds_id",         false, false);
 
     char *query ="INSERT INTO pstampRequest"
@@ -368,23 +298,22 @@
     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"
-            " *"
-            " FROM pstampRequest"
-            " WHERE state = 'new'"
-        );
-
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "pstampRequest");
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where, "-ds_id", "ds_id", "==");
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = pxDataGet("pstamptool_pendingreq.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampRequest");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -413,15 +342,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            psFree(output);
-            return false;
-        }
-    }
-
     // negative simple so the default is true
     if (!ippdbPrintMetadatas(stdout, output, "pstampRequest", !simple)) {
@@ -435,19 +353,18 @@
     return true;
 }
-static bool completedReqMode(pxConfig *config)
-{
-    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 = 
-        "SELECT * FROM pstampRequest WHERE state = 'run' AND "
-            "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id "
-            " AND pstampJob.state != 'stop') = 0" ;
+
+static bool listReqMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(req_id,  config->args, "-req_id", true, false);
+    PXOPT_LOOKUP_U64(limit,   config->args, "-limit",  false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = NULL;
+    psStringAppend(&query, "SELECT"
+		   " *"
+		   " FROM pstampRequest"
+		   " WHERE req_id = %s", req_id);
 
     // treat limit == 0 as "no limit"
@@ -463,4 +380,5 @@
         return false;
     }
+    psFree(query);
 
     psArray *output = p_psDBFetchResult(config->dbh);
@@ -469,20 +387,8 @@
         return false;
     }
-
     if (!psArrayLength(output)) {
         psTrace("pstamptool", PS_LOG_INFO, "no rows found");
         psFree(output);
         return true;
-    }
-
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            psFree(output);
-            return false;
-        }
     }
 
@@ -499,30 +405,15 @@
 }
 
-static bool listReqMode(pxConfig *config)
-{
-    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 = NULL;
-
-    psString req_id = psMetadataLookupStr(&status, config->args, "-req_id");
-    
-    if (req_id) {
-        psStringAppend(&query,
-                "SELECT"
-                " *"
-                " FROM pstampRequest"
-                " WHERE req_id = %s", req_id
-            );
-    } else {
-        fprintf(stderr, "req_id must be specified\n");
-        exit (1);
-    }
+static bool completedReqMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = 
+        "SELECT * FROM pstampRequest WHERE state = 'run' AND "
+            "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id "
+            " AND pstampJob.state != 'stop') = 0" ;
 
     // treat limit == 0 as "no limit"
@@ -538,5 +429,4 @@
         return false;
     }
-    psFree(query);
 
     psArray *output = p_psDBFetchResult(config->dbh);
@@ -545,19 +435,9 @@
         return false;
     }
+
     if (!psArrayLength(output)) {
         psTrace("pstamptool", PS_LOG_INFO, "no rows found");
         psFree(output);
         return true;
-    }
-
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            psFree(output);
-            return false;
-        }
     }
 
@@ -576,26 +456,8 @@
 static bool processedReqMode(pxConfig *config)
 {
-    bool    status;
-
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString req_id = psMetadataLookupStr(&status, config->args, "-req_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -req_id");
-        return false;
-    }
-    if (!req_id) {
-        psError(PS_ERR_UNKNOWN, true, "-req_id is required");
-        return false;
-    }
-    psString state = psMetadataLookupStr(&status, config->args, "-state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -state");
-        return false;
-    }
-    if (!state) {
-        psError(PS_ERR_UNKNOWN, true, "-state is required");
-        return false;
-    }
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(req_id, config->args, "-req_id", true, false);
+    PXOPT_LOOKUP_STR(state,  config->args, "-state",  true, false);
 
     // XXX: check state for a legal value
@@ -620,99 +482,37 @@
     return true;
 }
+
 static bool addJobMode(pxConfig *config)
 {
-    bool    status;
     bool    stampJob = false;
-
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString job_type = psMetadataLookupStr(&status, config->args, "-job_type");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -job_type");
-        return false;
-    }
-    if (job_type) {
-        if (!strcmp(job_type, "get_image") || !strcmp(job_type, "detect_query")) {
-            stampJob = false;
-        } else if (!strcmp(job_type, "stamp")) {
-            stampJob = true;
-        } else {
-            psError(PS_ERR_UNKNOWN, false, "unknown value for -job_type: %s", job_type);
-            return false;
-        }
+    char   *query = NULL;
+
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",        true, false);
+    PXOPT_LOOKUP_STR(req_id,      config->args, "-req_id",     true, false);
+    PXOPT_LOOKUP_STR(job_type,    config->args, "-job_type",   false, false);
+    PXOPT_LOOKUP_STR(outputBase,  config->args, "-outputBase", true,  false);
+    PXOPT_LOOKUP_STR(argString,   config->args, "-args",       true,  false);
+    PXOPT_LOOKUP_STR(stateString, config->args, "-state",      false, false);
+    PXOPT_LOOKUP_STR(result,      config->args, "-result",     false, false);
+
+    if (!strcmp(job_type, "get_image") || !strcmp(job_type, "detect_query")) {
+	stampJob = false;
+    } else if (!strcmp(job_type, "stamp")) {
+	stampJob = true;
     } else {
-        job_type = "stamp";
-        stampJob = true;
-    }
-
-    psString uri = psMetadataLookupStr(&status, config->args, "-uri");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -uri");
-        return false;
-    }
-    if (!uri) {
-        psError(PS_ERR_UNKNOWN, true, "-uri is required");
-        return false;
-    }
-
-    psString req_id = psMetadataLookupStr(&status, config->args, "-req_id");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -req_id");
-        return false;
-    }
-    if (!req_id) {
-        psError(PS_ERR_UNKNOWN, true, "-req_id is required");
-        return false;
-    }
-
-    psString outputBase = psMetadataLookupStr(&status, config->args, "-outputBase");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -outputBase");
-        return false;
-    }
-    if (!outputBase) {
-        psError(PS_ERR_UNKNOWN, true, "-outputBase is required");
-        return false;
-    }
-
-    psString argString = psMetadataLookupStr(&status, config->args, "-args");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -args");
-        return false;
-    }
-    if (!argString) {
-        if (stampJob) {
-            psError(PS_ERR_UNKNOWN, true, "-args is required");
-            return false;
-        }
-    }
-
-    psString stateString = psMetadataLookupStr(&status, config->args, "-state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -state");
-        return false;
-    }
-    if (!stateString) {
-        stateString = "run";
-    }
-    psString result = psMetadataLookupStr(&status, config->args, "-result");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -result");
-        return false;
-    }
-    if (!result) {
-        result = "0";
-    }
-
-    char *query;
+	psError(PS_ERR_UNKNOWN, false, "unknown value for -job_type: %s", job_type);
+	return false;
+    }
     
     if (stampJob) {
-        query ="INSERT INTO pstampJob"
-                 " (req_id, state, jobType, uri, outputBase, result, args)"
-                 " VALUES( %s, '%s', '%s', '%s', '%s', %s, '%s')";
+	query = pxDataGet("pstamptool_addjob_stampjob.sql");
     } else {
-        query ="INSERT INTO pstampJob"
-                 " (req_id, state, jobType, uri, outputBase, result)"
-                 " VALUES( %s, '%s', '%s', '%s', '%s', %s)";
+	query = pxDataGet("pstamptool_addjob_otherjob.sql");
+    }
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
     }
 
@@ -740,16 +540,17 @@
     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;
-    }
+    PXOPT_LOOKUP_STR(req_id, config->args, "-req_id", false, false);
+    PXOPT_LOOKUP_STR(job_id, config->args, "-job_id", false, false);
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
 
     psString query = NULL;
 
-    psString req_id = psMetadataLookupStr(&status, config->args, "-req_id");
-    psString job_id = psMetadataLookupStr(&status, config->args, "-job_id");
-    
+    if (!req_id && !job_id) {
+        fprintf(stderr, "either req_id or job_id must be specified\n");
+        exit (1);
+    }
+
     if (req_id) {
         psStringAppend(&query,
@@ -759,5 +560,5 @@
                 " WHERE req_id = %s", req_id
             );
-    } else if (job_id) {
+    } else {
         psStringAppend(&query,
                 "SELECT"
@@ -766,8 +567,5 @@
                 " WHERE job_id = %s", job_id
             );
-    } else {
-        fprintf(stderr, "either req_id or job_id must be specified\n");
-        exit (1);
-    }
+    } 
 
     // treat limit == 0 as "no limit"
@@ -796,15 +594,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            psFree(output);
-            return false;
-        }
-    }
-
     // negative simple so the default is true
     if (!ippdbPrintMetadatas(stdout, output, "pstampJob", !simple)) {
@@ -823,23 +610,23 @@
     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"
-            " *"
-            " FROM pstampJob"
-            " WHERE state = 'run'"
-        );
-
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "pstampJob");
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-cam_id", "cam_id", "==");
+
+    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
+    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
+
+    psString query = pxDataGet("pstamptool_pendingjob.sql");
+    if (!query) {
+        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+        return false;
+    }
+
+    // use psDBGenerateWhereSQL because the SQL yields an intermediate table
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -868,15 +655,4 @@
     }
 
-    bool simple = false;
-    {
-        bool status = false;
-        simple = psMetadataLookupBool(&status, config->args, "-simple");
-        if (!status) {
-            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
-            psFree(output);
-            return false;
-        }
-    }
-
     // negative simple so the default is true
     if (!ippdbPrintMetadatas(stdout, output, "pstampJob", !simple)) {
@@ -894,51 +670,30 @@
 {
     bool    status;
-
-    PS_ASSERT_PTR_NON_NULL(config, false);
-
-    psString job_id = psMetadataLookupStr(&status, config->args, "-job_id");
+    char *query = NULL;
+
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    PXOPT_LOOKUP_STR(job_id,    config->args, "-job_id", true, false);
+    PXOPT_LOOKUP_STR(state,     config->args, "-state",  true, false);
+    PXOPT_LOOKUP_STR(jobResult, config->args, "-result", false, false);
+    // XXX: check state for a legal value
+
+    if (jobResult) {
+	query = psStringCopy ("UPDATE pstampJob"
+			      " SET state = '%s', result = '%s'"
+			      " WHERE job_id = '%s'");
+	status = p_psDBRunQuery(config->dbh, query, state, jobResult, job_id);
+    } else {
+	query = psStringCopy ("UPDATE pstampJob"
+			      " SET state = '%s'"
+			      " WHERE job_id = '%s'");
+	status = p_psDBRunQuery(config->dbh, query, state, job_id);
+    }
+
     if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -job_id");
-        return false;
-    }
-    if (!job_id) {
-        psError(PS_ERR_UNKNOWN, true, "-job_id is required");
-        return false;
-    }
-    psString state = psMetadataLookupStr(&status, config->args, "-state");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -state");
-        return false;
-    }
-    if (!state) {
-        psError(PS_ERR_UNKNOWN, true, "-state is required");
-        return false;
-    }
-    psString jobResult = psMetadataLookupStr(&status, config->args, "-result");
-    if (!status) {
-        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -result");
-        return false;
-    }
-
-    psString resultStr = NULL;
-    if (!jobResult) {
-        resultStr = psStringCopy("");
-    } else {
-        psStringAppend(&resultStr, ", result = '%s'", jobResult);
-    }
-        
-
-    // XXX: check state for a legal value
-
-    char *query ="UPDATE pstampJob"
-                 " SET state = '%s' %s"
-                 " WHERE job_id = '%s'";
-
-    if (!p_psDBRunQuery(config->dbh, query, state, resultStr, job_id)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
         psFree(query);
         return false;
     }
-    psFree(resultStr);
 
     psU64 affected = psDBAffectedRows(config->dbh);
Index: /branches/eam_branch_20080706/ippTools/src/pstamptoolConfig.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/pstamptoolConfig.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/pstamptoolConfig.c	(revision 18496)
@@ -45,137 +45,76 @@
     // -adddatastore
     psMetadata *adddatastoreArgs = psMetadataAlloc();
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-uri", 0,
-            "define storage uri", NULL);
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0,
-            "define last fileset seen", NULL);
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-state", 0,
-            "define datastore state", NULL);
-    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-out_product", 0,
-            "define output product name", NULL);
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-uri",          0, "define storage uri (required)", NULL);
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-out_product",  0, "define output product name (required)", NULL);
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0, "define last fileset seen", NULL);
+    psMetadataAddStr(adddatastoreArgs, PS_LIST_TAIL, "-state",        0, "define datastore state", "enabled");
     
     // -datastore
     psMetadata *datastoreArgs = psMetadataAlloc();
-    psMetadataAddBool(datastoreArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
-    psMetadataAddStr(datastoreArgs, PS_LIST_TAIL, "-ds_id", 0,
-            "define ds_id", NULL); 
+    psMetadataAddStr(datastoreArgs, PS_LIST_TAIL, "-ds_id", 0,            "define ds_id", NULL); 
+    psMetadataAddBool(datastoreArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -moddatastore
     psMetadata *moddatastoreArgs = psMetadataAlloc();
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-ds_id", 0,
-            "define ds_id", NULL); 
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0,
-            "define storage uri", NULL);
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-state", 0,
-            "define storage uri", NULL);
-    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-out_product", 0,
-            "define output product name", NULL);
-
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-ds_id", 0,            "define ds_id", "0"); 
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-last_fileset", 0,            "define storage uri", NULL);
+    psMetadataAddStr(moddatastoreArgs, PS_LIST_TAIL, "-state", 0,            "define storage uri", NULL);
 
     // -addreq
     psMetadata *addreqArgs = psMetadataAlloc();
-    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-uri", 0,
-            "define request file uri", NULL); 
-    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-ds_id", 0,
-            "define request ds_id", NULL); 
-    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-out_fileset", 0,
-            "define request output_fileset", NULL); 
+    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-uri", 0,            "define request file uri", NULL); 
+    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-ds_id", 0,            "define request ds_id", NULL); 
+    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-out_fileset", 0,            "define request output_fileset", NULL); 
 
     // -pendingreq
     psMetadata *pendingreqArgs = psMetadataAlloc();
-    psMetadataAddStr(pendingreqArgs, PS_LIST_TAIL, "-req_id", 0,
-            "define req_id", NULL); 
-    psMetadataAddU64(pendingreqArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(pendingreqArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(pendingreqArgs, PS_LIST_TAIL, "-req_id", 0,            "define req_id", NULL); 
+    psMetadataAddU64(pendingreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(pendingreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -listreq
     psMetadata *listreqArgs = psMetadataAlloc();
-    psMetadataAddStr(listreqArgs, PS_LIST_TAIL, "-req_id", 0,
-            "define req_id", NULL); 
-    psMetadataAddU64(listreqArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(listreqArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(listreqArgs, PS_LIST_TAIL, "-req_id", 0,            "define req_id", NULL); 
+    psMetadataAddU64(listreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(listreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -completedreq
     psMetadata *completedreqArgs = psMetadataAlloc();
-    psMetadataAddU64(completedreqArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(completedreqArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddU64(completedreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(completedreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -processedreq
     psMetadata *processedreqArgs = psMetadataAlloc();
-    psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-req_id", 0,
-            "req_id for which to change state", NULL); 
-    psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-state", 0,
-            "new state", NULL); 
+    psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-req_id", 0,            "req_id for which to change state", NULL); 
+    psMetadataAddStr(processedreqArgs, PS_LIST_TAIL, "-state", 0,            "new state", NULL); 
 
     // -addjob
     psMetadata *addjobArgs = psMetadataAlloc();
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-uri", 0,
-            "define job file uri", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-req_id", 0,
-            "define job req_id", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0,
-            "define job job_type", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-outputBase", 0,
-            "define job outputBase", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-args", 0,
-            "define job args", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0,
-            "new state", NULL); 
-    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-result", 0,
-            "new result", NULL); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-uri", 0,            "define job file uri", NULL); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-req_id", 0,            "define job req_id", NULL); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0,            "define job job_type", "stamp"); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-outputBase", 0,            "define job outputBase", NULL); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-args", 0,            "define job args", NULL); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0,            "new state", "run"); 
+    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-result", 0,            "new result", "0"); 
 
     // -listjob
     psMetadata *listjobArgs = psMetadataAlloc();
-    psMetadataAddStr(listjobArgs, PS_LIST_TAIL, "-req_id", 0,
-            "define request", NULL); 
-    psMetadataAddStr(listjobArgs, PS_LIST_TAIL, "-job_id", 0,
-            "define job", NULL); 
-    psMetadataAddU64(listjobArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(listjobArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(listjobArgs, PS_LIST_TAIL, "-req_id", 0,            "define request", NULL); 
+    psMetadataAddStr(listjobArgs, PS_LIST_TAIL, "-job_id", 0,            "define job", NULL); 
+    psMetadataAddU64(listjobArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(listjobArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -pendingjob
     psMetadata *pendingjobArgs = psMetadataAlloc();
-    psMetadataAddStr(pendingjobArgs, PS_LIST_TAIL, "-job_id", 0,
-            "define job", NULL); 
-    psMetadataAddU64(pendingjobArgs, PS_LIST_TAIL, "-limit",  0,
-            "limit result set to N items", 0);
-    psMetadataAddBool(pendingjobArgs, PS_LIST_TAIL, "-simple", 0,
-            "use the simple output format", false);
+    psMetadataAddStr(pendingjobArgs, PS_LIST_TAIL, "-job_id", 0,            "define job", NULL); 
+    psMetadataAddU64(pendingjobArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
+    psMetadataAddBool(pendingjobArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
 
     // -processedjob
     psMetadata *processedjobArgs = psMetadataAlloc();
-    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-job_id", 0,
-            "req_id for which to change state", NULL); 
-    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-state", 0,
-            "new state", NULL); 
-    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-result", 0,
-            "new result", NULL); 
-
-#define PXTOOL_MODE(option, modeval, argset) \
-{ \
-    int N = 0; \
-    if ((N = psArgumentGet (argc, argv, option))) { \
-        psArgumentRemove (N, &argc, argv); \
-        if (config->mode) { \
-            psError(PS_ERR_UNKNOWN, true, "only one mode selection is allowed"); \
-            psFree(config); \
-            return NULL; \
-        } \
-        config->mode = modeval; \
-        config->args = psMemIncrRefCounter(argset); \
-    } \
-    if (!psMetadataAddMetadata(argSets, PS_LIST_TAIL, option, 0, NULL, argset)) {;\
-        psError(PS_ERR_UNKNOWN, false, "failed to add argset for %s", option); \
-    } \
-    psFree(argset); \
-}
+    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-job_id", 0,            "req_id for which to change state", NULL); 
+    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-state", 0,            "new state", NULL); 
+    psMetadataAddStr(processedjobArgs, PS_LIST_TAIL, "-result", 0,            "new result", NULL); 
 
     psMetadata *argSets = psMetadataAlloc();
@@ -208,15 +147,4 @@
     psFree(modes);
 
-    // generate SQL where clause
-    config->where = psMetadataAlloc();
-
-    PXOPT_ADD_WHERE_STR(req_id); 
-    PXOPT_ADD_WHERE_STR(job_id); 
-
-    if (config->where->list->n < 1) {
-        psFree(config->where);
-        config->where = NULL;
-    }
-
     // define Database handle, if used
     // do this last so we don't setup a connection before CLI options are
Index: /branches/eam_branch_20080706/ippTools/src/stacktool.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/stacktool.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/stacktool.c	(revision 18496)
@@ -524,4 +524,8 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -533,9 +537,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "stackInputSkyfile");
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "stackInputSkyfile");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -592,4 +597,8 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -601,9 +610,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "stackSumSkyfile");
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "stackSumSkyfile");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -723,4 +733,8 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
+
     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -732,9 +746,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "stackSumSkyfile");
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "stackSumSkyfile");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     // treat limit == 0 as "no limit"
@@ -790,4 +805,8 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
+    PXOPT_COPY_S16(config->args, where, "-code", "fault", "==");
+
     psString query = pxDataGet("stacktool_revertsumskyfile.sql");
     if (!query) {
@@ -796,9 +815,10 @@
     }
 
-    if (config->where) {
-        psString whereClause = psDBGenerateWhereConditionSQL(config->where, "stackSumSkyfile");
+    if (psListLength(where->list)) {
+        psString whereClause = psDBGenerateWhereConditionSQL(where, "stackSumSkyfile");
         psStringAppend(&query, " AND %s", whereClause);
         psFree(whereClause);
     }
+    psFree(where);
 
     if (!p_psDBRunQuery(config->dbh, query)) {
Index: /branches/eam_branch_20080706/ippTools/src/stacktoolConfig.c
===================================================================
--- /branches/eam_branch_20080706/ippTools/src/stacktoolConfig.c	(revision 18495)
+++ /branches/eam_branch_20080706/ippTools/src/stacktoolConfig.c	(revision 18496)
@@ -157,18 +157,4 @@
     psFree(modes);
 
-    // generate SQL where clause
-    config->where = psMetadataAlloc();
-
-    PXOPT_ADD_WHERE_S64(warp_id);
-    PXOPT_ADD_WHERE_S64(stack_id);
-    PXOPT_ADD_WHERE_STR(skycell_id);
-    PXOPT_ADD_WHERE_STR(tess_id);
-    PXOPT_ADD_WHERE_S16_ALIAS("-code","fault");
-
-    if (config->where->list->n < 1) {
-        psFree(config->where);
-        config->where = NULL;
-    }
-
     // define Database handle, if used
     // do this last so we don't setup a connection before CLI options are
