Index: trunk/ippTools/share/magictool_definebyquery_select.sql
===================================================================
--- trunk/ippTools/share/magictool_definebyquery_select.sql	(revision 26034)
+++ trunk/ippTools/share/magictool_definebyquery_select.sql	(revision 26039)
@@ -1,5 +1,5 @@
 -- Get a list of exposures on which magic may be performed
 SELECT DISTINCT
-    exp_id,
+    chipRun.exp_id,
     MAX(diffWarps.diff_id) AS diff_id,
     -- The following trick pulls out the 'inverse' value for the maximum diff_id
@@ -33,5 +33,10 @@
 JOIN camRun USING(cam_id)
 JOIN chipRun USING(chip_id)
-LEFT JOIN magicRun USING(exp_id)
+LEFT JOIN
+    (SELECT magic_id, exp_id, label
+        FROM magicRun 
+        -- rerun hook %s
+    ) AS oldMagicRun
+    ON oldMagicRun.exp_id = chipRun.exp_id
 -- WHERE hook %s
-GROUP BY exp_id
+GROUP BY chipRun.exp_id
Index: trunk/ippTools/src/magictool.c
===================================================================
--- trunk/ippTools/src/magictool.c	(revision 26034)
+++ trunk/ippTools/src/magictool.c	(revision 26039)
@@ -151,9 +151,9 @@
         // what if no skycells for the diff run completed?
 
-        psStringAppend(&queryWhereStr, "\n%s (magic_id IS NULL", queryWhereStr ? "AND" : "WHERE");
+        psStringAppend(&queryWhereStr, "\n%s magic_id IS NULL", queryWhereStr ? "AND" : "WHERE");
+        psString rerunWhereStr = NULL;
         if (rerun) {
-            psStringAppend(&queryWhereStr, " OR (magicRun.label != '%s')", label);
-        }
-        psStringAppend(&queryWhereStr, ") ");
+            psStringAppend(&rerunWhereStr, "\n WHERE magicRun.label = '%s'", label);
+        }
 
         // now add the user specified qualifiers
@@ -178,9 +178,13 @@
             queryWhereStr = psStringCopy("");
         }
-
-        if (!p_psDBRunQueryF(config->dbh, query, diffWhereStr, diffWhereStr, queryWhereStr)) {
+        if (!rerunWhereStr) {
+            rerunWhereStr = psStringCopy("");
+        }
+
+        if (!p_psDBRunQueryF(config->dbh, query, diffWhereStr, diffWhereStr, rerunWhereStr, queryWhereStr)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
             psFree(diffWhereStr);
             psFree(queryWhereStr);
+            psFree(rerunWhereStr);
             psFree(query);
             return false;
@@ -188,4 +192,5 @@
         psFree(diffWhereStr);
         psFree(queryWhereStr);
+        psFree(rerunWhereStr);
         psFree(query);
     }
