Index: trunk/ippTools/src/dettool_detrunsummary.c
===================================================================
--- trunk/ippTools/src/dettool_detrunsummary.c	(revision 23688)
+++ trunk/ippTools/src/dettool_detrunsummary.c	(revision 25324)
@@ -336,5 +336,65 @@
 }
 
-// XXX need to add -data_state here
+bool pendingcleanup_detrunsummaryMode(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);
+
+  psMetadata *where = psMetadataAlloc();
+  PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
+  PXOPT_COPY_S32(config->args, where, "-iteration", "iteration", "==");
+
+  psString query = pxDataGet("dettool_pendingcleanup_detrunsummary.sql");
+  if (!query) {
+    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
+    return(false);
+  }
+  
+  if (psListLength(where->list)) {
+    psString whereClause = psDBGenerateWhereConditionSQL(where, "detRunSummary");
+    psStringAppend(&query, " AND %s", whereClause);
+    psFree(whereClause);
+  }
+  psFree(where);
+
+  // treat limit == 0 as "no limit"
+  if (limit) {
+    psString limitString = psDBGenerateLimitSQL(limit);
+    psStringAppend(&query, " %s", limitString);
+    psFree(limitString);
+  }
+  //  fprintf(stderr,">>>%s<<<\n",query);
+  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) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return(false);
+  }
+  if (!psArrayLength(output)) {
+    psTrace("dettool", PS_LOG_INFO, "no rows found");
+    psFree(output);
+    return(true);
+  }
+
+  // negative simple so the default is true
+  if (!ippdbPrintMetadatas(stdout, output, "pendingCleanupDetRun", !simple)) {
+    psError(PS_ERR_UNKNOWN, false, "failed to print array");
+    psFree(output);
+    return(false);
+  }
+  psFree(output);
+
+  return(true);
+}
+
+
+// preliminary code now.
 bool updatedetrunsummaryMode(pxConfig *config)
 {
@@ -344,4 +404,7 @@
     PXOPT_LOOKUP_BOOL(accept, config->args, "-accept", false);
     PXOPT_LOOKUP_BOOL(reject, config->args, "-reject", false);
+    PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", ((accept == 0)&&(reject == 0)), false);
+    PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", ((accept == 0)&&(reject == 0)), false);
+
 
     if (accept && reject) {
@@ -350,13 +413,109 @@
     }
 
-    if (!(accept || reject)) {
-        psError(PS_ERR_UNKNOWN, true, "either -accept or -reject is required");
-        return false;
-    }
-
-    char *query = "UPDATE detRunSummary SET accept = %d WHERE det_id = %"PRId64;
-    if (!p_psDBRunQueryF(config->dbh, query, accept, det_id)) {
-        psError(PS_ERR_UNKNOWN, false, "database error");
-        return false;
+    if (!(accept || reject || (data_state != NULL))) {
+        psError(PS_ERR_UNKNOWN, true, "either -accept or -reject is required if -data_state is not supplied");
+        return false;
+    }
+
+    if (accept || reject) {
+      char *query = "UPDATE detRunSummary SET accept = %d WHERE det_id = %"PRId64;
+      if (!p_psDBRunQueryF(config->dbh, query, accept, det_id)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+      }
+    }
+    else {
+      PS_ASSERT_PTR_NON_NULL(data_state,false);
+
+/*       if (!isValidDataState(data_state)) return false; */
+      
+      
+      
+      char *query_detRunSummary = "UPDATE detRunSummary SET data_state = '%s'"
+	" WHERE det_id = %" PRId64
+	" AND iteration = %" PRId32;
+      if (!p_psDBRunQueryF(config->dbh, query_detRunSummary, data_state, det_id,iteration)) {
+	psError(PS_ERR_UNKNOWN, false,
+		"failed to change state for det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	return false;
+      }
+
+      /* This check allows the one update to flag everything for cleanup.  The check for full is only temporary while I test for bugs. */
+      if ((!strncmp(data_state,"goto_",5)
+	   //	   || (!strcmp(data_state,"full"))
+	   //	   || (!strcmp(data_state,"cleaned"))
+	   ))	{
+	char *query_detProcessedImfile = "UPDATE detProcessedImfile SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64;
+	if (!p_psDBRunQueryF(config->dbh, query_detProcessedImfile,data_state,det_id)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detProcessedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detProcessedExp = "UPDATE detProcessedExp SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64;
+	if (!p_psDBRunQueryF(config->dbh, query_detProcessedExp,data_state,det_id)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detProcessedExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detNormalizedImfile = "UPDATE detNormalizedImfile SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detNormalizedImfile,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detNormalizedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detNormalizedStatImfile = "UPDATE detNormalizedStatImfile SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detNormalizedStatImfile,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detNormalizedStatImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+
+	char *query_detNormalizedExp = "UPDATE detNormalizedExp SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detNormalizedExp,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detNormalizedExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detResidImfile = "UPDATE detResidImfile SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detResidImfile,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detResidImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detResidExp = "UPDATE detResidExp SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detResidExp,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detResidExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+	
+	char *query_detStackedImfile = "UPDATE detStackedImfile SET data_state = '%s'"
+	  " WHERE det_id = %" PRId64
+	  " AND iteration = %" PRId32;
+	if (!p_psDBRunQueryF(config->dbh, query_detStackedImfile,data_state,det_id,iteration)) {
+	  psError(PS_ERR_UNKNOWN, false,
+		  "failed to change state for detStackedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
+	  return(false);
+	}
+      }
+      /* End if */
+      
     }
 
