Index: trunk/ippTools/share/Makefile.am
===================================================================
--- trunk/ippTools/share/Makefile.am	(revision 23429)
+++ trunk/ippTools/share/Makefile.am	(revision 23430)
@@ -172,4 +172,6 @@
      warptool_donecleanup.sql \
      warptool_exp.sql \
+     warptool_finished_run_select.sql \
+     warptool_finish_run.sql \
      warptool_imfile.sql \
      warptool_pendingcleanuprun.sql \
Index: trunk/ippTools/share/warptool_finish_run.sql
===================================================================
--- trunk/ippTools/share/warptool_finish_run.sql	(revision 23430)
+++ trunk/ippTools/share/warptool_finish_run.sql	(revision 23430)
@@ -0,0 +1,5 @@
+UPDATE warpRun
+    SET state = 'full',
+    magicked = %d
+WHERE warp_id = %lld
+
Index: trunk/ippTools/share/warptool_finished_run_select.sql
===================================================================
--- trunk/ippTools/share/warptool_finished_run_select.sql	(revision 23430)
+++ trunk/ippTools/share/warptool_finished_run_select.sql	(revision 23430)
@@ -0,0 +1,21 @@
+SELECT
+   warp_id,
+   magicked
+FROM
+   (SELECT DISTINCT
+       warpRun.warp_id,
+       warpSkyCellMap.warp_id as foo,
+       warpSkyfile.warp_id as bar,
+       SUM(!warpSkyfile.magicked) = 0 as magicked
+   FROM warpRun
+   JOIN warpSkyCellMap
+       USING(warp_id)
+   LEFT JOIN warpSkyfile
+       USING(warp_id, skycell_id)
+   WHERE
+       warpRun.state = 'new'
+   GROUP BY
+       warpRun.warp_id
+   HAVING
+       COUNT(warpSkyCellMap.warp_id) = COUNT(warpSkyfile.warp_id)
+ ) as Foo
