Index: trunk/ippTools/share/disttool_pendingcomponent.sql
===================================================================
--- trunk/ippTools/share/disttool_pendingcomponent.sql	(revision 23245)
+++ trunk/ippTools/share/disttool_pendingcomponent.sql	(revision 23245)
@@ -0,0 +1,149 @@
+SELECT * FROM (
+SELECT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    rawImfile.class_id AS component,
+    rawExp.camera,
+    outroot,
+    rawImfile.uri as path_base,
+    chipProcessedImfile.path_base as chip_path_base,
+    NULL as state,
+    NULL as data_state,
+    rawImfile.magicked
+FROM distRun
+JOIN rawExp ON exp_id = stage_id
+JOIN rawImfile using(exp_id)
+JOIN chipProcessedImfile
+    ON distRun.chip_id = chipProcessedImfile.chip_id
+    AND rawImfile.class_id = chipProcessedImfile.class_id
+LEFT JOIN distComponent 
+    ON distRun.dist_id = distComponent.dist_id 
+    AND rawImfile.class_id = distComponent.component
+WHERE
+    distRun.state = 'new'
+    AND distRun.stage = 'raw'
+    AND distComponent.dist_id IS NULL
+
+-- chip stage
+UNION
+SELECT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    chipProcessedImfile.class_id AS component,
+    rawExp.camera,
+    outroot,
+    chipProcessedImfile.path_base,
+    chipProcessedImfile.path_base as chip_path_base,
+    chipRun.state,
+    chipProcessedImfile.data_state,
+    chipProcessedImfile.magicked
+FROM distRun
+JOIN chipRun ON chipRun.chip_id = distRun.stage_id
+JOIN rawExp using(exp_id)
+JOIN chipProcessedImfile ON chipProcessedImfile.chip_id = stage_id
+LEFT JOIN distComponent 
+    ON distRun.dist_id = distComponent.dist_id 
+    AND chipProcessedImfile.class_id = distComponent.component
+WHERE
+    distRun.state = 'new'
+    AND distRun.stage = 'chip'
+    AND distComponent.dist_id IS NULL
+UNION
+SELECT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    warpSkyfile.skycell_id AS component,
+    rawExp.camera,
+    outroot,
+    warpSkyfile.path_base,
+    NULL as chip_path_base,
+    warpRun.state,
+    warpSkyfile.data_state,
+    warpSkyfile.magicked
+FROM distRun
+JOIN warpRun ON stage_id = warp_id
+JOIN warpSkyfile using(warp_id)
+JOIN fakeRun USING(fake_id)
+JOIN camRun USING(cam_id)
+JOIN chipRun ON camRun.chip_id = chipRun.chip_id
+JOIN rawExp using(exp_id)
+LEFT JOIN distComponent 
+    ON distRun.dist_id = distComponent.dist_id 
+    AND warpSkyfile.skycell_id = distComponent.component
+WHERE
+    distRun.state = 'new'
+    AND distRun.stage = 'warp'
+    AND distComponent.dist_id IS NULL
+UNION
+SELECT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    diffSkyfile.skycell_id AS component,
+    rawExp.camera,
+    outroot,
+    diffSkyfile.path_base,
+    NULL as chip_path_base,
+    diffRun.state,
+    -- data_state doesn't exist yet
+    -- diffSkyfile.data_state,
+    'full' AS data_state,
+    diffSkyfile.magicked
+FROM distRun
+JOIN diffRun ON stage_id = diff_id
+JOIN diffSkyfile using(diff_id)
+JOIN rawExp using(exp_id)
+LEFT JOIN distComponent 
+    ON distRun.dist_id = distComponent.dist_id 
+    AND diffSkyfile.skycell_id = distComponent.component
+WHERE
+    distRun.state = 'new'
+    AND distRun.stage = 'diff'
+    AND distComponent.dist_id IS NULL
+UNION
+SELECT DISTINCT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    stackRun.skycell_id AS component,
+    rawExp.camera,
+    outroot,
+    stackSumSkyfile.path_base,
+    NULL as chip_path_base,
+    stackRun.state,
+    -- data_state doesn't exist yet
+    -- stackSumSkyfile.data_state,
+    'full' AS data_state,
+    0 AS magicked
+FROM distRun
+JOIN stackRun
+    ON stage_id = stack_id
+JOIN stackSumSkyfile
+    USING(stack_id)
+JOIN stackInputSkyfile
+    USING(stack_id)
+JOIN warpSkyfile
+    ON  stackInputSkyfile.warp_id = warpSkyfile.warp_id
+    AND stackRun.skycell_id       = warpSkyfile.skycell_id
+    AND stackRun.tess_id          = warpSkyfile.tess_id
+JOIN warpRun
+    ON warpRun.warp_id = warpSkyfile.warp_id
+JOIN fakeRun
+    USING(fake_id)
+JOIN camRun
+    USING(cam_id)
+JOIN chipRun
+    ON camRun.chip_id = chipRun.chip_id
+JOIN rawExp 
+     USING (exp_id)
+LEFT JOIN distComponent 
+    ON distRun.dist_id = distComponent.dist_id 
+    AND stackRun.skycell_id = distComponent.component
+WHERE
+    distRun.state = 'new'
+    AND distRun.stage = 'stack'
+    AND distComponent.dist_id IS NULL
+) as Foo
Index: trunk/ippTools/share/disttool_processedcomponent.sql
===================================================================
--- trunk/ippTools/share/disttool_processedcomponent.sql	(revision 23245)
+++ trunk/ippTools/share/disttool_processedcomponent.sql	(revision 23245)
@@ -0,0 +1,2 @@
+SELECT *
+FROM    distProcessedComponent
Index: trunk/ippTools/share/disttool_revertrun_delete.sql
===================================================================
--- trunk/ippTools/share/disttool_revertrun_delete.sql	(revision 23245)
+++ trunk/ippTools/share/disttool_revertrun_delete.sql	(revision 23245)
@@ -0,0 +1,4 @@
+DELETE FROM distComponent
+USING distComponent, distRun
+WHERE distComponent.dist_id = distRun.dist_id
+    AND distComponent.fault != 0
Index: trunk/ippTools/share/disttool_revertrun_update.sql
===================================================================
--- trunk/ippTools/share/disttool_revertrun_update.sql	(revision 23245)
+++ trunk/ippTools/share/disttool_revertrun_update.sql	(revision 23245)
@@ -0,0 +1,5 @@
+UPDATE distRun
+JOIN distComponent USING(dist_id)
+SET distRun.state = 'new', distRun.fault = 0
+WHERE distComponent.fault != 0
+    OR distRun.fault != 0
Index: trunk/ippTools/share/disttool_toadvance.sql
===================================================================
--- trunk/ippTools/share/disttool_toadvance.sql	(revision 23245)
+++ trunk/ippTools/share/disttool_toadvance.sql	(revision 23245)
@@ -0,0 +1,116 @@
+SELECT DISTINCT
+    dist_id,
+    stage,
+    stage_id,
+    outroot
+FROM
+    (
+-- raw stage
+SELECT 
+    distRun.dist_id,
+    stage,
+    stage_id,
+    outroot
+    FROM distRun
+    JOIN rawImfile ON stage_id = rawImfile.exp_id
+    LEFT JOIN distComponent
+        ON distRun.dist_id = distComponent.dist_id
+        AND distComponent.component = rawImfile.class_id
+    WHERE
+        distRun.state = 'new'
+        AND distRun.fault = 0
+        AND distRun.stage = 'raw'
+    GROUP BY
+        distRun.dist_id,
+        rawImfile.exp_id
+    HAVING
+        COUNT(rawImfile.class_id) = COUNT(distComponent.component)
+        AND SUM(distComponent.fault) = 0
+UNION
+-- chip stage
+SELECT 
+    distRun.dist_id,
+    stage,
+    stage_id,
+    outroot
+    FROM distRun
+    JOIN chipProcessedImfile ON stage_id = chipProcessedImfile.chip_id
+    LEFT JOIN distComponent
+        ON distComponent.dist_id = distRun.dist_id
+        AND distComponent.component = chipProcessedImfile.class_id
+    WHERE
+        distRun.state = 'new'
+        AND distRun.fault = 0
+        AND distRun.stage = 'chip'
+    GROUP BY
+        dist_id,
+        chipProcessedImfile.chip_id
+    HAVING
+        COUNT(chipProcessedImfile.class_id) = COUNT(distComponent.component)
+        AND SUM(distComponent.fault) = 0
+UNION
+-- warp stage
+SELECT 
+    distRun.dist_id,
+    stage,
+    stage_id,
+    outroot
+    FROM distRun
+    JOIN warpSkyfile on stage_id = warp_id
+    LEFT JOIN distComponent
+        ON distRun.dist_id = distComponent.dist_id
+        AND distComponent.component = warpSkyfile.skycell_id
+    WHERE
+        distRun.state = 'new'
+        AND distRun.fault = 0
+        AND distRun.stage = 'warp'
+--        AND warpSkyfile.fault = 0
+--        AND warpSkyfile.ignored = 0
+    GROUP BY
+        distRun.dist_id,
+        warp_id
+    HAVING
+        COUNT(warpSkyfile.skycell_id) = COUNT(distComponent.component)
+        AND SUM(distComponent.fault) = 0
+UNION
+-- diff stage
+SELECT DISTINCT
+    distRun.dist_id,
+    stage,
+    stage_id,
+    outroot
+    FROM distRun
+    JOIN diffSkyfile
+        ON distRun.dist_id = diffSkyfile.diff_id
+    LEFT JOIN distComponent
+        ON distRun.dist_id = distComponent.dist_id
+        AND distComponent.component = diffSkyfile.skycell_id
+    WHERE
+        distRun.state = 'new'
+        AND distRun.fault = 0
+        AND distRun.stage = 'diff'
+--        AND diffSkyfile.fault = 0
+    GROUP BY
+        distRun.dist_id,
+        diff_id
+    HAVING
+        COUNT(diffSkyfile.skycell_id) = COUNT(distComponent.component)
+        AND SUM(distComponent.fault) = 0
+UNION
+-- stack stage
+SELECT 
+    distRun.dist_id,
+    stage,
+    stage_id,
+    outroot
+    FROM distRun
+    JOIN stackSumSkyfile on stage_id = stack_id
+    LEFT JOIN distComponent
+        ON distRun.dist_id = distComponent.dist_id
+    WHERE
+        distRun.state = 'new'
+        AND distRun.fault = 0
+        AND distRun.stage = 'stack'
+        AND distComponent.component IS NOT NULL
+        AND distComponent.fault = 0
+) as Foo
