Index: /tags/ipp-20110218/dbconfig/changes.txt
===================================================================
--- /tags/ipp-20110218/dbconfig/changes.txt	(revision 31039)
+++ /tags/ipp-20110218/dbconfig/changes.txt	(revision 31040)
@@ -2007,2 +2007,54 @@
 
 ALTER TABLE stackSumSkyfile ADD column dtime_convolve FLOAT AFTER dtime_match_stdev;
+
+-- Version 1.1.69
+
+ALTER TABLE summitImfile DROP FOREIGN KEY summitImfile_ibfk_1;
+ALTER TABLE pzDownloadExp DROP FOREIGN KEY pzDownloadExp_ibfk_1;
+
+ALTER TABLE summitExp DROP PRIMARY KEY;
+ALTER TABLE summitExp ADD COLUMN summit_id BIGINT NOT NULL AUTO_INCREMENT FIRST,  ADD PRIMARY KEY (summit_id);
+ALTER TABLE summitExp ADD KEY (exp_name,camera,telescope);
+
+
+ALTER TABLE pzDownloadImfile DROP FOREIGN KEY pzDownloadImfile_ibfk_2;
+
+ALTER TABLE summitImfile ADD COLUMN summit_id BIGINT FIRST;
+UPDATE summitImfile,summitExp SET summitImfile.summit_id = summitExp.summit_id WHERE summitImfile.exp_name = summitExp.exp_name AND summitImfile.camera = summitExp.camera AND summitImfile.telescope = summitExp.telescope;
+
+ALTER TABLE summitImfile DROP PRIMARY KEY, ADD PRIMARY KEY (summit_id,class,class_id);
+ALTER TABLE summitImfile ADD KEY (exp_name,camera,telescope,class,class_id);
+ALTER TABLE summitImfile ADD FOREIGN KEY(summit_id) REFERENCES summitExp(summit_id);
+ALTER TABLE summitImfile ADD FOREIGN KEY(exp_name,camera,telescope) REFERENCES summitExp(exp_name,camera,telescope);
+
+
+ALTER TABLE pzDownloadImfile DROP FOREIGN KEY pzDownloadImfile_ibfk_1;
+
+ALTER TABLE pzDownloadExp ADD COLUMN summit_id BIGINT FIRST;
+UPDATE pzDownloadExp,summitExp SET pzDownloadExp.summit_id = summitExp.summit_id WHERE pzDownloadExp.exp_name = summitExp.exp_name AND pzDownloadExp.camera = summitExp.camera AND pzDownloadExp.telescope = summitExp.telescope;
+
+ALTER TABLE pzDownloadExp DROP PRIMARY KEY, ADD PRIMARY KEY (summit_id);
+ALTER TABLE pzDownloadExp ADD KEY (exp_name,camera,telescope);
+ALTER TABLE pzDownloadExp ADD FOREIGN KEY(summit_id) REFERENCES summitExp(summit_id);
+ALTER TABLE pzDownloadExp ADD FOREIGN KEY(exp_name,camera,telescope) REFERENCES summitExp(exp_name,camera,telescope);
+
+
+ALTER TABLE pzDownloadImfile ADD COLUMN summit_id BIGINT FIRST;
+UPDATE pzDownloadImfile,pzDownloadExp SET pzDownloadImfile.summit_id = pzDownloadExp.summit_id WHERE pzDownloadImfile.exp_name = pzDownloadExp.exp_name AND pzDownloadImfile.camera = pzDownloadExp.camera AND pzDownloadImfile.telescope = pzDownloadExp.telescope;
+
+ALTER TABLE pzDownloadImfile DROP PRIMARY KEY, ADD PRIMARY KEY (summit_id,class,class_id);
+ALTER TABLE pzDownloadImfile ADD FOREIGN KEY(summit_id) REFERENCES pzDownloadExp(summit_id);
+ALTER TABLE pzDownloadImfile ADD FOREIGN KEY(summit_id,class,class_id) REFERENCES summitImfile(summit_id,class,class_id);
+ALTER TABLE pzDownloadImfile ADD FOREIGN KEY(exp_name,camera,telescope) REFERENCES summitExp(exp_name,camera,telescope);
+ALTER TABLE pzDownloadImfile ADD FOREIGN KEY(exp_name,camera,telescope,class,class_id) REFERENCES summitImfile(exp_name,camera,telescope,class,class_id);
+
+
+ALTER TABLE newExp ADD COLUMN summit_id BIGINT AFTER exp_id;
+UPDATE newExp,pzDownloadExp SET newExp.summit_id = pzDownloadExp.summit_id WHERE newExp.tmp_exp_name = pzDownloadExp.exp_name AND newExp.tmp_camera = pzDownloadExp.camera AND newExp.tmp_telescope = pzDownloadExp.telescope;
+
+ALTER TABLE newExp ADD KEY (summit_id);
+
+
+UPDATE dbversion set schema_version = '1.1.69', updated= CURRENT_TIMESTAMP();
+
+
Index: /tags/ipp-20110218/dbconfig/new.md
===================================================================
--- /tags/ipp-20110218/dbconfig/new.md	(revision 31039)
+++ /tags/ipp-20110218/dbconfig/new.md	(revision 31040)
@@ -1,4 +1,5 @@
 newExp METADATA
     exp_id      S64         0       # Primary Key AUTO_INCREMENT
+    summit_id   S64         0       # Key 
     tmp_exp_name STR        64      # Key
     tmp_camera    STR       64      # Key
Index: /tags/ipp-20110218/dbconfig/summitcopy.md
===================================================================
--- /tags/ipp-20110218/dbconfig/summitcopy.md	(revision 31039)
+++ /tags/ipp-20110218/dbconfig/summitcopy.md	(revision 31040)
@@ -11,7 +11,8 @@
 # -1 as NULL or 0 might be a valid value (empty fileset)
 summitExp METADATA
-    exp_name    STR         64      # Primary Key
-    camera      STR         64      # Primary Key
-    telescope   STR         64      # Primary Key
+    summit_id   S64         0       # Primary Key AUTO_INCREMENT
+    exp_name    STR         64      # Key
+    camera      STR         64      # Key
+    telescope   STR         64      # Key
     dateobs     UTC         NULL
     exp_type    STR         64
@@ -26,7 +27,8 @@
 # list of source images -- updated as exposures/filesets are queried
 summitImfile METADATA
-    exp_name    STR         64      # Primary Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)
-    camera      STR         64      # Primary Key
-    telescope   STR         64      # Primary Key
+    summit_id   S64         0       # Primary Key fkey(summit_id) ref summitExp(summit_id)
+    exp_name    STR         64      # Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)
+    camera      STR         64      # Key
+    telescope   STR         64      # Key
     file_id     STR         64      # Key
     bytes       S32         0
@@ -41,7 +43,8 @@
 # downloaded) 
 pzDownloadExp METADATA
-    exp_name    STR         64      # Primary Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)
-    camera      STR         64      # Primary Key
-    telescope   STR         64      # Primary Key
+    summit_id   S64         0       # Primary Key fkey(summit_id) ref summitExp(summit_id)
+    exp_name    STR         64      # Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)
+    camera      STR         64      # Key
+    telescope   STR         64      # Key
     state       STR         64      # Key 
     epoch       UTC         0001-01-01T00:00:00Z
@@ -49,8 +52,9 @@
 
 pzDownloadImfile METADATA
-    exp_name    STR         64      # Primary Key fkey(exp_name, camera, telescope) ref pzDownloadExp(exp_name, camera, telescope)
-    camera      STR         64      # Primary Key fkey(exp_name, camera, telescope, class, class_id) ref summitImfile(exp_name, camera, telescope, class, class_id)
-    telescope   STR         64      # Primary Key
-    class       STR         64      # Primary Key
+    summit_id   S64         0       # Primary Key fkey(summit_id) ref pzDownloadExp(summit_id)
+    exp_name    STR         64      # Key fkey(exp_name, camera, telescope) ref pzDownloadExp(exp_name, camera, telescope)
+    camera      STR         64      # Key fkey(exp_name, camera, telescope, class, class_id) ref summitImfile(exp_name, camera, telescope, class, class_id)
+    telescope   STR         64      # Key fkey(exp_name, camera, telescope) ref summitExp(exp_name, camera, telescope)
+    class       STR         64      # Primary Key fkey(summit_id,class,class_id) ref summitImfile(summit_id,class,class_id)
     class_id    STR         64      # Primary Key
     uri         STR         255
