Index: /branches/czw_branch/20110406/dbconfig/changes.txt
===================================================================
--- /branches/czw_branch/20110406/dbconfig/changes.txt	(revision 31406)
+++ /branches/czw_branch/20110406/dbconfig/changes.txt	(revision 31407)
@@ -2079,6 +2079,6 @@
     registered TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- time run was registered
     fault SMALLINT NOT NULL,      -- fault code
-    quick_sass_id,                -- stackAssociation id for quick stack
-    final_sass_id,                -- stackAssociation id for final stack
+    quick_sass_id BIGINT,         -- stackAssociation id for quick stack
+    final_sass_id BIGINT,         -- stackAssociation id for final stack
     PRIMARY KEY(lap_id),
     KEY(seq_id),
@@ -2102,5 +2102,6 @@
     active TINYINT DEFAULT 0, -- denotes if this exposure is currently in use
     data_state VARCHAR(64) NOT NULL, -- state of exposure
-    PRIMARY KEY (lap_id),
+    PRIMARY KEY (lap_id,exp_id),
+    KEY (lap_id),
     KEY (exp_id),
     KEY (chip_id),
@@ -2110,5 +2111,5 @@
     FOREIGN KEY (exp_id) REFERENCES rawExp(exp_id),
     FOREIGN KEY (chip_id,exp_id) REFERENCES chipRun(chip_id,exp_id),
-    FOREIGN KEY (pair_id) REFERENCES chipRun(chip_id),
+    FOREIGN KEY (pair_id) REFERENCES chipRun(chip_id)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
Index: /branches/czw_branch/20110406/dbconfig/ipp.m4
===================================================================
--- /branches/czw_branch/20110406/dbconfig/ipp.m4	(revision 31406)
+++ /branches/czw_branch/20110406/dbconfig/ipp.m4	(revision 31407)
@@ -35,2 +35,3 @@
 include(background.md)
 include(diffphot.md)
+include(lap.md)
Index: /branches/czw_branch/20110406/dbconfig/lap.md
===================================================================
--- /branches/czw_branch/20110406/dbconfig/lap.md	(revision 31406)
+++ /branches/czw_branch/20110406/dbconfig/lap.md	(revision 31407)
@@ -22,5 +22,5 @@
 lapExp METADATA
     lap_id         S64         0    # Primary Key fkey (lap_id) ref lapRun(lap_id)
-    exp_id         S64         0    # Key fkey (exp_id) ref rawExp(exp_id)
+    exp_id         S64         0    # Primary Key fkey (exp_id) ref rawExp(exp_id)
     chip_id        S64         0    # Key fkey (exp_id, chip_id) ref chipRun(exp_id, chip_id)
     pair_id        S64         0    # Key fkey (pair_id) ref chipRun(chip_id)
Index: /branches/czw_branch/20110406/ippTools/share/Makefile.am
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/Makefile.am	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/Makefile.am	(revision 31407)
@@ -405,4 +405,5 @@
 	laptool_exposures.sql \
 	laptool_inactiveexp.sql \ 
+	laptool_listsequence.sql \
 	laptool_pendingchipexp.sql \
 	laptool_pendingexp.sql \
Index: /branches/czw_branch/20110406/ippTools/share/laptool_definerun.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_definerun.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_definerun.sql	(revision 31407)
@@ -1,3 +1,3 @@
-SELECT exp_id, chip_id, false as private, true as active
+SELECT exp_id, chip_id, false as private, true as active, false as pairwise
   FROM rawExp 
   LEFT JOIN 
@@ -6,3 +6,5 @@
      where private IS FALSE 
      AND data_state = 'full') AS old USING(exp_id)
+     WHERE rawExp.exp_type= 'OBJECT' AND
+     rawExp.dateobs >= '2009-04-01T00:00:00.000000' AND
 -- Position restriction goes here.
