Index: trunk/ippTools/configure.ac
===================================================================
--- trunk/ippTools/configure.ac	(revision 21237)
+++ trunk/ippTools/configure.ac	(revision 21308)
@@ -1,5 +1,5 @@
 AC_PREREQ(2.61)
 
-AC_INIT([ipptools], [1.1.36], [ipp-support@ifa.hawaii.edu])
+AC_INIT([ipptools], [1.1.37], [ipp-support@ifa.hawaii.edu])
 AC_CONFIG_SRCDIR([autogen.sh])
 
@@ -18,5 +18,5 @@
 PKG_CHECK_MODULES([PSLIB], [pslib >= 1.1.0])
 PKG_CHECK_MODULES([PSMODULES], [psmodules >= 1.1.0])
-PKG_CHECK_MODULES([IPPDB], [ippdb >= 1.1.47]) 
+PKG_CHECK_MODULES([IPPDB], [ippdb >= 1.1.48]) 
 
 PXTOOLS_CFLAGS="${PSLIB_CFLAGS=} ${PSMODULES_CFLAGS=} ${IPPDB_CFLAGS=}"
Index: trunk/ippTools/share/chiptool_pendingimfile.sql
===================================================================
--- trunk/ippTools/share/chiptool_pendingimfile.sql	(revision 21237)
+++ trunk/ippTools/share/chiptool_pendingimfile.sql	(revision 21308)
@@ -1,5 +1,5 @@
 SELECT
     chipRun.*,
-    0 as chip_imfile_id,
+    chipImfile.chip_imfile_id,
     rawImfile.class_id,
     rawImfile.uri,
@@ -9,5 +9,7 @@
     rawExp.telescope,
     rawExp.filelevel
-FROM chipRun
+FROM chipImfile
+JOIN chipRun
+    USING(chip_id)
 JOIN rawExp
     USING(exp_id)
Index: trunk/ippTools/share/chiptool_processedimfile.sql
===================================================================
--- trunk/ippTools/share/chiptool_processedimfile.sql	(revision 21237)
+++ trunk/ippTools/share/chiptool_processedimfile.sql	(revision 21308)
@@ -1,3 +1,5 @@
 SELECT DISTINCT
+    chipProcessedImfile.chip_id,
+    chipImfile.chip_imfile_id,
     chipProcessedImfile.class_id,
     chipProcessedImfile.uri,
@@ -14,10 +16,8 @@
     rawExp.filelevel
 FROM chipRun
+JOIN chipImfile
+    USING(chip_id)
 JOIN chipProcessedImfile
     USING(chip_id)
 JOIN rawExp
     ON chipProcessedImfile.exp_id = rawExp.exp_id
-WHERE
--- bogus test; just here so there there is a 'WHERE' stmt to append conditionals too
-    chipProcessedImfile.exp_id is NOT NULL
-
Index: trunk/ippTools/share/difftool_definebyquery_part2.sql
===================================================================
--- trunk/ippTools/share/difftool_definebyquery_part2.sql	(revision 21237)
+++ trunk/ippTools/share/difftool_definebyquery_part2.sql	(revision 21308)
@@ -2,11 +2,12 @@
 INSERT INTO skycellsToDiff
     SELECT
-        0,              -- diff_id
+        0,                      -- diff_id
         warpSkyfile.skycell_id,
-        warp_id,        -- warp1
-        NULL,           -- stack1
-        NULL,           -- warp2
-        max_stack_id,   -- stack2
-        warpSkyfile.tess_id
+        warpSkyfile.warp_id,    -- warp1
+        NULL,                   -- stack1
+        NULL,                   -- warp2
+        max_stack_id,           -- stack2
+        warpSkyfile.tess_id,
+        0
         FROM warpSkyfile
         JOIN warpRun USING(warp_id)
@@ -28,5 +29,5 @@
         USING(skycell_id)
         WHERE
-            warp_id = %lld
+            warpSkyfile.warp_id = %lld
             AND ignored = 0
             AND filter = '%s'
Index: trunk/ippTools/share/difftool_definebyquery_temp_create.sql
===================================================================
--- trunk/ippTools/share/difftool_definebyquery_temp_create.sql	(revision 21237)
+++ trunk/ippTools/share/difftool_definebyquery_temp_create.sql	(revision 21308)
@@ -6,4 +6,5 @@
 warp2 BIGINT,
 stack2 BIGINT,
-tess_id VARCHAR(64)
+tess_id VARCHAR(64),
+diff_skycell_id BIGINT
 ) ENGINE=MEMORY;