Index: /tags/ipp-20110218/ippScripts/scripts/ipp_cleanup.pl
===================================================================
--- /tags/ipp-20110218/ippScripts/scripts/ipp_cleanup.pl	(revision 31039)
+++ /tags/ipp-20110218/ippScripts/scripts/ipp_cleanup.pl	(revision 31040)
@@ -1904,5 +1904,5 @@
 
     foreach my $file (@$files) {
-        print STDERR "unlinking $stage $stage_id $file";
+        print STDERR "unlinking $stage $stage_id $file\n";
 
         my $error_code = $ipprc->kill_file($file);
Index: /tags/ipp-20110218/ippScripts/scripts/minidvodb_merge.pl
===================================================================
--- /tags/ipp-20110218/ippScripts/scripts/minidvodb_merge.pl	(revision 31039)
+++ /tags/ipp-20110218/ippScripts/scripts/minidvodb_merge.pl	(revision 31040)
@@ -148,6 +148,6 @@
                 &my_die("Unable to perform dvoverify: $error_code", $mergedvodb, $error_code);
             }
-            $dtime_dvoverify = 86400.0*(DateTime->now->mjd - $mjd_dvoverify_start);   # MJD of starting script
-            print "dvoverify time $dtime_dvoverify\n";
+            $dtime_verify = 86400.0*(DateTime->now->mjd - $mjd_dvoverify_start);   # MJD of starting script
+            print "dvoverify time $dtime_verify\n";
         }
 
@@ -232,5 +232,5 @@
             $command .= " -dtime_merge $dtime_merge" if defined $dtime_merge;
 	    $command .= " -dtime_script $dtime_script" if defined $dtime_script;
-	    $command .= " -dtime_verify $dtime_dvoverify" if defined $dtime_dvoverify;
+	    $command .= " -dtime_verify $dtime_verify" if defined $dtime_verify;
 	    $command .= " -dbname $dbname" if defined $dbname;
             #print $command;
@@ -273,5 +273,5 @@
         $command .= " -dtime_merge $dtime_merge" if defined $dtime_merge;
     $command .= " -dtime_script $dtime_script" if defined $dtime_script;
-    $command .= " -dtime_verify $dtime_dvoverify" if defined $dtime_dvoverify;
+    $command .= " -dtime_verify $dtime_verify" if defined $dtime_verify;
         $command .= " -dbname $dbname" if defined $dbname;
 
