Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 18573)
+++ trunk/ippTools/share/Makefile.am	(revision 18574)
@@ -108,5 +108,8 @@
 	regtool_revertprocessedexp.sql \
 	regtool_revertprocessedimfile.sql \
-	stacktool_find_complete_warps.sql \
+	stacktool_definebyquery_select.sql \
+	stacktool_definebyquery_groupby.sql \
+	stacktool_definebyquery_insert.sql \
+	stacktool_definebyquery_insert_random.sql \
 	stacktool_inputskyfile.sql \
 	stacktool_revertsumskyfile.sql \
Index: trunk/ippTools/share/stacktool_definebyquery_groupby.sql
===================================================================
--- trunk/ippTools/share/stacktool_definebyquery_groupby.sql	(revision 18574)
+++ trunk/ippTools/share/stacktool_definebyquery_groupby.sql	(revision 18574)
@@ -0,0 +1,6 @@
+-- This follows the SQL in stacktool_definebyquery_select.sql,
+-- after additional WHERE conditions have been added
+GROUP BY
+    warpSkyfile.skycell_id,
+    warpSkyfile.tess_id,
+    rawExp.filter
Index: trunk/ippTools/share/stacktool_definebyquery_insert.sql
===================================================================
--- trunk/ippTools/share/stacktool_definebyquery_insert.sql	(revision 18574)
+++ trunk/ippTools/share/stacktool_definebyquery_insert.sql	(revision 18574)
@@ -0,0 +1,21 @@
+INSERT INTO
+        stackInputSkyfile(stack_id, warp_id)
+SELECT
+        @STACK_ID@,
+        warp_id
+FROM warpSkyfile
+JOIN warpRun
+    USING(warp_id, tess_id)
+JOIN fakeRun
+    USING(fake_id, tess_id)
+JOIN camRun
+    USING(cam_id, tess_id)
+JOIN chipRun
+    USING(chip_id, tess_id)
+JOIN rawExp
+    USING(exp_id, tess_id)
+WHERE
+    skycell_id = '%s'
+    AND tess_id = '%s'
+    AND rawExp.filter = '%s'
+    AND warpSkyfile.fault = 0
Index: trunk/ippTools/share/stacktool_definebyquery_insert_random.sql
===================================================================
--- trunk/ippTools/share/stacktool_definebyquery_insert_random.sql	(revision 18574)
+++ trunk/ippTools/share/stacktool_definebyquery_insert_random.sql	(revision 18574)
@@ -0,0 +1,28 @@
+INSERT INTO
+        stackInputSkyfile(stack_id, warp_id)
+SELECT
+        @STACK_ID@,
+        warp_id
+FROM (
+SELECT
+        warpSkyfile.*,
+        rand() AS rnd_num
+FROM warpSkyfile
+JOIN warpRun
+    USING(warp_id, tess_id)
+JOIN fakeRun
+    USING(fake_id, tess_id)
+JOIN camRun
+    USING(cam_id, tess_id)
+JOIN chipRun
+    USING(chip_id, tess_id)
+JOIN rawExp
+    USING(exp_id, tess_id)
+WHERE
+    skycell_id = '%s'
+    AND tess_id = '%s'
+    AND rawExp.filter = '%s'
+    AND warpSkyfile.fault = 0
+ORDER BY rnd_num
+LIMIT %d
+) AS randomWarps
Index: trunk/ippTools/share/stacktool_definebyquery_select.sql
===================================================================
--- trunk/ippTools/share/stacktool_definebyquery_select.sql	(revision 18574)
+++ trunk/ippTools/share/stacktool_definebyquery_select.sql	(revision 18574)
@@ -0,0 +1,30 @@
+SELECT
+    warpSkyfile.skycell_id,
+    warpSkyfile.tess_id,
+    stackRun.stack_id,
+    rawExp.filter,
+    COUNT(warpSkyfile.skycell_id) AS num_avail,
+    COUNT(stackRun.stack_id) AS num_extant
+FROM warpRun
+JOIN warpSkyfile 
+    USING(warp_id, tess_id)
+JOIN fakeRun
+    USING(fake_id, tess_id)
+JOIN camRun
+    USING(cam_id, tess_id)
+JOIN chipRun
+    USING(chip_id, tess_id)
+JOIN rawExp
+    USING(exp_id, tess_id)
+LEFT JOIN stackInputSkyfile
+    ON warpSkyfile.warp_id = stackInputSkyfile.warp_id
+LEFT JOIN stackRun
+    ON stackRun.tess_id = warpSkyfile.tess_id
+    AND stackRun.skycell_id = warpSkyfile.skycell_id
+    AND stackRun.stack_id = stackInputSkyfile.stack_id
+WHERE
+    warpRun.state = 'stop'
+    AND warpSkyfile.ignored = 0
+    AND warpSkyfile.fault = 0
+-- Here should follow the SQL in stacktool_definebyquery_groupby.sql,
+-- after additional WHERE conditions have been added
Index: trunk/ippTools/share/stacktool_find_complete_warps.sql
===================================================================
--- trunk/ippTools/share/stacktool_find_complete_warps.sql	(revision 18573)
+++ trunk/ippTools/share/stacktool_find_complete_warps.sql	(revision 18574)
@@ -1,20 +1,33 @@
-    SELECT
-        warp_id,
-        warpSkyfile.skycell_id,
-        warpSkyfile.tess_id
-    FROM warpRun
-    JOIN warpSkyfile 
-        USING(warp_id)
-    JOIN fakeRun
-        USING(fake_id)
-    JOIN camRun
-        USING(cam_id)
-    JOIN chipRun
-        USING(chip_id)
-    JOIN rawExp
-        USING(exp_id)
-    WHERE
-        warpRun.state = 'stop'
-	AND warpSkyfile.ignored = 0
+SELECT
+    warpSkyfile.skycell_id,
+    warpSkyfile.tess_id,
+    stackRun.stack_id,
+    COUNT(warpSkyfile.skycell_id) AS num_avail,
+    COUNT(stackRun.stack_id) AS num_extant
+FROM warpRun
+JOIN warpSkyfile 
+    USING(warp_id, tess_id)
+JOIN fakeRun
+    USING(fake_id, tess_id)
+JOIN camRun
+    USING(cam_id, tess_id)
+JOIN chipRun
+    USING(chip_id, tess_id)
+JOIN rawExp
+    USING(exp_id, tess_id)
+LEFT JOIN stackInputSkyfile
+    ON warpSkyfile.warp_id = stackInputSkyfile.warp_id
+LEFT JOIN stackRun
+    ON stackRun.tess_id = warpSkyfile.tess_id
+    AND stackRun.skycell_id = warpSkyfile.skycell_id
+    AND stackRun.stack_id = stackInputSkyfile.stack_id
+WHERE
+    warpRun.state = 'stop'
+    AND warpSkyfile.ignored = 0
+GROUP BY
+    warpSkyfile.skycell_id, warpSkyfile.tess_id, stackRun.stack_id
+HAVING
+    num_avail > num_extant
+
 -- It seems like we should be grouping the results here but in fact we don't
 -- want to do that as each warp_id may contain multiple skycells.  So a warp_id
@@ -23,2 +36,11 @@
 --        warp_id
 
+
+INSERT INTO
+        stackInputSkyfile(stack_id, warp_id)
+SELECT
+        13,
+        warp_id
+FROM warpSkyfile
+WHERE
+    skycell_id = 'new';
