Index: /branches/eam_branches/ippTools.20200226/share/Makefile.am
===================================================================
--- /branches/eam_branches/ippTools.20200226/share/Makefile.am	(revision 41294)
+++ /branches/eam_branches/ippTools.20200226/share/Makefile.am	(revision 41295)
@@ -426,4 +426,6 @@
 	stacktool_revertsummary.sql \
 	stacktool_summary.sql \
+	stacktool_addexternal.sql \
+	stacktool_insertexternal_link.sql \
 	staticskytool_definebyquery_select.sql \
 	staticskytool_definebyquery_select_by_dg.sql \
Index: /branches/eam_branches/ippTools.20200226/share/stacktool_addexternal.sql
===================================================================
--- /branches/eam_branches/ippTools.20200226/share/stacktool_addexternal.sql	(revision 41294)
+++ /branches/eam_branches/ippTools.20200226/share/stacktool_addexternal.sql	(revision 41295)
@@ -1,3 +1,3 @@
 
-INSERT into stackExtCamera
- (ext_camera_id, ext_camera_name) = (0, '@EXT_CAMERA@')
+INSERT INTO stackExternalCamera
+ (ext_camera_id, ext_camera) VALUES (0, '@EXT_CAMERA@')
Index: /branches/eam_branches/ippTools.20200226/share/stacktool_insertexternal_link.sql
===================================================================
--- /branches/eam_branches/ippTools.20200226/share/stacktool_insertexternal_link.sql	(revision 41295)
+++ /branches/eam_branches/ippTools.20200226/share/stacktool_insertexternal_link.sql	(revision 41295)
@@ -0,0 +1,3 @@
+
+INSERT INTO stackExternalStack
+ (stack_id, ext_stack_id, ext_camera_id) VALUES (%lld, %lld, %lld)
Index: /branches/eam_branches/ippTools.20200226/src/stacktool.c
===================================================================
--- /branches/eam_branches/ippTools.20200226/src/stacktool.c	(revision 41294)
+++ /branches/eam_branches/ippTools.20200226/src/stacktool.c	(revision 41295)
@@ -2149,31 +2149,25 @@
     unsigned int nFail;
 
-    int numImportTables = 2;
-
-    char tables[2] [80] = {"stackInputSkyfile", "stackSumSkyfile"};
-
     PS_ASSERT_PTR_NON_NULL(config, NULL);
 
     PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
+    PXOPT_LOOKUP_S64(ext_camera_id, config->args, "-ext_camera_id", true, false);
+
+    // optionally let the user change the filter:
+    PXOPT_LOOKUP_STR(new_filter, config->args, "-set_filter", false, false);
 
     psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
 
-#ifdef notdef
-    fprintf (stderr, "---- input ----\n");
-    psMetadataPrint (stderr, input, 1);
-#endif
-
-    // XXX do we need to do this?
-    if (!pxCheckImportVersion(config, input)) {
-	psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
-	return false;
-    }
-    psMetadataItem *item = psMetadataLookup (input, "stackRun");
-    psAssert (item, "entry not in input?");
-    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
-
-    psMetadataItem *entry = psListGet (item->data.list, 0);
+    // XXX for TEST: psMetadataPrint (stderr, input, 1);
+
+    psMetadataItem *itemRun = psMetadataLookup (input, "stackRun");
+    psAssert (itemRun, "entry not in input?");
+    psAssert (itemRun->type == PS_DATA_METADATA_MULTI, "entry not multi?");
+
+    psMetadataItem *entry = psListGet (itemRun->data.list, 0);
     assert (entry);
     assert (entry->type == PS_DATA_METADATA);
+
+    // grab the data for the stackRun & format as stackRunRow:
     stackRunRow *stackRun = stackRunObjectFromMetadata (entry->data.md);
 
@@ -2186,12 +2180,15 @@
 
     // update filter as well..
-    // stackRun->filter = new_filter;
-
+    if (new_filter) {
+      stackRun->filter = psMemIncrRefCounter(new_filter);
+    }
+
+    // start the transaction so we can ensure stackRun, stackSumSkyfile, stackExternalStack table entries are consistent
     if (!psDBTransaction(config->dbh)) {
 	psError(PS_ERR_UNKNOWN, false, "database error");
-	psFree(where);
 	return false;
     }
 
+    // now insert the new stackRun object:
     stackRunInsertObject (config->dbh, stackRun);
 
@@ -2199,17 +2196,24 @@
     psS64 stack_id = psDBLastInsertID(config->dbh);
 
-    if (!psDBCommit(config->dbh)) {
-	psError(PS_ERR_UNKNOWN, false, "database error");
-	psFree(list);
+    // add an entry in the stackExternalStack table:
+    psString query = pxDataGet("stacktool_insertexternal_link.sql");
+    if (!query) {
+	psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
 	return false;
     }
 
-    psMetadataItem *item = psMetadataLookup (input, "stackSumSkyfile");
-
-    psAssert (item, "entry not in input?");
-    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
-
-    for (int i = 0; i < item->data.list->n; i++) {
-	entry = psListGet (item->data.list, i);
+    if (!p_psDBRunQueryF(config->dbh, query, stack_id, ext_stack_id, ext_camera_id)) {
+	psError(PS_ERR_UNKNOWN,false, "database error");
+	return(NULL);
+    }
+
+    // now insert the stackSumSkyfile data
+    psMetadataItem *itemSum = psMetadataLookup (input, "stackSumSkyfile");
+
+    psAssert (itemSum, "entry not in input?");
+    psAssert (itemSum->type == PS_DATA_METADATA_MULTI, "entry not multi?");
+
+    for (int i = 0; i < itemSum->data.list->n; i++) {
+	entry = psListGet (itemSum->data.list, i);
 	assert (entry);
 	assert (entry->type == PS_DATA_METADATA);
@@ -2222,4 +2226,9 @@
 	// fprintf (stdout, "---- row %d ----\n", i);
 	// psMetadataPrint (stderr, entry->data.md, 1);
+    }
+
+    if (!psDBCommit(config->dbh)) {
+        psError(PS_ERR_UNKNOWN, false, "database error");
+        return false;
     }
 
@@ -2243,5 +2252,4 @@
     if (!psDBTransaction(config->dbh)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(where);
         return false;
     }
@@ -2249,5 +2257,4 @@
     if (!p_psDBRunQuery(config->dbh, query)) {
 	psError(PS_ERR_UNKNOWN,false, "database error");
-	psFree(select);
 	return(NULL);
     }
@@ -2258,5 +2265,4 @@
     if (!psDBCommit(config->dbh)) {
         psError(PS_ERR_UNKNOWN, false, "database error");
-        psFree(list);
         return false;
     }
Index: /branches/eam_branches/ippTools.20200226/src/stacktoolConfig.c
===================================================================
--- /branches/eam_branches/ippTools.20200226/src/stacktoolConfig.c	(revision 41294)
+++ /branches/eam_branches/ippTools.20200226/src/stacktoolConfig.c	(revision 41295)
@@ -338,5 +338,6 @@
     psMetadata *importexternalArgs = psMetadataAlloc();
     psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
-    psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-ext_camera",  0,      "external stacks come from this camera (required)", NULL);
+    psMetadataAddS64(importexternalArgs, PS_LIST_TAIL, "-ext_camera_id",  0,   "external stacks come from this camera (required)", 0);
+    psMetadataAddStr(importexternalArgs, PS_LIST_TAIL, "-set_filter",  0,      "replace the filter names with this value", NULL);
 
     // -addexternalcamera