Index: trunk/ippTools/share/difftool_skyfile.sql
===================================================================
--- trunk/ippTools/share/difftool_skyfile.sql	(revision 21237)
+++ trunk/ippTools/share/difftool_skyfile.sql	(revision 21308)
@@ -1,4 +1,5 @@
 SELECT
     diffSkyfile.*,
+    diffInputSkyfile.diff_skyfile_id,
     diffRun.tess_id,
     diffRun.state,
Index: trunk/ippTools/share/difftool_todiffskyfile.sql
===================================================================
--- trunk/ippTools/share/difftool_todiffskyfile.sql	(revision 21237)
+++ trunk/ippTools/share/difftool_todiffskyfile.sql	(revision 21308)
@@ -4,5 +4,5 @@
 SELECT DISTINCT
     diffRun.diff_id,
-    0 as diff_skyfile_id,
+    diffInputSkyfile.diff_skyfile_id,
     diffRun.workdir,
     diffInputSkyfile.skycell_id,
Index: trunk/ippTools/share/pxadmin_create_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_create_tables.sql	(revision 21237)
+++ trunk/ippTools/share/pxadmin_create_tables.sql	(revision 21308)
@@ -275,4 +275,13 @@
 ENGINE=innodb DEFAULT CHARSET=latin1;
 
+CREATE TABLE chipImfile (
+    chip_id BIGINT,
+    class_id VARCHAR(64),
+    chip_imfile_id BIGINT AUTO_INCREMENT,
+    PRIMARY KEY(chip_id, class_id),
+    KEY(chip_imfile_id),
+    FOREIGN KEY (chip_id) REFERENCES  chipRun(chip_id))
+ENGINE=innodb DEFAULT CHARSET=latin1;
+
 CREATE TABLE chipProcessedImfile (
     chip_id BIGINT,
@@ -333,10 +342,8 @@
     path_base VARCHAR(255),
     fault SMALLINT NOT NULL,
-    chip_image_id BIGINT AUTO_INCREMENT,
     magicked BIGINT,
     PRIMARY KEY(chip_id, exp_id, class_id),
     KEY(data_state),
     KEY(fault),
-    KEY(chip_image_id),
     FOREIGN KEY (chip_id, exp_id)
         REFERENCES  chipRun(chip_id, exp_id),
@@ -846,4 +853,14 @@
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
 
+CREATE TABLE warpImfile (
+    warp_id BIGINT,
+    skycell_id VARCHAR(64),
+    warp_skyfile_id BIGINT AUTO_INCREMENT,
+    PRIMARY KEY(warp_id, skycell_id),
+    KEY(warp_skyfile_id),
+    FOREIGN KEY (warp_id) REFERENCES  warpRun(warp_id))
+ENGINE=innodb DEFAULT CHARSET=latin1;
+
+
 CREATE TABLE warpSkyfile (
     warp_id BIGINT,
@@ -865,10 +882,8 @@
     ignored TINYINT,
     fault SMALLINT,
-    warp_image_id BIGINT AUTO_INCREMENT,
     magicked TINYINT,
     PRIMARY KEY(warp_id, skycell_id, tess_id),
     KEY(good_frac),
     KEY(ignored), KEY(fault),
-    KEY(warp_image_id),
     FOREIGN KEY (warp_id, skycell_id, tess_id)
         REFERENCES warpSkyCellMap(warp_id, skycell_id, tess_id)
@@ -965,5 +980,7 @@
         stack2 BIGINT,
         tess_id VARCHAR(64),
-        PRIMARY KEY(diff_id, skycell_id),
+        diff_skyfile_id BIGINT AUTO_INCREMENT,
+        KEY(diff_id, skycell_id),
+        KEY(diff_skyfile_id),
         KEY(warp1),
         KEY(warp2),
@@ -1004,10 +1021,8 @@
         good_frac FLOAT,
         fault SMALLINT,
-        diff_image_id BIGINT AUTO_INCREMENT,
         magicked TINYINT,
         PRIMARY KEY(diff_id, skycell_id),
         KEY(good_frac),
         KEY(fault),
-        KEY(diff_image_id),
         FOREIGN KEY (diff_id)  REFERENCES  diffRun(diff_id)
 ) ENGINE=innodb DEFAULT CHARSET=latin1;
Index: trunk/ippTools/share/pxadmin_drop_tables.sql
===================================================================
--- trunk/ippTools/share/pxadmin_drop_tables.sql	(revision 21237)
+++ trunk/ippTools/share/pxadmin_drop_tables.sql	(revision 21308)
@@ -12,4 +12,5 @@
 DROP TABLE IF EXISTS chipRun;
 DROP TABLE IF EXISTS chipProcessedImfile;
+DROP TABLE IF EXISTS chipImfile;
 DROP TABLE IF EXISTS chipMask;
 DROP TABLE IF EXISTS camRun;
@@ -33,4 +34,5 @@
 DROP TABLE IF EXISTS warpRun;
 DROP TABLE IF EXISTS warpSkyCellMap;
+DROP TABLE IF EXISTS warpImfile;
 DROP TABLE IF EXISTS warpSkyfile;
 DROP TABLE IF EXISTS warpMask;
Index: trunk/ippTools/share/warptool_towarped.sql
===================================================================
--- trunk/ippTools/share/warptool_towarped.sql	(revision 21237)
+++ trunk/ippTools/share/warptool_towarped.sql	(revision 21308)
@@ -1,5 +1,5 @@
 SELECT DISTINCT
     warpSkyCellMap.warp_id,
-    0 as warp_skyfile_id,
+    warpImfile.warp_skyfile_id,
     warpSkyCellMap.skycell_id,
     warpSkyCellMap.tess_id,
@@ -13,4 +13,7 @@
 JOIN warpSkyCellMap
     USING(warp_id)
+JOIN warpImfile
+    ON warpSkyCellMap.warp_id = warpImfile.warp_id
+    AND warpSkyCellMap.skycell_id = warpImfile.skycell_id
 JOIN fakeRun
     USING(fake_id)
Index: trunk/ippTools/src/chiptool.c
===================================================================
--- trunk/ippTools/src/chiptool.c	(revision 21237)
+++ trunk/ippTools/src/chiptool.c	(revision 21308)
@@ -485,5 +485,4 @@
                                    path_base,
                                    code,
-                                   0,   // chip_image_id
                                    0    // magic_ds_id
             )) {
@@ -530,4 +529,5 @@
     pxchipGetSearchArgs (config, where); // chipRun, chipProcessedImfile, rawExp
     PXOPT_COPY_S64(config->args, where, "-chip_id", "chipRun.chip_id", "==");
+    PXOPT_COPY_S64(config->args, where, "-chip_imfile_id", "chipImfile.chip_imfile_id", "==");
     PXOPT_COPY_STR(config->args, where, "-class_id", "chipProcessedImfile.class_id", "==");
     PXOPT_COPY_STR(config->args, where, "-reduction", "chipRun.reduction", "==");
@@ -542,5 +542,5 @@
     if (where && psListLength(where->list)) {
         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
-        psStringAppend(&query, " AND %s", whereClause);
+        psStringAppend(&query, " WHERE %s", whereClause);
         psFree(whereClause);
     }
Index: trunk/ippTools/src/chiptoolConfig.c
===================================================================
--- trunk/ippTools/src/chiptoolConfig.c	(revision 21237)
+++ trunk/ippTools/src/chiptoolConfig.c	(revision 21308)
@@ -150,5 +150,6 @@
     // -processedimfile
     psMetadata *processedimfileArgs = psMetadataAlloc();
-    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,         "define chip ID", 0);
+    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,         "search by  chip ID", 0);
+    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-chip_imfile_id",  0,  "search by chip_file_id", 0);
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-class_id",           0, "search by class ID", NULL);
     psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-reduction",          0, "search by reduction class", NULL);
