Index: trunk/ippTools/src/dettool.c
===================================================================
--- trunk/ippTools/src/dettool.c	(revision 26515)
+++ trunk/ippTools/src/dettool.c	(revision 26815)
@@ -94,4 +94,5 @@
         MODECASE(DETTOOL_MODE_PENDINGCLEANUP_PROCESSEDEXP, pendingcleanup_processedexpMode);
         MODECASE(DETTOOL_MODE_DONECLEANUP_PROCESSEDEXP, donecleanup_processedexpMode);
+	MODECASE(DETTOOL_MODE_UPDATESTATE_PROCESSED, updatestateprocessedMode);
         // stacked
         MODECASE(DETTOOL_MODE_TOSTACKED,        tostackedMode);
@@ -142,4 +143,5 @@
         MODECASE(DETTOOL_MODE_PENDINGCLEANUP_RESIDEXP, pendingcleanup_residexpMode);
         MODECASE(DETTOOL_MODE_DONECLEANUP_RESIDEXP, donecleanup_residexpMode);
+	MODECASE(DETTOOL_MODE_UPDATESTATE_RESID, updatestateresidMode);
         // detrunsummary
         MODECASE(DETTOOL_MODE_TODETRUNSUMMARY,  todetrunsummaryMode);
@@ -1859,47 +1861,113 @@
 
 
-bool setProcessedImfileDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *class_id, const char *data_state)
+bool setProcessedImfileDataState(pxConfig *config, psMetadata *where, const char *data_state)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where, false);
     PS_ASSERT_PTR_NON_NULL(data_state, false);
-    PS_ASSERT_PTR_NON_NULL(class_id, false);
 
     if (!isValidDataState (data_state)) return false;
-    
-    char *query = "UPDATE detProcessedImfile SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND exp_id = %" PRId64 
-	" AND class_id = '%s'";
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, exp_id, class_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", exp_id %" PRId64 ", class_id %s", 
-		det_id, exp_id, class_id);
-        return false;
-    }
-
-    return true;
-}
-
-bool setProcessedExpDataState(pxConfig *config, psS64 det_id, psS64 exp_id, const char *data_state)
+
+    psString query = psStringCopy("UPDATE detProcessedImfile SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+bool setProcessedExpDataState(pxConfig *config, psMetadata *where, const char *data_state)
 {
     PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where, false);
     PS_ASSERT_PTR_NON_NULL(data_state, false);
 
     if (!isValidDataState (data_state)) return false;
 
-    char *query = "UPDATE detProcessedExp SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND exp_id = %" PRId64;
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, exp_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", exp_id %" PRId64, 
-		det_id, exp_id);
-        return false;
-    }
-
-    return true;
-}
-
-
+    psString query = psStringCopy("UPDATE detProcessedExp SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+bool setResidImfileDataState(pxConfig *config, psMetadata *where, const char *data_state)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where,false);
+    PS_ASSERT_PTR_NON_NULL(data_state, false);
+
+    if (!isValidDataState (data_state)) return false;
+
+    psString query = psStringCopy("UPDATE detResidImfile SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+// This function apparently not used anymore.
+bool setResidExpDataState(pxConfig *config, psMetadata *where, const char *data_state)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+    PS_ASSERT_PTR_NON_NULL(where,false);
+    PS_ASSERT_PTR_NON_NULL(data_state, false);
+
+    if (!isValidDataState (data_state)) return false;
+
+    psString query = psStringCopy("UPDATE detResidExp SET data_state = '%s'");
+    if (where && psListLength(where->list) > 0) {
+      psString whereClause = psDBGenerateWhereSQL(where,NULL);
+      psStringAppend(&query," %s",whereClause);
+      psFree(whereClause);
+    } else {
+      psError(PS_ERR_UNKNOWN, true, "search parameters are required");
+      return(false);
+    }
+
+    if (!p_psDBRunQueryF(config->dbh, query, data_state)) {
+      psFree(query);
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return(false);
+    }
+    psFree(query);
+    return(true);
+}
+
+// Not yet updated for cleaning
 bool setStackedImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, const char *class_id, const char *data_state)
 {
@@ -1988,48 +2056,5 @@
     return true;
 }
-
-bool setResidImfileDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *class_id, const char *data_state)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-    PS_ASSERT_PTR_NON_NULL(data_state, false);
-    PS_ASSERT_PTR_NON_NULL(class_id, false);
-
-    if (!isValidDataState (data_state)) return false;
-
-    char *query = "UPDATE detResidImfile SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND iteration = %" PRId32 
-	" AND exp_id = %" PRId64 
-	" AND class_id = '%s'";
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, exp_id, class_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", iteration %" PRId32 ", exp_id %" PRId64 ", class_id %s", 
-		det_id, iteration, exp_id, class_id);
-        return false;
-    }
-
-    return true;
-}
-
-bool setResidExpDataState(pxConfig *config, psS64 det_id, psS32 iteration, psS64 exp_id, const char *data_state)
-{
-    PS_ASSERT_PTR_NON_NULL(config, false);
-    PS_ASSERT_PTR_NON_NULL(data_state, false);
-
-    if (!isValidDataState (data_state)) return false;
-
-    char *query = "UPDATE detResidExp SET data_state = '%s'"
-	" WHERE det_id = %" PRId64
-	" AND iteration = %" PRId32 
-	" AND exp_id = %" PRId64;
-    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, exp_id)) {
-        psError(PS_ERR_UNKNOWN, false,
-                "failed to change state for det_id %" PRId64 ", iteration %" PRId32 ", exp_id %" PRId64, 
-		det_id, iteration, exp_id);
-        return false;
-    }
-
-    return true;
-}
+// End not yet modified for cleanup.
 
 bool exportrunMode(pxConfig *config)