Index: /branches/czw_branch/20110406/ippTools/share/laptool_exposures.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_exposures.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_exposures.sql	(revision 31407)
@@ -4,21 +4,21 @@
       W.*,IFNULL(diff1.diff_id,diff2.diff_id) AS diff_id FROM (
     SELECT DISTINCT
-        lap_id,tess_id,projection_cell,filter,lapRun.state as lapRun_state, lapRun.registered, lapRun.fault, labRun.label,
+        lap_id,lapRun.tess_id,projection_cell,filter,lapRun.state as lapRun_state, lapRun.registered, lapRun.fault, lapRun.label,
         lapExp.exp_id,lapExp.chip_id,lapExp.pair_id,private,pairwise,active,lapExp.data_state,
         chipRun.state as chipRun_state, sum(chipProcessedImfile.fault) as chip_faults, sum(chipProcessedImfile.quality) as chip_quality,
-        camRun.state as camRun_state,   sum(camProcessedExp.fault) AS cam_faults, sum(camProcessedExp.quality) AS cam_quality,
-        fakeRun.state as fakeRun_state, sum(fakeProcessedImfile.fault) as fake_faults,
-        warpRun.state as warpRun_state, sum(warpSkyfile.fault) as warp_faults, sum(warpSkyfile.quality) as warp_quality,
+        camRun.cam_id, camRun.state as camRun_state,   sum(camProcessedExp.fault) AS cam_faults, sum(camProcessedExp.quality) AS cam_quality,
+	fakeRun.fake_id, fakeRun.state as fakeRun_state, sum(fakeProcessedImfile.fault) as fake_faults,
+  	warpRun.warp_id, warpRun.state as warpRun_state, sum(warpSkyfile.fault) as warp_faults, sum(warpSkyfile.quality) as warp_quality,
         warpRun.magicked
     FROM lapRun JOIN lapExp USING(lap_id)
-    JOIN chipRun USING(chip_id,exp_id)
-    FROM chipRun JOIN chipProcessedImfile USING(chip_id)
+    LEFT JOIN chipRun USING(chip_id)
+    LEFT JOIN chipProcessedImfile USING(chip_id)
     LEFT JOIN camRun USING(chip_id) LEFT JOIN camProcessedExp USING(cam_id)
     LEFT JOIN fakeRun USING(cam_id) LEFT JOIN fakeProcessedImfile USING(fake_id)
     LEFT JOIN warpRun USING(fake_id) LEFT JOIN warpSkyfile USING(warp_id)
-    @WHERE@
+    WHERE    @WHERE@
     AND warpSkyfile.quality != 8007 -- known cases where quality != 0, but everything's fine.
     AND warpSkyfile.quality != 3006 -- known cases where quality != 0, but everything's fine.
-
+    GROUP BY lap_id,exp_id
     ) AS W
 -- This was unreasonably slow in testing, so that's why I'm using a subquery here.
@@ -27,4 +27,4 @@
 ) AS D
 LEFT JOIN diffRun USING(diff_id)