Index: trunk/ippTools/src/difftool.c
===================================================================
--- trunk/ippTools/src/difftool.c	(revision 21237)
+++ trunk/ippTools/src/difftool.c	(revision 21308)
@@ -239,5 +239,6 @@
             warp2 ? warp2 : PS_MAX_S64, // defined or NULL
             stack2 ? stack2 : PS_MAX_S64, // defined or NULL
-            tess_id
+            tess_id,
+            0                             // diff_skyfile_id
         )) {
         if (!psDBRollback(config->dbh)) {
@@ -532,5 +533,4 @@
                            good_frac,
                            code,
-                           0,       // diff_image_id
                            0        // magic_ds_id
           )) {
@@ -568,5 +568,5 @@
     PXOPT_COPY_S64(config->args, where,  "-diff_id", "diffSkyfile.diff_id", "==");
     PXOPT_COPY_STR(config->args, where, "-skycell_id", "diffInputSkyfile.skycell_id", "==");
-    PXOPT_COPY_S64(config->args, where,  "-diff_image_id", "diffSkyfile.diff_image_id", "==");
+    PXOPT_COPY_S64(config->args, where,  "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "==");
     PXOPT_COPY_STR(config->args, where, "-tess_id", "diffSkyfile.tess_id", "==");
     PXOPT_COPY_S16(config->args, where, "-code", "diffSkyfile.fault", "==");
@@ -834,5 +834,6 @@
             template_warp_id,
             template_stack_id,
-            tess_id
+            tess_id,
+            0
         )) {
         if (!psDBRollback(config->dbh)) {
Index: trunk/ippTools/src/difftoolConfig.c
===================================================================
--- trunk/ippTools/src/difftoolConfig.c	(revision 21237)
+++ trunk/ippTools/src/difftoolConfig.c	(revision 21308)
@@ -115,5 +115,5 @@
     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,            "search by diff ID", 0);
     psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-skycell_id",  0,       "define skycell ID", NULL);
-    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_image_id", 0,      "search by diff_image_id ID", 0);
+    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_skyfile_id", 0,    "search by diff_skyfile_id ID", 0);
     psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL, "-tess_id",  0,            "define tessellation ID", NULL);
     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "define exposure ID", 0);