Index: /tags/ipp-20110218/ippScripts/scripts/register_imfile.pl
===================================================================
--- /tags/ipp-20110218/ippScripts/scripts/register_imfile.pl	(revision 31039)
+++ /tags/ipp-20110218/ippScripts/scripts/register_imfile.pl	(revision 31040)
@@ -267,5 +267,6 @@
 
 if ((abs($burntoolStateCurrent) != $burntoolStateTarget)&&
-    (!is_daytime($dateobs,$sunrise,$sunset))) {
+    (!is_daytime($dateobs,$sunrise,$sunset))&&
+    (!is_ccim($exp_name,$exp_type))) {
     my $mdcParser  = PS::IPP::Metadata::Config->new;
 
Index: /tags/ipp-20110218/ippScripts/scripts/summit_copy.pl
===================================================================
--- /tags/ipp-20110218/ippScripts/scripts/summit_copy.pl	(revision 31039)
+++ /tags/ipp-20110218/ippScripts/scripts/summit_copy.pl	(revision 31040)
@@ -22,5 +22,5 @@
 
 # Parse the command-line arguments
-my ( $uri, $filename, $compress, $bytes, $md5, $nebulous, $exp_name, $inst, $telescope, $class, $class_id, 
+my ( $uri, $filename, $compress, $bytes, $md5, $nebulous, $summit_id, $exp_name, $inst, $telescope, $class, $class_id, 
      $dbname, $verbose, $no_update, $no_op, $timeout, $copies );
 GetOptions(
@@ -31,4 +31,5 @@
        'md5=s'          => \$md5,       # reported md5 checksum
        'nebulous'       => \$nebulous,  # use nebulous for the target file
+       'summit_id=s'    => \$summit_id, # summit_id for this exposure
        'exp_name=s'     => \$exp_name,  # Exposure name
        'inst=s'         => \$inst,      # Instrument
@@ -45,8 +46,9 @@
 
 pod2usage( -msg => "Unknown option: @ARGV", -exitval => 2 ) if @ARGV;
-pod2usage( -msg => "Required options: --uri --filename --exp_name --inst --telescope --class --class_id",
+pod2usage( -msg => "Required options: --uri --filename --summit_id --exp_name --inst --telescope --class --class_id",
        -exitval => 3)
     unless defined $uri
     and defined $filename
+    and defined $summit_id
     and defined $exp_name
     and defined $inst
@@ -110,4 +112,5 @@
 $command  = "$pztool -copydone";
 $command .= " -row_lock";
+$command .= " -summit_id $summit_id";
 $command .= " -exp_name $exp_name";
 $command .= " -inst $inst";
@@ -236,4 +239,5 @@
         my $command;
         $command  = "$pztool -copydone";
+	$command .= " -summit_id $summit_id";
         $command .= " -exp_name $exp_name";
         $command .= " -inst $inst";
@@ -246,4 +250,16 @@
 
         system ($command);
+
+	if ($exit_code == 110) {
+	    $command = "$pztool -updatepzexp";
+	    $command .= " -exp_name $exp_name";
+	    $command .= " -camera $inst";
+	    $command .= " -telescope $telescope";
+	    $command .= " -set_state drop";
+	    $command .= " -dbname $dbname" if defined $dbname;
+
+	    system ($command);
+	}
+
     }
 
Index: /tags/ipp-20110218/ippTasks/destreak.pro
===================================================================
--- /tags/ipp-20110218/ippTasks/destreak.pro	(revision 31039)
+++ /tags/ipp-20110218/ippTasks/destreak.pro	(revision 31040)
@@ -113,4 +113,7 @@
 
   task.exec
+    # we check twice in case an entry has been removed from DS_STAGE
+    if ($magicDSStage >= $DS_STAGE:n) set magicDSStage = 0
+
     $run = magicdstool -todestreak -stage $DS_STAGE:$magicDSStage
     $magicDSStage ++
Index: /tags/ipp-20110218/ippTasks/summit.copy.pro
===================================================================
--- /tags/ipp-20110218/ippTasks/summit.copy.pro	(revision 31039)
+++ /tags/ipp-20110218/ippTasks/summit.copy.pro	(revision 31040)
@@ -429,4 +429,5 @@
         book getword pzPendingImfile $pageName md5sum  	 -var MD5SUM
         book getword pzPendingImfile $pageName dateobs 	 -var DATEOBS
+	book getword pzPendingImfile $pageName summit_id -var SUMMIT_ID
         book getword pzPendingImfile $pageName exp_name  -var EXP_NAME
         book getword pzPendingImfile $pageName camera    -var CAMERA
@@ -479,5 +480,5 @@
 	end
 
-        $run = summit_copy.pl --uri $URI --filename $FILENAME --exp_name $EXP_NAME --inst $CAMERA --telescope $TELESCOPE --class $CLASS --class_id $CLASS_ID --bytes $BYTES --md5 $MD5SUM --dbname $DBNAME --timeout 600 --verbose --copies 2
+        $run = summit_copy.pl --uri $URI --filename $FILENAME --summit_id $SUMMIT_ID --exp_name $EXP_NAME --inst $CAMERA --telescope $TELESCOPE --class $CLASS --class_id $CLASS_ID --bytes $BYTES --md5 $MD5SUM --dbname $DBNAME --timeout 600 --verbose --copies 2
 	if ($USECOMPRESS == 1) 
             $run = $run --compress
@@ -625,4 +626,5 @@
         book setword pzPendingAdvance $pageName pantaskState RUN
 
+	book getword pzPendingAdvance $pageName summit_id -var SUMMIT_ID
         book getword pzPendingAdvance $pageName exp_name  -var EXP_NAME
         book getword pzPendingAdvance $pageName camera    -var CAMERA
Index: /tags/ipp-20110218/ippTools/share/pstamptool_pendingdependent.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/pstamptool_pendingdependent.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/pstamptool_pendingdependent.sql	(revision 31040)
@@ -1,4 +1,5 @@
 SELECT DISTINCT
     pstampDependent.*,
+    concat( pstampDependent.outdir, '/checkdep.', dep_id, '.log') as logfile,
     IFNULL(Label.priority, 10000) AS priority
 FROM pstampDependent
Index: /tags/ipp-20110218/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/pxadmin_create_tables.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/pxadmin_create_tables.sql	(revision 31040)
@@ -14,4 +14,5 @@
 
 CREATE TABLE summitExp (
+    summit_id BIGINT NOT NULL AUTO_INCREMENT,
     exp_name VARCHAR(64),
     camera VARCHAR(64),
@@ -23,9 +24,11 @@
     fault SMALLINT NOT NULL,
     epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    PRIMARY KEY(exp_name, camera, telescope),
+    PRIMARY KEY(summit_id),
+    KEY(exp_name, camera, telescope),
     KEY(fault)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
 CREATE TABLE summitImfile (
+    summit_id BIGINT,
     exp_name VARCHAR(64),
     camera VARCHAR(64),
@@ -38,10 +41,13 @@
     uri VARCHAR(255),
     epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    PRIMARY KEY(exp_name, camera, telescope, class, class_id),
+    PRIMARY KEY(summit_id, class, class_id),
+    KEY(exp_name, camera, telescope, class, class_id),
     KEY(file_id),
+    FOREIGN KEY(summit_id) REFERENCES summitExp(summit_id),
     FOREIGN KEY(exp_name, camera, telescope) REFERENCES summitExp(exp_name, camera, telescope)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
 CREATE TABLE pzDownloadExp (
+    summit_id BIGINT,
     exp_name VARCHAR(64),
     camera VARCHAR(64),
@@ -49,10 +55,13 @@
     state VARCHAR(64),
     epoch TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-    PRIMARY KEY(exp_name, camera, telescope),
+    PRIMARY KEY(summit_id),
+    KEY(exp_name, camera, telescope),
     KEY(state),
+    FOREIGN KEY(summit_id) REFERENCES summitExp(summit_id),
     FOREIGN KEY(exp_name, camera, telescope) REFERENCES summitExp(exp_name, camera, telescope)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
 CREATE TABLE pzDownloadImfile (
+    summit_id BIGINT,
     exp_name VARCHAR(64),
     camera VARCHAR(64),
@@ -66,6 +75,9 @@
     bytes INT,
     md5sum VARCHAR(32),
-    PRIMARY KEY(exp_name, camera, telescope, class, class_id),
-    KEY(fault),
+    PRIMARY KEY(summit_id, class, class_id),
+    KEY(exp_name, camera, telescope, class, class_id),
+    KEY(fault),
+    FOREIGN KEY(summit_id) REFERENCES pzDownloadExp(summit_id),
+    FOREIGN KEY(summit_id, class, class_id) REFERENCES summitImfile(summit_id, class, class_id),
     FOREIGN KEY (exp_name, camera, telescope) REFERENCES pzDownloadExp(exp_name, camera, telescope),
     FOREIGN KEY(exp_name, camera, telescope, class, class_id) REFERENCES summitImfile(exp_name, camera, telescope, class, class_id)
@@ -74,4 +86,5 @@
 CREATE TABLE newExp (
     exp_id BIGINT AUTO_INCREMENT,
+    summit_id BIGINT,
     tmp_exp_name VARCHAR(64),
     tmp_camera VARCHAR(64),
@@ -88,4 +101,5 @@
     PRIMARY KEY(exp_id),
     KEY(exp_id),
+    KEY(summit_id),
     KEY(tmp_exp_name),
     KEY(tmp_camera),
Index: /tags/ipp-20110218/ippTools/share/pztool_find_completed_exp.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/pztool_find_completed_exp.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/pztool_find_completed_exp.sql	(revision 31040)
@@ -1,3 +1,4 @@
 SELECT DISTINCT
+    summit_id,
     exp_name,
     camera,
@@ -13,20 +14,17 @@
     FROM pzDownloadExp
     JOIN summitExp
-        USING(exp_name, camera, telescope)
+        USING(summit_id)
     LEFT JOIN pzDownloadImfile
-        USING(exp_name, camera, telescope)
+        USING(summit_id)
     LEFT JOIN newExp
-        ON pzDownloadExp.exp_name = newExp.tmp_exp_name
-        AND pzDownloadExp.camera = newExp.tmp_camera
-        AND pzDownloadExp.telescope = newExp.tmp_telescope
+        USING(summit_id)
     WHERE
         pzDownloadExp.state = 'run'
+        AND newExp.summit_id IS NULL
         AND newExp.tmp_exp_name IS NULL
         AND newExp.tmp_camera IS NULL
         AND newExp.tmp_telescope IS NULL
     GROUP BY
-        pzDownloadExp.exp_name,
-        pzDownloadExp.camera,
-        pzDownloadExp.telescope
+        pzDownloadExp.summit_id,
     -- it doesn't matter which field in pzDownloadImfile we count as we've
     -- already Download a group by
Index: /tags/ipp-20110218/ippTools/share/pztool_pendingimfile.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/pztool_pendingimfile.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/pztool_pendingimfile.sql	(revision 31040)
@@ -6,11 +6,12 @@
     FROM summitImfile
     JOIN pzDownloadExp
-        USING(exp_name, camera, telescope)
+    	USING(summit_id)
     LEFT JOIN pzDownloadImfile
-        USING(exp_name, camera, telescope, class, class_id)
+        USING(summit_id, class, class_id)
     JOIN summitExp
-        USING(exp_name, camera, telescope)
+    	USING(summit_id)
     WHERE 
         pzDownloadExp.state = 'run'
+	AND pzDownloadImfile.summit_id IS NULL
         AND pzDownloadImfile.exp_name IS NULL
         AND pzDownloadImfile.camera IS NULL
Index: /tags/ipp-20110218/ippTools/share/regtool_checkburntoolimfile.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/regtool_checkburntoolimfile.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/regtool_checkburntoolimfile.sql	(revision 31040)
@@ -21,7 +21,7 @@
        FROM
        summitExp
-       JOIN summitImfile USING(exp_name)
-       LEFT JOIN pzDownloadExp USING(exp_name)
-       LEFT JOIN newExp ON summitExp.exp_name = tmp_exp_name
+       JOIN summitImfile USING(summit_id)
+       LEFT JOIN pzDownloadExp USING(summit_id)
+       LEFT JOIN newExp USING(summit_id)
        LEFT JOIN newImfile ON (summitImfile.class_id = newImfile.tmp_class_id AND newExp.exp_id = newImfile.exp_id)
        LEFT JOIN rawExp ON rawExp.exp_id = newExp.exp_id
Index: /tags/ipp-20110218/ippTools/share/regtool_checkstatus.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/regtool_checkstatus.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/regtool_checkstatus.sql	(revision 31040)
@@ -20,7 +20,7 @@
         (rawImfile.burntool_state IS NOT NULL) AS is_registered
         FROM        summitExp
-        JOIN summitImfile USING(exp_name)
-        LEFT JOIN pzDownloadExp USING(exp_name)
-        LEFT JOIN newExp ON summitExp.exp_name = tmp_exp_name
+        JOIN summitImfile USING(summit_id)
+        LEFT JOIN pzDownloadExp USING(summit_id)
+        LEFT JOIN newExp USING(summit_id)
         LEFT JOIN newImfile ON (summitImfile.class_id = newImfile.tmp_class_id AND newExp.exp_id = newImfile.exp_id)
         LEFT JOIN rawExp ON rawExp.exp_id = newExp.exp_id
Index: /tags/ipp-20110218/ippTools/share/regtool_pendingburntoolimfile.sql
===================================================================
--- /tags/ipp-20110218/ippTools/share/regtool_pendingburntoolimfile.sql	(revision 31039)
+++ /tags/ipp-20110218/ippTools/share/regtool_pendingburntoolimfile.sql	(revision 31040)
@@ -22,7 +22,7 @@
        FROM
        summitExp
-       JOIN summitImfile USING(exp_name)
-       LEFT JOIN pzDownloadExp USING(exp_name)
-       LEFT JOIN newExp ON summitExp.exp_name = tmp_exp_name
+       JOIN summitImfile USING(summit_id)
+       LEFT JOIN pzDownloadExp USING(summit_id)
+       LEFT JOIN newExp USING(summit_id)
        LEFT JOIN newImfile ON (summitImfile.class_id = newImfile.tmp_class_id AND newExp.exp_id = newImfile.exp_id)
        LEFT JOIN rawExp ON rawExp.exp_id = newExp.exp_id
Index: /tags/ipp-20110218/ippTools/src/addtool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/addtool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/addtool.c	(revision 31040)
@@ -684,5 +684,5 @@
     PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
 
-    if (!pxSetFaultCode(config->dbh, "addProcessedExp", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "addProcessedExp", where, fault, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
Index: /tags/ipp-20110218/ippTools/src/camtool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/camtool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/camtool.c	(revision 31040)
@@ -983,4 +983,5 @@
 
     PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
+    PXOPT_LOOKUP_S16(quality, config->args, "-set_quality", false, false);
 
     psMetadata *where = psMetadataAlloc();
@@ -990,5 +991,5 @@
     PXOPT_COPY_STR(config->args, where, "-class_id", "class_id", "==");
 
-    if (!pxSetFaultCode(config->dbh, "camProcessedExp", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "camProcessedExp", where, fault, quality)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
Index: /tags/ipp-20110218/ippTools/src/camtoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/camtoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/camtoolConfig.c	(revision 31040)
@@ -86,4 +86,5 @@
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_dist_group", 0,   "define new dist_group", NULL);
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_note", 0,         "define new note", NULL);
+    pxmagicAddArguments(updaterunArgs);
 
     // -pendingexp
@@ -243,4 +244,5 @@
     psMetadataAddStr(updateprocessedexpArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
     psMetadataAddS16(updateprocessedexpArgs, PS_LIST_TAIL, "-fault",  0,            "set fault code (required)", INT16_MAX);
+    psMetadataAddS16(updateprocessedexpArgs, PS_LIST_TAIL, "-set_quality",  0,            "set quality", 0);
 
     // -block
@@ -299,6 +301,6 @@
     PXOPT_ADD_MODE("-addprocessedexp",      "add a processed exposure",             CAMTOOL_MODE_ADDPROCESSEDEXP, addprocessedexpArgs);
     PXOPT_ADD_MODE("-processedexp",         "show processed exposures",             CAMTOOL_MODE_PROCESSEDEXP,  processedexpArgs);
-    PXOPT_ADD_MODE("-revertprocessedexp",   "change procesed exp properties",       CAMTOOL_MODE_REVERTPROCESSEDEXP,  revertprocessedexpArgs);
-    PXOPT_ADD_MODE("-updateprocessedexp",   "undo a processed exposure",            CAMTOOL_MODE_UPDATEPROCESSEDEXP,updateprocessedexpArgs);
+    PXOPT_ADD_MODE("-revertprocessedexp",   "undo a processed exposure",       CAMTOOL_MODE_REVERTPROCESSEDEXP,  revertprocessedexpArgs);
+    PXOPT_ADD_MODE("-updateprocessedexp",   "changed processed exp properties",            CAMTOOL_MODE_UPDATEPROCESSEDEXP,updateprocessedexpArgs);
     PXOPT_ADD_MODE("-block",                "set a label block",                    CAMTOOL_MODE_BLOCK,         blockArgs);
     PXOPT_ADD_MODE("-masked",               "show blocked labels",                  CAMTOOL_MODE_MASKED,        maskedArgs);
Index: /tags/ipp-20110218/ippTools/src/chiptool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/chiptool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/chiptool.c	(revision 31040)
@@ -963,6 +963,7 @@
     if (!state) {
       PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
-
-      if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", where, fault)) {
+      PXOPT_LOOKUP_S16(quality, config->args, "-set_quality", false, false);
+
+      if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", where, fault, quality)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         return false;
Index: /tags/ipp-20110218/ippTools/src/chiptoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/chiptoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/chiptoolConfig.c	(revision 31040)
@@ -235,5 +235,5 @@
     psMetadataAddS16(updateprocessedimfileArgs, PS_LIST_TAIL, "-fault",  0,            "set fault code (required)", 0);
     psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-set_state", 0,         "set state", NULL);
-
+    psMetadataAddS16(updateprocessedimfileArgs, PS_LIST_TAIL, "-set_quality",  0,            "set quality", 0);
     // -processedExp
     psMetadata *listrunArgs = psMetadataAlloc();
Index: /tags/ipp-20110218/ippTools/src/dettool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/dettool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/dettool.c	(revision 31040)
@@ -1314,21 +1314,60 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    bool updating = false;
+    long rows = 0;
+    psMetadata *where = psMetadataAlloc();
     PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true, false); // required
+
     PXOPT_LOOKUP_BOOL(again, config->args, "-again", false);
     PXOPT_LOOKUP_STR(state, config->args, "-state", false, false);
 
+    PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
+
+    psMetadata *values = psMetadataAlloc();
+    PXOPT_LOOKUP_TIME(time_begin, config->args, "-set_time_begin", false, false);
+    if (time_begin) {
+      updating = true;
+      PXOPT_COPY_TIME(config->args, values,       "-set_time_begin", "time_begin", "==");
+    }
+    PXOPT_LOOKUP_TIME(time_end,   config->args, "-set_time_end",   false, false);
+    if (time_end) {
+      updating = true;
+      PXOPT_COPY_TIME(config->args,   values,       "-set_time_end",   "time_end", "==");
+    }    
+    PXOPT_LOOKUP_TIME(use_begin,  config->args, "-set_use_begin",  false, false);
+    if (use_begin) {
+      updating = true;
+      PXOPT_COPY_TIME(config->args,  values,       "-set_use_begin",  "use_begin", "==");
+    }
+    PXOPT_LOOKUP_TIME(use_end,    config->args, "-set_use_end",    false, false);
+    if (use_end) {
+      updating = true;
+      PXOPT_COPY_TIME(config->args,    values,       "-set_use_end",    "use_end", "==");
+    }
+    if (state) {
+      updating = true;
+      if (!isValidDetRunState (state)) return false;
+      PXOPT_COPY_STR(config->args,     values,       "-state",        "state", "==");
+    }
+
+
     // either -rerun or -state must be specified
-    if (!(again || state)) {
-        psError(PS_ERR_UNKNOWN, true, "either -again or -state must be specified");
-        return false;
-    }
-    if (again && state) {
-        psError(PS_ERR_UNKNOWN, true, "-accept and -reject are exclusive");
-        return false;
-    }
-
-    if (state) {
-        // set detRun.state to state
-        return setDetRunState(config, det_id, state);
+    if (!(again || updating)) {
+        psError(PS_ERR_UNKNOWN, true, "either -again or update parameters must be specified");
+        return false;
+    }
+    if (again && updating) {
+        psError(PS_ERR_UNKNOWN, true, "-again and update parameters are exclusive");
+        return false;
+    }
+
+    if (updating) {
+      rows = psDBUpdateRows(config->dbh,"detRun",where,values);
+      if (rows) {
+	return(true);
+      }
+      else {
+	return(false);
+      }
     }
 
Index: /tags/ipp-20110218/ippTools/src/dettoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/dettoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/dettoolConfig.c	(revision 31040)
@@ -848,4 +848,8 @@
     psMetadataAddBool(updatedetrunArgs, PS_LIST_TAIL, "-again",  0,            "start a new iteration of this detrend run", false);
     psMetadataAddStr(updatedetrunArgs, PS_LIST_TAIL, "-state",  0,            "set the state of this detrend run", false);
+    psMetadataAddTime(updatedetrunArgs, PS_LIST_TAIL, "-set_time_begin",  0,            "start of period to apply detrend too", NULL);
+    psMetadataAddTime(updatedetrunArgs, PS_LIST_TAIL, "-set_time_end",  0,            "end of period to apply detrend too", NULL);
+    psMetadataAddTime(updatedetrunArgs, PS_LIST_TAIL, "-set_use_begin",  0,            "start of detrend run applicable period", NULL);
+    psMetadataAddTime(updatedetrunArgs, PS_LIST_TAIL, "-set_use_end",  0,            "end of detrend run applicable period", NULL);
 
     // -rerun
Index: /tags/ipp-20110218/ippTools/src/difftool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/difftool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/difftool.c	(revision 31040)
@@ -2681,4 +2681,5 @@
 
     PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
+    PXOPT_LOOKUP_S16(quality, config->args, "-set_quality", false, false);
 
     psMetadata *where = psMetadataAlloc();
@@ -2686,5 +2687,5 @@
     PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id",   "==");
 
-    if (!pxSetFaultCode(config->dbh, "diffSkyfile", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "diffSkyfile", where, fault, quality)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
Index: /tags/ipp-20110218/ippTools/src/difftoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/difftoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/difftoolConfig.c	(revision 31040)
@@ -411,6 +411,7 @@
     psMetadata *updatediffskyfileArgs = psMetadataAlloc();
     psMetadataAddS64(updatediffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,      "define diff ID (required)", 0);
+    psMetadataAddStr(updatediffskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0,   "search by skycell ID", NULL);
     psMetadataAddS16(updatediffskyfileArgs, PS_LIST_TAIL, "-fault", 0,        "set fault code (required)", 0);
-    psMetadataAddStr(updatediffskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0,   "search by skycell ID", NULL);
+    psMetadataAddS16(updatediffskyfileArgs, PS_LIST_TAIL, "-set_quality", 0,      "set quality", 0);
 
     // -tocleanedskyfile
Index: /tags/ipp-20110218/ippTools/src/disttool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/disttool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/disttool.c	(revision 31040)
@@ -141,4 +141,5 @@
     PXOPT_LOOKUP_BOOL(use_alternate, config->args, "-use_alternate", false);
     PXOPT_LOOKUP_BOOL(no_magic, config->args, "-no_magic", false);
+    PXOPT_LOOKUP_BOOL(i_am_sure, config->args, "-i_am_sure", false);
     PXOPT_LOOKUP_STR(set_label, config->args, "-set_label", false, false);
     PXOPT_LOOKUP_STR(set_data_group, config->args, "-set_data_group", false, false);
@@ -150,4 +151,24 @@
     PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
 
+    // select arguments
+    psMetadata *where = psMetadataAlloc();
+
+    PXOPT_COPY_S64(config->args, where, "-target_id", "distTarget.target_id",    "==");
+    PXOPT_COPY_S64(config->args, where, "-exp_id",    "rawExp.exp_id",           "==");
+    PXOPT_COPY_S64(config->args, where, "-chip_id",   "chipRun.chip_id",         "==");
+    PXOPT_COPY_STR(config->args, where, "-exp_type", "exp_type", "==");;
+    PXOPT_COPY_STR(config->args, where, "-dist_group", "distTarget.dist_group", "==");;
+
+    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
+    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", false, false);
+    PXOPT_LOOKUP_STR(exp_type, config->args, "-exp_type", false, false);
+    PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false);
+
+    // queuing no_magic runs can be quite dangerous. Require confirmation
+    if (no_magic && !pretend && !i_am_sure) {
+        psError(PXTOOLS_ERR_SYS, true, "-i_am_sure required to queue no_magic distribution runs");
+        return false;
+    }
+   
     if (use_alternate) {
         if (strcmp(stage, "raw")) {
@@ -161,13 +182,15 @@
     }
 
-    // select arguments
-    psMetadata *where = psMetadataAlloc();
-
-    PXOPT_COPY_S64(config->args, where, "-target_id", "distTarget.target_id",    "==");
-    PXOPT_COPY_S64(config->args, where, "-exp_id",    "rawExp.exp_id",           "==");
-    PXOPT_COPY_S64(config->args, where, "-chip_id",   "chipRun.chip_id",         "==");
-
-    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
-    PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false);
+    // We want to possible to distribute unmagicked raw exposures for the purpose
+    // of distributing detrend inputs
+    // To make it less likely that unmagicked raw stage exposures from being distributed
+    // accidentally we require that dist_group (to select target and destination with 
+    // an interest)
+    // and exp_id to be supplied. We could add -exp_type and dateobs cuts to make it easier
+    if (!strcmp(stage, "raw") && no_magic && !(exp_id && dist_group && exp_type)) {
+        psError(PXTOOLS_ERR_SYS, true, "exp_id, exp_type, and dist_group are required for raw stage if no_magic");
+        return false;
+    }
+
 
     psString query = NULL;
@@ -182,5 +205,9 @@
             runJoinStr = "camRun.exp_id";
         }
-        query = pxDataGet("disttool_definebyquery_raw.sql");
+        if (!no_magic) {
+            query = pxDataGet("disttool_definebyquery_raw.sql");
+        } else {
+            query = pxDataGet("disttool_definebyquery_raw_no_magic.sql");
+        }
         if (!query) {
             psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
@@ -189,10 +216,13 @@
         }
 
-        // for raw stage we select by camRun.label and dist_group because rawExp doesn't have those columns
-        if (label) {
-            psStringAppend(&query, " AND (magicDSRun.label = '%s')", label);
-        }
-        if (dist_group) {
-            psStringAppend(&query, " AND (camRun.dist_group = '%s')", dist_group);
+        if (!no_magic) {
+            if (label) {
+                psStringAppend(&query, " AND (magicDSRun.label = '%s')", label);
+            }
+            // for raw stage we select by camRun.label and dist_group because rawExp
+            // doesn't have those columns
+            if (dist_group) {
+                psStringAppend(&query, " AND (camRun.dist_group = '%s')", dist_group);
+            }
         }
     } else if (!strcmp(stage, "chip")) {
Index: /tags/ipp-20110218/ippTools/src/disttoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/disttoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/disttoolConfig.c	(revision 31040)
@@ -49,4 +49,5 @@
 
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-no_magic", 0, "magic is not needed", false);
+    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-i_am_sure", 0, "confirmation needed when -no_magic is supplied", false);
     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-use_alternate", 0, "use alternate inputs", false);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_label",    0, "define label for run", NULL);
@@ -57,7 +58,8 @@
 
     // select args
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-target_id",     0, "define target_id", 0);
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id",        0, "define exp_id", 0);
-    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_id",       0, "define chip_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-target_id",     0, "select by target_id", 0);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-exp_id",        0, "select by exp_id", 0);
+    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-exp_type",      0, "select by exp_type", NULL);
+    psMetadataAddS64(definebyqueryArgs, PS_LIST_TAIL, "-chip_id",       0, "select by chip_id", 0);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-label",         0, "select by run label", NULL);
     psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-dist_group",    0, "select by dist_group", NULL);
Index: /tags/ipp-20110218/ippTools/src/faketool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/faketool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/faketool.c	(revision 31040)
@@ -706,5 +706,5 @@
     PXOPT_COPY_STR(config->args, where, "-class_id", "class_id", "==");
 
-    if (!pxSetFaultCode(config->dbh, "fakeProcessedImfile", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "fakeProcessedImfile", where, fault, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree(where);
Index: /tags/ipp-20110218/ippTools/src/magicdstool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/magicdstool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/magicdstool.c	(revision 31040)
@@ -602,5 +602,5 @@
 
     psMetadata *where = psMetadataAlloc();
-    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
+    PXOPT_COPY_STR(config->args, where, "-label", "label", "LIKE");
     PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
     PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");
Index: /tags/ipp-20110218/ippTools/src/magicdstoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/magicdstoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/magicdstoolConfig.c	(revision 31040)
@@ -106,5 +106,5 @@
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state",     0, "define state", NULL);
     psMetadataAddS64(updaterunArgs, PS_LIST_TAIL, "-stage_id", 0, "define stage_id", 0);
-    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-label",     0, "define label", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-label",     0, "define label (LIKE) comparison", NULL);
     psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-data_group",     0, "data_group (LIKE) comparision", NULL);
     psMetadataAddBool(updaterunArgs, PS_LIST_TAIL, "-noreplace", 0, "only update runs with replace not set", false);
Index: /tags/ipp-20110218/ippTools/src/pubtool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pubtool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pubtool.c	(revision 31040)
@@ -37,4 +37,5 @@
 static bool addMode(pxConfig *config);
 static bool revertMode(pxConfig *config);
+static bool updaterunMode(pxConfig *config);
 
 # define MODECASE(caseName, func) \
@@ -63,4 +64,5 @@
         MODECASE(PUBTOOL_MODE_ADD, addMode);
         MODECASE(PUBTOOL_MODE_REVERT, revertMode);
+        MODECASE(PUBTOOL_MODE_UPDATERUN, updaterunMode);
       default:
         psAbort("invalid option (this should not happen)");
@@ -459,2 +461,40 @@
 }
 
+static bool updaterunMode(pxConfig *config)
+{
+    PS_ASSERT_PTR_NON_NULL(config, false);
+
+    psMetadata *where = psMetadataAlloc(); // WHERE conditions
+    PXOPT_COPY_S64(config->args, where, "-pub_id", "pub_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-client_id", "client_id", "==");
+    PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
+    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
+    PXOPT_COPY_STR(config->args, where, "-fault", "fault", "==");
+
+    PXOPT_LOOKUP_STR(state, config->args, "-set_state",  true, false);
+
+    psString query = NULL;              // Query to run
+    psStringAppend(&query, "UPDATE publishRun LEFT JOIN publishDone using(pub_id) SET state = '%s'", state);
+
+    if (psListLength(where->list)) {
+        psString clause = psDBGenerateWhereConditionSQL(where, NULL);
+        psStringAppend(&query, "\n WHERE %s", clause);
+        psFree(clause);
+    } else {
+        psError(PS_ERR_UNKNOWN, false, "select arguments are required");
+        return false;
+    }
+    psFree(where);
+
+    if (!p_psDBRunQuery(config->dbh, query)) {
+        psError(PS_ERR_UNKNOWN, false, "Database error");
+        psFree(query);
+        return false;
+    }
+    psFree(query);
+
+    long numUpdated = psDBAffectedRows(config->dbh);
+    psLogMsg("pubtool", PS_LOG_INFO, "%ld rows updated.", numUpdated);
+
+    return true;
+}
Index: /tags/ipp-20110218/ippTools/src/pubtool.h
===================================================================
--- /tags/ipp-20110218/ippTools/src/pubtool.h	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pubtool.h	(revision 31040)
@@ -31,4 +31,5 @@
     PUBTOOL_MODE_ADD,
     PUBTOOL_MODE_REVERT,
+    PUBTOOL_MODE_UPDATERUN,
 } pubtoolMode;
 
Index: /tags/ipp-20110218/ippTools/src/pubtoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pubtoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pubtoolConfig.c	(revision 31040)
@@ -102,4 +102,13 @@
     psMetadataAddStr(revertArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "search on label", NULL);
 
+    // -updaterun
+    psMetadata *updaterunArgs = psMetadataAlloc();
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-set_state", 0, "new value for state (required)", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-state", 0, "search by state", NULL);
+    psMetadataAddS64(updaterunArgs, PS_LIST_TAIL, "-pub_id", 0, "search on pub_id", 0);
+    psMetadataAddS64(updaterunArgs, PS_LIST_TAIL, "-client_id", 0, "search on client_id", 0);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-label", 0, "search by label", NULL);
+    psMetadataAddStr(updaterunArgs, PS_LIST_TAIL, "-fault", 0, "search by fault", NULL);
+
 
     psMetadata *argSets = psMetadataAlloc();
@@ -112,4 +121,5 @@
     PXOPT_ADD_MODE("-add", "", PUBTOOL_MODE_ADD, addArgs);
     PXOPT_ADD_MODE("-revert", "", PUBTOOL_MODE_REVERT, revertArgs);
+    PXOPT_ADD_MODE("-updaterun", "", PUBTOOL_MODE_UPDATERUN, updaterunArgs);
 
     if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Index: /tags/ipp-20110218/ippTools/src/pxfault.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pxfault.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pxfault.c	(revision 31040)
@@ -26,5 +26,5 @@
 #include "pxtools.h"
 
-bool pxSetFaultCode(psDB *dbh, const char *tableName, psMetadata *where, psS16 code)
+bool pxSetFaultCode(psDB *dbh, const char *tableName, psMetadata *where, psS16 code, psS16 quality)
 {
     PS_ASSERT_PTR_NON_NULL(dbh, false);
@@ -48,4 +48,11 @@
         return false;
     }
+    if (quality) {
+        if (!psMetadataAddS16(values, PS_LIST_HEAD, "quality", 0, NULL, quality)) {
+            psError(PS_ERR_UNKNOWN, false, "failed to add metadata item quality");
+            psFree(values);
+            return false;
+        }
+    }
 
     long rowsAffected = psDBUpdateRows(dbh, tableName, where, values); 
Index: /tags/ipp-20110218/ippTools/src/pxinject.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pxinject.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pxinject.c	(revision 31040)
@@ -92,4 +92,5 @@
     if (!newExpInsert(config->dbh,
                 0,    // exp_id
+		0, // summit_id
                 tmp_exp_name,
                 tmp_camera,
Index: /tags/ipp-20110218/ippTools/src/pxtools.h
===================================================================
--- /tags/ipp-20110218/ippTools/src/pxtools.h	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pxtools.h	(revision 31040)
@@ -75,5 +75,5 @@
 bool pxAddLabelSearchArgs (pxConfig *config, psMetadata *where, char *field, char *name, char *op);
 
-bool pxSetFaultCode(psDB *dbh, const char *tableName, psMetadata *where, psS16 code);
+bool pxSetFaultCode(psDB *dbh, const char *tableName, psMetadata *where, psS16 code, psS16 quality);
 bool pxExportVersion(pxConfig *config, FILE *f);
 bool pxCheckImportVersion(pxConfig *config, psMetadata *md);
Index: /tags/ipp-20110218/ippTools/src/pzgetexp.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pzgetexp.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pzgetexp.c	(revision 31040)
@@ -215,5 +215,6 @@
         char *query = 
             "INSERT INTO summitExp" 
-            "   SElECT"
+            "   SELECT"
+  	    "       NULL," // summit_id
             "       incoming.*,"
             "       NULL,"  // imfiles
Index: /tags/ipp-20110218/ippTools/src/pzgetimfiles.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pzgetimfiles.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pzgetimfiles.c	(revision 31040)
@@ -99,7 +99,31 @@
     int status = pclose(output);
 
+    // We have an id value now, let's get it and use it
+    char *id_query = "SELECT summit_id FROM summitExp WHERE exp_name = '%s' AND camera = '%s' AND telescope = '%s'";
+
+    if (!p_psDBRunQueryF(config->dbh, id_query, filesetid, camera, telescope)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+    }
+    
+    psArray *id_output = p_psDBFetchResult(config->dbh);
+    if (!id_output) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+      return false;
+    }
+    if (psArrayLength(id_output) != 1) {
+      psError(PS_ERR_UNKNOWN, false, "database error: incorrect number of results");
+      return false;
+    }
+
+    psMetadata *id_result = id_output->data[0];
+
+    psS64 summit_id = psMetadataLookupS64(NULL, id_result, "summit_id");
+    psFree(id_output);
+    // End of summit_id block.
+    
     if (status != 0) {
         // mark the summitExp row as faulted
-        if (!p_psDBRunQueryF(config->dbh, "UPDATE summitExp SET fault = %d WHERE exp_name = '%s' AND camera = '%s' AND telescope = '%s'", WEXITSTATUS(status), filesetid, camera, telescope)) {
+        if (!p_psDBRunQueryF(config->dbh, "UPDATE summitExp SET fault = %d WHERE summit_id = %ld", WEXITSTATUS(status), summit_id)) {
             psError(PS_ERR_UNKNOWN, false, "database error");
         }
@@ -117,5 +141,5 @@
         // download an "empty" fileset.
         // mark the summitExp row as faulted
-        if (!p_psDBRunQueryF(config->dbh, "UPDATE summitExp SET fault = %d WHERE exp_name = '%s' AND camera = '%s' AND telescope = '%s'", 250, filesetid, camera, telescope)) {
+        if (!p_psDBRunQueryF(config->dbh, "UPDATE summitExp SET fault = %d WHERE summit_id = %ld", 250, summit_id)) {
                 psError(PS_ERR_UNKNOWN, false, "database error");
         }
@@ -142,8 +166,6 @@
             "UPDATE summitExp"
             " SET imfiles = %d"
-            " WHERE exp_name = '%s'"
-            " AND camera = '%s'"
-            " AND telescope = '%s'";
-        if (!p_psDBRunQueryF(config->dbh, query, imfiles, filesetid, camera, telescope)) {
+	    " WHERE summit_id = %ld";
+        if (!p_psDBRunQueryF(config->dbh, query, imfiles, summit_id)) {
             // rollback
             if (!psDBRollback(config->dbh)) {
@@ -159,8 +181,6 @@
                 "DELETE FROM pzDownloadExp"
                 " WHERE"
-                "   exp_name = '%s'"
-                "   AND camera = '%s'"
-                "   AND telescope = '%s'";
-            if (!p_psDBRunQueryF(config->dbh, query, filesetid, camera, telescope)) {
+	        " summit_id = %ld";
+            if (!p_psDBRunQueryF(config->dbh, query, summit_id)) {
                 // rollback
                 if (!psDBRollback(config->dbh)) {
@@ -245,4 +265,5 @@
             "INSERT IGNORE INTO summitImfile" 
             "   SELECT"
+	    "       %ld," // summit_id
             "       incoming.exp_name,"
             "       incoming.camera,"
@@ -256,5 +277,5 @@
             "       NULL"       // epoch
             "   FROM incoming";
-        if (!p_psDBRunQuery(config->dbh, query)) {
+        if (!p_psDBRunQueryF(config->dbh, query,summit_id)) {
             // rollback
             if (!psDBRollback(config->dbh)) {
@@ -272,14 +293,10 @@
             " SET imfiles = (SELECT COUNT(*) FROM summitImfile"
             "   WHERE"
-            "       exp_name = '%s'"
-            "       AND camera = '%s'"
-            "       AND telescope = '%s'"
+	    "   summit_id = %ld"
             ")" 
             " WHERE"
-            "   exp_name = '%s'"
-            "   AND camera = '%s'"
-            "   AND telescope = '%s'"
+	    "   summit_id = %ld"
             "   AND imfiles IS NULL";
-        if (!p_psDBRunQueryF(config->dbh, query, filesetid, camera, telescope, filesetid, camera, telescope)) {
+        if (!p_psDBRunQueryF(config->dbh, query, summit_id, summit_id)) {
             // rollback
             if (!psDBRollback(config->dbh)) {
@@ -308,4 +325,5 @@
             "INSERT IGNORE INTO pzDownloadExp" 
             "   SELECT"
+  	    "       %ld,"    // summit_id
             "       incoming.exp_name,"
             "       incoming.camera,"
@@ -319,5 +337,5 @@
             "       incoming.telescope";
 
-        if (!p_psDBRunQuery(config->dbh, query)) {
+        if (!p_psDBRunQueryF(config->dbh, query,summit_id)) {
             // rollback
             if (!psDBRollback(config->dbh)) {
Index: /tags/ipp-20110218/ippTools/src/pztool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pztool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pztool.c	(revision 31040)
@@ -53,5 +53,5 @@
 static psArray *pzGetPendingCameras(pxConfig *config);
 static psArray *pzArrayZip(psArray *arraySet, psS64 limit);
-static bool pzDownloadExpSetState(pxConfig *config, const char *exp_name, const char *camera, const char *telescope, const char *state);
+static bool pzDownloadExpSetState(pxConfig *config, const psS64 summit_id, const char *state);
 
 # define MODECASE(caseName, func) \
@@ -222,4 +222,5 @@
 
     psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where,  "-summit_id",    "summit_id", "==");
     PXOPT_COPY_STR(config->args, where,  "-exp_name",     "exp_name", "==");
     PXOPT_COPY_STR(config->args, where,  "-inst",         "camera", "==");
@@ -237,9 +238,7 @@
             " FROM summitExp"
             " LEFT JOIN pzDownloadExp"
-            "   USING(exp_name, camera, telescope)"
+	    "   USING(summit_id)"
             " WHERE"
-            "   pzDownloadExp.exp_name IS NULL"
-            "   AND pzDownloadExp.camera IS NULL"
-            "   AND pzDownloadExp.telescope IS NULL"
+	    "   pzDownloadExp.summit_id IS NULL"
             "   AND summitExp.fault = 0"
         );
@@ -260,4 +259,5 @@
     if (limit) {
         psString limitString = psDBGenerateLimitSQL(limit);
+
         psStringAppend(&query, " %s", limitString);
         psFree(limitString);
@@ -299,4 +299,5 @@
 
     psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_S64(config->args, where,  "-summit_id",     "summit_id", "==");
     PXOPT_COPY_STR(config->args, where,  "-exp_name",      "exp_name",  "==");
     PXOPT_COPY_STR(config->args, where,  "-inst",          "camera",    "==");
@@ -401,4 +402,5 @@
 
     // required
+    PXOPT_LOOKUP_S64(summit_id, config->args, "-summit_id", true, false);
     PXOPT_LOOKUP_STR(exp_name, config->args, "-exp_name", true, false);
     PXOPT_LOOKUP_STR(camera, config->args, "-inst", true, false);
@@ -428,4 +430,5 @@
 
         psMetadata *where = psMetadataAlloc();
+	PXOPT_COPY_S64(config->args, where,  "-summit_id", "summit_id", "==");
         PXOPT_COPY_STR(config->args, where,  "-exp_name", "exp_name", "==");
         PXOPT_COPY_STR(config->args, where,  "-inst", "camera", "==");
@@ -459,4 +462,5 @@
 
     if (!pzDownloadImfileInsert(config->dbh,
+            summit_id,			
             exp_name,
             camera,
@@ -505,4 +509,5 @@
 
     psMetadata *where = psMetadataAlloc();
+    PXOPT_COPY_STR(config->args, where,  "-summit_id", "summit_id", "==");
     PXOPT_COPY_STR(config->args, where,  "-exp_name", "exp_name", "==");
     PXOPT_COPY_STR(config->args, where,  "-inst", "camera", "==");
@@ -560,4 +565,5 @@
 
     // required
+    PXOPT_LOOKUP_S64(summit_id, config->args, "-summit_id", true, false);
     PXOPT_LOOKUP_STR(exp_name, config->args, "-exp_name", true, false);
     PXOPT_LOOKUP_STR(inst, config->args, "-inst", true, false);
@@ -579,4 +585,5 @@
     if (!newExpInsert(config->dbh,
             0x0,        // exp_id
+	    summit_id,  // summit_id
             exp_name,   // tmp_exp_name
             inst,       // tmp_camera
@@ -597,12 +604,13 @@
         }
 
-        psS64 exp_id = psDBLastInsertID(config->dbh);
-
-        // insert newImfiles
-        {
-            char *query =
+    psS64 exp_id = psDBLastInsertID(config->dbh);
+
+    // insert newImfiles
+    {
+      char *query =
                 "INSERT INTO newImfile"
-                "   SElECT"
+                "   SELECT"
                 "       %" PRId64 ","               // exp_id
+	        "       %" PRId64 ","               // summit_id
                 "       pzDownloadImfile.class_id," // tmp_class_id
                 "       pzDownloadImfile.uri,"      // uri
@@ -616,20 +624,20 @@
                 "       AND pzDownloadImfile.telescope = '%s'";
 
-        if (!p_psDBRunQueryF(config->dbh, query, exp_id, exp_name, inst, telescope)) {
-            psError(PS_ERR_UNKNOWN, false, "database error");
-            return false;
-        }
-
-        // sanity check: we should have inserted at least one row
-        psU64 affected = psDBAffectedRows(config->dbh);
-        if (psDBAffectedRows(config->dbh) < 1) {
-            psError(PS_ERR_UNKNOWN, false, "should have affected at least 1 row but %" PRIu64 " rows were modified", affected);
-            return false;
-        }
+      if (!p_psDBRunQueryF(config->dbh, query, exp_id, summit_id, exp_name, inst, telescope)) {
+	psError(PS_ERR_UNKNOWN, false, "database error");
+	return false;
+      }
+
+      // sanity check: we should have inserted at least one row
+      psU64 affected = psDBAffectedRows(config->dbh);
+      if (psDBAffectedRows(config->dbh) < 1) {
+	psError(PS_ERR_UNKNOWN, false, "should have affected at least 1 row but %" PRIu64 " rows were modified", affected);
+	return false;
+      }
     }
 
     // set pzDownloadExp.state to 'stop'
-    if (!pzDownloadExpSetState(config, exp_name, inst, telescope, "stop")) {
-        psError(PS_ERR_UNKNOWN, false, "failed to change pzDownloadExp.state for %s:%s:%s", exp_name, inst, telescope);
+    if (!pzDownloadExpSetState(config, summit_id, "stop")) {
+        psError(PS_ERR_UNKNOWN, false, "failed to change pzDownloadExp.state for %ld", summit_id);
         return false;
     }
@@ -798,5 +806,5 @@
     PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
 
-    if (!pxSetFaultCode(config->dbh, "pzDownloadImfile", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "pzDownloadImfile", where, fault, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
@@ -887,5 +895,5 @@
 
 
-static bool pzDownloadExpSetState(pxConfig *config, const char *exp_name, const char *camera, const char *telescope, const char *state)
+static bool pzDownloadExpSetState(pxConfig *config, const psS64 summit_id, const char *state)
 {
     PS_ASSERT_PTR_NON_NULL(state, false);
@@ -904,7 +912,7 @@
     }
 
-    char *query = "UPDATE pzDownloadExp SET state = '%s' WHERE exp_name = '%s' and camera = '%s' and telescope = '%s'";
-    if (!p_psDBRunQueryF(config->dbh, query, state, exp_name, camera, telescope)) {
-        psError(PS_ERR_UNKNOWN, false, "failed to change state for %s:%s:%s", exp_name, camera, telescope);
+    char *query = "UPDATE pzDownloadExp SET state = '%s' WHERE summit_id = %ld";
+    if (!p_psDBRunQueryF(config->dbh, query, state, summit_id)) {
+        psError(PS_ERR_UNKNOWN, false, "failed to change state for %ld", summit_id);
         return false;
     }
@@ -916,11 +924,9 @@
 {
   PS_ASSERT_PTR_NON_NULL(config, false);
-  PXOPT_LOOKUP_STR(exp_name, config->args, "-exp_name", true, false);
-  PXOPT_LOOKUP_STR(camera,   config->args, "-inst",   true, false);
-  PXOPT_LOOKUP_STR(telescope,config->args, "-telescope",true, false);
+  PXOPT_LOOKUP_S64(summit_id, config->args, "-summit_id", true, false);
   PXOPT_LOOKUP_STR(state,    config->args, "-set_state",true, false);
 
-  if (!pzDownloadExpSetState(config,exp_name,camera,telescope,state)) {
-    psError(PS_ERR_UNKNOWN, false, "failed to change state for %s:%s:%s", exp_name, camera, telescope);
+  if (!pzDownloadExpSetState(config,summit_id, state)) {
+    psError(PS_ERR_UNKNOWN, false, "failed to change state for %ld", summit_id);
     return false;
   }
Index: /tags/ipp-20110218/ippTools/src/pztoolConfig.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/pztoolConfig.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/pztoolConfig.c	(revision 31040)
@@ -63,4 +63,5 @@
     // -pendingexp
     psMetadata *pendingexpArgs = psMetadataAlloc();
+    psMetadataAddS64(pendingexpArgs, PS_LIST_TAIL, "-summit_id", 0,          "define summit_id", 0);
     psMetadataAddStr(pendingexpArgs, PS_LIST_TAIL, "-exp_name", 0,            "define exposure ID", NULL);
     psMetadataAddStr(pendingexpArgs, PS_LIST_TAIL, "-inst", 0,            "define camera ID", NULL);
@@ -73,4 +74,5 @@
     // -pendingimfile
     psMetadata *pendingimfileArgs = psMetadataAlloc();
+    psMetadataAddS64(pendingimfileArgs, PS_LIST_TAIL, "-summit_id", 0,          "define summit_id", 0);
     psMetadataAddStr(pendingimfileArgs, PS_LIST_TAIL, "-exp_name", 0,            "define exposure ID", NULL);
     psMetadataAddStr(pendingimfileArgs, PS_LIST_TAIL, "-inst", 0,            "define camera ID", NULL);
@@ -85,4 +87,5 @@
     // -copydone
     psMetadata *copydoneArgs = psMetadataAlloc();
+    psMetadataAddS64(copydoneArgs, PS_LIST_TAIL, "-summit_id", 0,          "define summit_id (required)", 0);
     psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-exp_name", 0,            "define exposure ID (required)", NULL);
     psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-inst", 0,            "define camera ID (required)", NULL);
Index: /tags/ipp-20110218/ippTools/src/regtool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/regtool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/regtool.c	(revision 31040)
@@ -311,7 +311,7 @@
 
   // required
-  PXOPT_LOOKUP_STR(dateobs_begin,     config->args, "-dateobs_begin", true, false);
-  PXOPT_LOOKUP_STR(dateobs_end,     config->args, "-dateobs_end", true, false);
-  PXOPT_LOOKUP_S32(valid_burntool, config->args, "-valid_burntool", true, false);
+  PXOPT_LOOKUP_STR(dateobs_begin,   config->args, "-dateobs_begin",  true, false);
+  PXOPT_LOOKUP_STR(dateobs_end,     config->args, "-dateobs_end",    true, false);
+  PXOPT_LOOKUP_S32(valid_burntool,  config->args, "-valid_burntool", true, false);
   // optional
   PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
@@ -894,5 +894,5 @@
     if (fault != INT16_MAX) {
         // this is fairly dangerous : can set all if the where is not set...
-        if (!pxSetFaultCode(config->dbh, "rawImfile", where, fault)) {
+        if (!pxSetFaultCode(config->dbh, "rawImfile", where, fault, 0)) {
             psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
             psFree (where);
@@ -1361,12 +1361,15 @@
 
     // set the state for the newExp to stop
-    if (!pxnewExpSetState(config, exp_id, "stop")) {
+    // but only if we didn't encounter a fault
+    if (fault == 0) {
+      if (!pxnewExpSetState(config, exp_id, "stop")) {
         // rollback
         if (!psDBRollback(config->dbh)) {
-            psError(PS_ERR_UNKNOWN, false, "database error");
+	  psError(PS_ERR_UNKNOWN, false, "database error");
         }
         psError(PS_ERR_UNKNOWN, false, "failed to change newExp.state for exp_id: %"PRId64, exp_id);
-    psFree(newExp);
-        return false;
+	psFree(newExp);
+        return false;
+      }
     }
 
@@ -1608,5 +1611,5 @@
   PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
 
-  if (!pxSetFaultCode(config->dbh, "rawExp", where, fault)) {
+  if (!pxSetFaultCode(config->dbh, "rawExp", where, fault, 0)) {
     psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
     psFree(where);
Index: /tags/ipp-20110218/ippTools/src/stacktool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/stacktool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/stacktool.c	(revision 31040)
@@ -1667,5 +1667,5 @@
     PXOPT_COPY_S64(config->args, where, "-stack_id",   "stack_id",   "==");
 
-    if (!pxSetFaultCode(config->dbh, "stackSumSkyfile", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "stackSumSkyfile", where, fault, quality)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
Index: /tags/ipp-20110218/ippTools/src/staticskytool.c
===================================================================
--- /tags/ipp-20110218/ippTools/src/staticskytool.c	(revision 31039)
+++ /tags/ipp-20110218/ippTools/src/staticskytool.c	(revision 31040)
@@ -716,5 +716,5 @@
     PXOPT_COPY_S64(config->args, where, "-sky_id",   "sky_id",   "==");
 
-    if (!pxSetFaultCode(config->dbh, "staticskyResult", where, fault)) {
+    if (!pxSetFaultCode(config->dbh, "staticskyResult", where, fault, 0)) {
         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
         psFree (where);
Index: /tags/ipp-20110218/psLib/src/db/psDB.c
===================================================================
--- /tags/ipp-20110218/psLib/src/db/psDB.c	(revision 31039)
+++ /tags/ipp-20110218/psLib/src/db/psDB.c	(revision 31040)
@@ -2894,9 +2894,9 @@
         break;
     case PS_DATA_F32:
-        isNaN = PS_IS_NAN(psF32, data, NAN);
-        break;
+      isNaN = isnan(*((psF32 *) data));
+      break;
     case PS_DATA_F64:
-        isNaN = PS_IS_NAN(psF64, data, NAN);
-        break;
+      isNaN = isnan(*((psF64 *) data));
+      break;
     case PS_DATA_BOOL:
         // XXX: what is NaN for a bool?