-JOIN lapExp AS others ON (D.chip_id = lapExp.chip_id AND D.lap_id != lapExp.lap_id)
-GROUP BY chip_id
+JOIN lapExp AS others ON (D.chip_id = others.chip_id AND D.lap_id != others.lap_id)
+GROUP BY lap_id,exp_id
Index: /branches/czw_branch/20110406/ippTools/share/laptool_inactiveexp.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_inactiveexp.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_inactiveexp.sql	(revision 31407)
@@ -4,14 +4,15 @@
       W.*,IFNULL(diff1.diff_id,diff2.diff_id) AS diff_id FROM (
     SELECT DISTINCT
-        lap_id,tess_id,projection_cell,filter,lapRun.state as lapRun_state, lapRun.registered, lapRun.fault, labRun.label,
+        lapRun.lap_id, lapRun.seq_id, lapRun.tess_id, lapRun.projection_cell, lapRun.filter, lapRun.state, lapRun.label,
+        lapRun.dist_group, lapRun.registered, lapRun.fault, lapRun.quick_sass_id, lapRun.final_sass_id,
         lapExp.exp_id,lapExp.chip_id,lapExp.pair_id,private,pairwise,active,lapExp.data_state,
         chipRun.state as chipRun_state, sum(chipProcessedImfile.fault) as chip_faults, sum(chipProcessedImfile.quality) as chip_quality,
-        camRun.state as camRun_state,   sum(camProcessedExp.fault) AS cam_faults, sum(camProcessedExp.quality) AS cam_quality,
-        fakeRun.state as fakeRun_state, sum(fakeProcessedImfile.fault) as fake_faults,
-        warpRun.state as warpRun_state, sum(warpSkyfile.fault) as warp_faults, sum(warpSkyfile.quality) as warp_quality,
+        cam_id, camRun.state as camRun_state,   sum(camProcessedExp.fault) AS cam_faults, sum(camProcessedExp.quality) AS cam_quality,
+        fake_id, fakeRun.state as fakeRun_state, sum(fakeProcessedImfile.fault) as fake_faults,
+        warp_id, warpRun.state as warpRun_state, sum(warpSkyfile.fault) as warp_faults, sum(warpSkyfile.quality) as warp_quality,
         warpRun.magicked
     FROM lapRun JOIN lapExp USING(lap_id)
-    JOIN chipRun USING(chip_id,exp_id)
-    FROM chipRun JOIN chipProcessedImfile USING(chip_id)
+    LEFT JOIN chipRun USING(chip_id)
+    LEFT JOIN chipProcessedImfile USING(chip_id)
     LEFT JOIN camRun USING(chip_id) LEFT JOIN camProcessedExp USING(cam_id)
     LEFT JOIN fakeRun USING(cam_id) LEFT JOIN fakeProcessedImfile USING(fake_id)
@@ -19,4 +20,5 @@
     WHERE lapExp.active = FALSE
     AND @WHERE@
+    GROUP BY lap_id,exp_id
     ) AS W
 -- This was unreasonably slow in testing, so that's why I'm using a subquery here.
@@ -25,4 +27,4 @@
 ) AS D
 LEFT JOIN diffRun USING(diff_id)
-JOIN lapExp AS others ON (D.chip_id = lapExp.chip_id AND D.lap_id != lapExp.lap_id)
-GROUP BY chip_id
+JOIN lapExp AS others ON (D.chip_id = others.chip_id AND D.lap_id != others.lap_id)
+GROUP BY lap_id,exp_id
Index: /branches/czw_branch/20110406/ippTools/share/laptool_listsequence.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_listsequence.sql	(revision 31407)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_listsequence.sql	(revision 31407)
@@ -0,0 +1,1 @@
+select * from lapSequence
Index: /branches/czw_branch/20110406/ippTools/share/laptool_pendingexp.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_pendingexp.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_pendingexp.sql	(revision 31407)
@@ -1,8 +1,9 @@
-select lap_id, projection_cell, tess_id, registered, state, fault,
-       exp_id, chip_id, pair_id, private, pairwise, active, data_state,
+select lapRun.lap_id, lapRun.seq_id, lapRun.tess_id, lapRun.projection_cell, lapRun.filter, lapRun.state, lapRun.label,
+       lapRun.dist_group, lapRun.registered, lapRun.fault, lapRun.quick_sass_id, lapRun.final_sass_id,
+       exp_id, chip_id, pair_id, private, pairwise, active, lapExp.data_state,
        dateobs, object, comment
   FROM lapRun JOIN lapExp USING(lap_id)
-  JOIN rawExp USING(exp_id)
-WHERE active IS TRUE AND fault = 0
+  JOIN rawExp USING(exp_id,filter)
+WHERE active IS TRUE AND lapRun.fault = 0
 -- lap_id restriction here.
 -- This probably needs to be sorted by dateobs.
Index: /branches/czw_branch/20110406/ippTools/share/laptool_stacks.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/laptool_stacks.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/laptool_stacks.sql	(revision 31407)
@@ -1,12 +1,22 @@
-SELECT lapRun.*,stacks.* FROM
+SELECT 
+       lapRun.lap_id,lapRun.seq_id,lapRun.tess_id,lapRun.projection_cell,lapRun.filter,
+       lapRun.state,lapRun.label,lapRun.dist_group,lapRun.registered,lapRun.fault,
+       skycell_id,
+       quick_sass_id,quick_data_group,quick_stack_id,quick_state,quick_fault,quick_quality,
+       final_sass_id,final_data_group,final_stack_id,final_state,final_fault,final_quality
+       FROM
        lapRun LEFT JOIN 