Index: trunk/ippTools/src/pxchip.c
===================================================================
--- trunk/ippTools/src/pxchip.c	(revision 21237)
+++ trunk/ippTools/src/pxchip.c	(revision 21308)
@@ -235,4 +235,10 @@
     PS_ASSERT_PTR_NON_NULL(config, false);
 
+    if (!psDBTransaction(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
+    }
+
+
     // create a chipRun
     if (!chipRunInsert(config->dbh,
@@ -249,9 +255,33 @@
             end_stage)
     ) {
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error failed to rollback transaction");
+        }
         psError(PS_ERR_UNKNOWN, false, "database error");
         return 0;
     }
 
-    return psDBLastInsertID(config->dbh);
-}
-
+    psS64 chip_id =  psDBLastInsertID(config->dbh);
+
+    // Create rows in chipImfile table for each input exposure. 
+    // This creates the chip_image_id values
+    psString query = "INSERT INTO chipImfile "
+                     "SELECT %" PRId64 ", class_id, 0 FROM rawImfile WHERE exp_id = %" PRId64;
+
+    if (!p_psDBRunQuery(config->dbh, query, chip_id, exp_id)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        // rollback
+        if (!psDBRollback(config->dbh)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+        }
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return 0;
+    }
+    if (!psDBCommit(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return 0;
+    }
+    
+    return chip_id;
+}
+
Index: trunk/ippTools/src/warptool.c
===================================================================
--- trunk/ippTools/src/warptool.c	(revision 21237)
+++ trunk/ippTools/src/warptool.c	(revision 21308)
@@ -681,4 +681,5 @@
 {
     unsigned int nFail = 0;
+    psMetadata *imfiles = psMetadataAlloc();
     psMetadata *skycells = psMetadataConfigRead(NULL, &nFail, mapfile, false);
     if (!skycells) {
@@ -689,4 +690,5 @@
         psError(PS_ERR_UNKNOWN, false, "there were %d errors parsing mapfile: %s", nFail, mapfile);
         psFree(skycells);
+        psFree(imfiles);
         return false;
     }
@@ -699,4 +701,5 @@
             psFree(iter);
             psFree(skycells);
+            psFree(imfiles);
             return false;
         }
@@ -710,6 +713,8 @@
             psFree(iter);
             psFree(skycells);
-            return false;
-        }
+            psFree(imfiles);
+            return false;
+        }
+        psMetadataAddS64(imfiles, PS_LIST_TAIL, row->skycell_id, PS_META_REPLACE, "", row->warp_id);
 
         if (!warpSkyCellMapInsertObject(config->dbh, row)) {
@@ -726,11 +731,27 @@
             psFree(iter);
             psFree(skycells);
+            psFree(imfiles);
             return false;
         }
 
         psFree(row);
+    }
+    psFree(iter);
+
+    // create warp_skyfile_ids for the output skyfiles
+    psString query = "INSERT INTO warpImfile VALUES(%" PRId64 ", '%s', 0)";
+    iter = psMetadataIteratorAlloc(imfiles, 0, NULL);
+    while ((item = psMetadataGetAndIncrement(iter))) {
+        psString skycell_id = item->name;
+        psS64 warp_id = item->data.S64;
+
+        if (!p_psDBRunQuery(config->dbh, query, warp_id, skycell_id)) {
+            psError(PS_ERR_UNKNOWN, false, "database error");
+            return false;
+        }
     }
     psFree(iter);
     psFree(skycells);
+    psFree(imfiles);
 
     return true;
@@ -940,5 +961,4 @@
                            !accept,
                            code,
-                           0,           // warp_image_id
                            0            // magic_ds_id
         )) {