-       (SELECT DISTINCT * FROM (
-
+       (
+SELECT DISTINCT 
+       lap_id,tess_id,projection_cell,filter,skycell_id,
+       quick_sass_id,quick_data_group,quick_stack_id,quick_state,quick_fault,quick_quality,
+       final_sass_id,final_data_group,final_stack_id,final_state,final_fault,final_quality
+       FROM
        (select lapRun.lap_id,
        	       stackAssociation.sass_id AS quick_sass_id,
-	       stackAssociation.data_group AS quick_data_group
+	       stackAssociation.data_group AS quick_data_group,
 	       stackAssociation.projection_cell,
 	       stackAssociation.tess_id,
-	       stackAssocaition.filter,
+	       stackAssociation.filter,
 	       stackRun.stack_id AS quick_stack_id,
 	       stackRun.skycell_id,
@@ -19,7 +29,7 @@
 	   LEFT JOIN stackRun USING(stack_id)
 	   LEFT JOIN stackSumSkyfile USING(stack_id)
-	   where lapRun.lap_id = @LAP_ID@
+	   WHERE 1 @WHERE@
 	   AND sass_id = lapRun.quick_sass_id
-       ) AS quick USING(lap_id,projection_cell,tess_id,filter) LEFT JOIN
+       ) AS quick LEFT JOIN
        (select lapRun.lap_id,
        	       stackAssociation.sass_id AS final_sass_id,
@@ -27,5 +37,5 @@
 	       stackAssociation.projection_cell,
 	       stackAssociation.tess_id,
-	       stackAssocaition.filter,
+	       stackAssociation.filter,
 	       stackRun.stack_id AS final_stack_id,
 	       stackRun.skycell_id,
@@ -38,10 +48,13 @@
 	   LEFT JOIN stackRun USING(stack_id)
 	   LEFT JOIN stackSumSkyfile USING(stack_id)
-	   where lapRun.lap_id = @LAP_ID@
+	   WHERE 1 @WHERE@
 	   AND sass_id = lapRun.final_sass_id
        ) AS final USING(lap_id,projection_cell,tess_id,filter,skycell_id)
-
        UNION
-
+SELECT DISTINCT 
+       lap_id,tess_id,projection_cell,filter,skycell_id,
+       quick_sass_id,quick_data_group,quick_stack_id,quick_state,quick_fault,quick_quality,
+       final_sass_id,final_data_group,final_stack_id,final_state,final_fault,final_quality
+       FROM
        (select lapRun.lap_id,
        	       stackAssociation.sass_id AS quick_sass_id,
@@ -49,5 +62,5 @@
 	       stackAssociation.projection_cell,
 	       stackAssociation.tess_id,
-	       stackAssocaition.filter,
+	       stackAssociation.filter,
 	       stackRun.stack_id AS quick_stack_id,
 	       stackRun.skycell_id,
@@ -60,7 +73,7 @@
 	   LEFT JOIN stackRun USING(stack_id)
 	   LEFT JOIN stackSumSkyfile USING(stack_id)
-	   where lapRun.lap_id = @LAP_ID@
+	   WHERE 1 @WHERE@
 	   AND sass_id = lapRun.quick_sass_id
-       ) AS quick USING(lap_id,projection_cell,tess_id,filter) RIGHT JOIN
+       ) AS quick RIGHT JOIN
        (select lapRun.lap_id,
        	       stackAssociation.sass_id AS final_sass_id,
@@ -68,5 +81,5 @@
 	       stackAssociation.projection_cell,
 	       stackAssociation.tess_id,
-	       stackAssocaition.filter,
+	       stackAssociation.filter,
 	       stackRun.stack_id AS final_stack_id,
 	       stackRun.skycell_id,
@@ -79,6 +92,7 @@
 	   LEFT JOIN stackRun USING(stack_id)
 	   LEFT JOIN stackSumSkyfile USING(stack_id)
-	   where lapRun.lap_id = @LAP_ID@
+	   WHERE 1 @WHERE@
 	   AND sass_id = lapRun.final_sass_id
        ) AS final USING(lap_id,projection_cell,tess_id,filter,skycell_id)
- ) stacks USING(lap_id,projection_cell,tess_id,filter)
+ ) stacks USING(lap_id,projection_cell,tess_id,filter,quick_sass_id,final_sass_id)
+WHERE 1 @WHERE@
Index: /branches/czw_branch/20110406/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- /branches/czw_branch/20110406/ippTools/share/pxadmin_create_tables.sql	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/share/pxadmin_create_tables.sql	(revision 31407)
@@ -1912,6 +1912,6 @@
     registered TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- time run was registered
     fault SMALLINT NOT NULL,      -- fault code
-    quick_sass_id,                -- stackAssociation id for quick stack
-    final_sass_id,                -- stackAssociation id for final stack
+    quick_sass_id BIGINT,         -- stackAssociation id for quick stack
+    final_sass_id BIGINT,         -- stackAssociation id for final stack
     PRIMARY KEY(lap_id),
     KEY(seq_id),
@@ -1943,5 +1943,5 @@
     FOREIGN KEY (exp_id) REFERENCES rawExp(exp_id),
     FOREIGN KEY (chip_id,exp_id) REFERENCES chipRun(chip_id,exp_id),
-    FOREIGN KEY (pair_id) REFERENCES chipRun(chip_id),
+    FOREIGN KEY (pair_id) REFERENCES chipRun(chip_id)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;    
 
Index: /branches/czw_branch/20110406/ippTools/src/laptool.c
===================================================================
--- /branches/czw_branch/20110406/ippTools/src/laptool.c	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/src/laptool.c	(revision 31407)
@@ -121,5 +121,5 @@
   }
 
-  if (lapSequencePrintObject(stdout, run, !simple)) {
+  if (!lapSequencePrintObject(stdout, run, !simple)) {
     psError(PS_ERR_UNKNOWN, false, "failed to print object");
     psFree(run);
@@ -141,5 +141,5 @@
   psMetadata *where = psMetadataAlloc();
   PXOPT_COPY_S64(config->args, where, "-seq_id", "seq_id", "==");
-  PXOPT_COPY_STR(config->args, where, "-name",   "name",   "LIKE");
+  PXOPT_COPY_STR(config->args, where, "-seq_name",   "name",   "LIKE");
 
   psString query = pxDataGet("laptool_listsequence.sql");
@@ -214,4 +214,5 @@
   PXOPT_LOOKUP_STR(label,           config->args, "-label",           false, false);
   PXOPT_LOOKUP_STR(dist_group,      config->args, "-dist_group",      false, false);
+  PXOPT_LOOKUP_BOOL(all_obsmode,    config->args, "-all_obsmode",     false);
   PXOPT_LOOKUP_BOOL(simple,         config->args, "-simple",          false);
 
@@ -226,6 +227,6 @@
 				  NULL, // registered
 				  0,    // fault
-				  0,    // quick_sass_id
-				  0     // final_sass_id
+				  INT64_MAX,    // quick_sass_id
+				  INT64_MAX     // final_sass_id
 				  );
   if (!run) {
@@ -248,11 +249,9 @@
   }
 
-  // point of no return
-  if (!psDBCommit(config->dbh)) {
-    psError(PS_ERR_UNKNOWN, false, "database error");
-    return false;
-  }
-
-  if (lapRunPrintObject(stdout, run, !simple)) {
+
+  if (!lapRunPrintObject(stdout, run, !simple)) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
     psError(PS_ERR_UNKNOWN, false, "failed to print object");
     psFree(run);
@@ -265,16 +264,44 @@
   psString query = pxDataGet("laptool_definerun.sql");
   if (!query) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
+
     psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
     return(false);
   }
-  psString where = NULL;
-  if (!pxspaceAddWhere(config, &where, "rawExp")) {
+
+  // Add constraints to the exposure search:
+  psMetadata *where = psMetadataAlloc();
+  PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "==");
+
+  // This seems unnecessarily clunky.
+  if (!all_obsmode) {
+    //    fprintf(stderr, "Not doing all obsmodes!\n");
+    if (!psMetadataLookupStr(NULL,config->args,"-obsmode")) {
+      //      fprintf(stderr, "Not doing all obsmodes and none specified!\n");
+      psMetadataAddStr(where,PS_LIST_TAIL,"rawExp.obs_mode",0,"==","3PI");
+    }
+    pxAddLabelSearchArgs (config, where, "-obsmode", "rawExp.obsmode", "==");
+  }
+  
+  psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
+  if (!pxspaceAddWhere(config, &whereClause, "rawExp")) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
+
     psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     return(false);
   }
-  psStringAppend(&query, " %s", where);
+  psStringAppend(&query, " %s", whereClause);
   psFree(where);
 
+  // Fetch exposures
   if (!p_psDBRunQuery(config->dbh, query)) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
+
     psError(PS_ERR_UNKNOWN, false, "database error");
     psFree(query);
@@ -285,8 +312,16 @@
   psArray *output = p_psDBFetchResult(config->dbh);
   if (!output) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
+
     psError(PS_ERR_UNKNOWN, false, "database error");
     return(false);
   }
   if (!psArrayLength(output)) {
+    if (!psDBRollback(config->dbh)) {
+      psError(PS_ERR_UNKNOWN, false, "database error");
+    }
+
     psTrace("laptool", PS_LOG_INFO, "no rows found");
     psFree(output);
@@ -294,12 +329,24 @@
   }
 
-
   // Insert the exposure data
   for (long i = 0; i < output->n; i++) {
     psMetadata *row = output->data[i]; // Row from select
+    // Add default values from this run:
+    psMetadataAddS64(row, PS_LIST_TAIL, "lap_id", 0, "", lap_id);
+    psMetadataAddS64(row, PS_LIST_TAIL, "pair_id", 0, "", INT64_MAX);
+    psMetadataAddStr(row, PS_LIST_TAIL, "data_state", 0, "", "new");
     lapExpRow *lapExp = lapExpObjectFromMetadata(row);
     lapExp->lap_id = lap_id;
 
     if (!lapExpInsertObject(config->dbh,lapExp)) {
+      if (!lapExpPrintObject(stdout, lapExp, !simple)) {
+	if (!psDBRollback(config->dbh)) {
+	  psError(PS_ERR_UNKNOWN, false, "database error");
+	}
+	psError(PS_ERR_UNKNOWN, false, "failed to print object");
+	psFree(run);
+	return false;
+      }
+      
       if (!psDBRollback(config->dbh)) {
 	psError(PS_ERR_UNKNOWN, false, "database error");
@@ -312,4 +359,11 @@
   }
 
+  // point of no return
+  if (!psDBCommit(config->dbh)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
+    return false;
+  }
+
+  
   psFree(output);
   return(true);  
@@ -341,5 +395,4 @@
     psFree(whereClause);
   }
-  psStringAppend(&query, " ORDER BY rawExp.dateobs ");
   
   if (!p_psDBRunQuery(config->dbh, query)) {
@@ -452,4 +505,6 @@
     psFree(limitString);
   }
+  psStringAppend(&query, " ORDER BY rawExp.dateobs ");
+  
   if (!p_psDBRunQuery(config->dbh, query)) {
     psError(PS_ERR_UNKNOWN, false, "database error");
@@ -554,7 +609,9 @@
 {
   PS_ASSERT_PTR_NON_NULL(config, false);
+  PXOPT_LOOKUP_S64(lap_id, config->args, "-lap_id", true, false);
+
   PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
   PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
-  
+
   psMetadata *where = psMetadataAlloc();
   PXOPT_COPY_S64(config->args, where, "-lap_id", "lap_id", "==");
@@ -565,41 +622,52 @@
     return(false);
   }
-  psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
-  if (whereClause) {
+  
+  if (psListLength(where->list)) {
+    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     psStringPrepend(&whereClause, "\n AND ");
-  }
-  
-  psString limitString = NULL;
+    psStringSubstitute(&query,whereClause,"@WHERE@");
+    psFree(whereClause);
+  }
+
   if (limit) {
-    limitString = psDBGenerateLimitSQL(limit);
-    psStringPrepend(&limitString, "\n");
-  }
-
-  if (!p_psDBRunQueryF(config->dbh, query, whereClause, limitString ? limitString : "")) {
-    psError(PXTOOLS_ERR_PROG, false, "database error");
+    psString limitString = psDBGenerateLimitSQL(limit);
+    psStringAppend(&query, " %s", limitString);
     psFree(limitString);
+  }
+
+
+  if (!p_psDBRunQuery(config->dbh, query)) {
+    psError(PS_ERR_UNKNOWN, false, "database error");
     psFree(query);
-    psFree(whereClause);
-    return(false);
-  }
-  psFree(limitString);
+    return false;
+  }
   psFree(query);
-  psFree(whereClause);
-  
+
   psArray *output = p_psDBFetchResult(config->dbh);
   if (!output) {
-    psError(PS_ERR_UNKNOWN, false, "database error");
-    return(false);
+    psErrorCode err = psErrorCodeLast();
+    switch (err) {
+    case PS_ERR_DB_CLIENT:
+      psError(PXTOOLS_ERR_SYS, false, "database error");
+    case PS_ERR_DB_SERVER:
+      psError(PXTOOLS_ERR_PROG, false, "database error");
+    default:
+      psError(PXTOOLS_ERR_PROG, false, "unknown error %d",err);
+    }
+
+    return false;
   }
   if (!psArrayLength(output)) {
     psTrace("laptool", PS_LOG_INFO, "no rows found");
     psFree(output);
-    return(true);
-  }
-  
-  if (!ippdbPrintMetadatas(stdout, output, "lapRunStacks", !simple)) {
-    psError(PS_ERR_UNKNOWN, false, "failed to print array");
-    psFree(output);
-    return(false);
+    return true;
+  }
+
+  if (psArrayLength(output)) {
+    if (!ippdbPrintMetadatas(stdout, output, "lapRunStacks", !simple)) {
+      psError(PS_ERR_UNKNOWN, false, "failed to print array");
+      psFree(output);
+      return false;
+    }
   }
 
Index: /branches/czw_branch/20110406/ippTools/src/laptool.h
===================================================================
--- /branches/czw_branch/20110406/ippTools/src/laptool.h	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/src/laptool.h	(revision 31407)
@@ -9,5 +9,6 @@
 
 typedef enum {
-  LAPTOOL_MODE_DEFINESEQUENCE     = 0x0,
+  LAPTOOL_MODE_NONE           = 0x0,
+  LAPTOOL_MODE_DEFINESEQUENCE,
   LAPTOOL_MODE_LISTSEQUENCE,
   LAPTOOL_MODE_DEFINERUN,
Index: /branches/czw_branch/20110406/ippTools/src/laptoolConfig.c
===================================================================
--- /branches/czw_branch/20110406/ippTools/src/laptoolConfig.c	(revision 31406)
+++ /branches/czw_branch/20110406/ippTools/src/laptoolConfig.c	(revision 31407)
@@ -57,4 +57,9 @@
   ADD_OPT(Str, definerunArgs, "-label",                       "define the label used", NULL);
   ADD_OPT(Str, definerunArgs, "-dist_group",                  "define the distribution group for this data", NULL);
+
+  psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-obsmode", PS_META_DUPLICATE_OK, "search by obsmode", NULL);
+  ADD_OPT(Bool,definerunArgs, "-all_obsmode",                 "use all science obsmodes", false);
+  
+  ADD_OPT(Bool,definerunArgs, "-simple",                      "use the simple output format", false);
   
   // -pendingrun
@@ -67,5 +72,5 @@
   ADD_OPT(Str, pendingrunArgs, "-state",                      "search by LAP run state", NULL);
   ADD_OPT(Str, pendingrunArgs, "-fault",                      "search by LAP run fault", NULL);
-
+  ADD_OPT(Bool,pendingrunArgs, "-simple",                     "use the simple output format", false);
   // -updaterun
   psMetadata *updaterunArgs = psMetadataAlloc();
