IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 23310


Ignore:
Timestamp:
Mar 12, 2009, 3:42:47 PM (17 years ago)
Author:
giebink
Message:

added -exportrun and -importrun

Location:
trunk/ippTools/src
Files:
30 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/camtool.c

    r21443 r23310  
    4444static bool pendingcleanupexpMode(pxConfig *config);
    4545static bool donecleanupMode(pxConfig *config);
     46static bool exportrunMode(pxConfig *config);
     47static bool importrunMode(pxConfig *config);
    4648
    4749# define MODECASE(caseName, func) \
     
    7779        MODECASE(CAMTOOL_MODE_PENDINGCLEANUPEXP,    pendingcleanupexpMode);
    7880        MODECASE(CAMTOOL_MODE_DONECLEANUP,          donecleanupMode);
     81        MODECASE(CAMTOOL_MODE_EXPORTRUN,            exportrunMode);
     82        MODECASE(CAMTOOL_MODE_IMPORTRUN,            importrunMode);
    7983        default:
    8084            psAbort("invalid option (this should not happen)");
     
    10811085    return true;
    10821086}
     1087
     1088bool exportrunMode(pxConfig *config)
     1089{
     1090  typedef struct ExportTable {
     1091    char tableName[80];
     1092    char sqlFilename[80];
     1093  } ExportTable;
     1094 
     1095  int numExportTables = 2;
     1096
     1097  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1098
     1099  PXOPT_LOOKUP_S64(det_id, config->args, "-cam_id", true,  false);
     1100  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1101  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1102
     1103  FILE *f = fopen (outfile, "w");
     1104  if (f == NULL) {
     1105    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1106    return false;
     1107  }
     1108
     1109  psMetadata *where = psMetadataAlloc();
     1110  PXOPT_COPY_S64(config->args, where, "-cam_id", "cam_id", "==");
     1111
     1112  ExportTable tables [] = {
     1113    {"camRun", "camtool_export_run.sql"},
     1114    {"camProcessedExp", "camtool_export_processed_exp.sql"},
     1115  };
     1116
     1117  for (int i=0; i < numExportTables; i++) {
     1118    psString query = pxDataGet(tables[i].sqlFilename);
     1119    if (!query) {
     1120      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1121      return false;
     1122    }
     1123
     1124    if (where && psListLength(where->list)) {
     1125      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1126      psStringAppend(&query, " %s", whereClause);
     1127      psFree(whereClause);
     1128    }
     1129
     1130    // treat limit == 0 as "no limit"
     1131    if (limit) {
     1132      psString limitString = psDBGenerateLimitSQL(limit);
     1133      psStringAppend(&query, " %s", limitString);
     1134      psFree(limitString);
     1135    }
     1136
     1137    if (!p_psDBRunQuery(config->dbh, query)) {
     1138      psError(PS_ERR_UNKNOWN, false, "database error");
     1139      psFree(query);
     1140      return false;
     1141    }
     1142    psFree(query);
     1143
     1144    psArray *output = p_psDBFetchResult(config->dbh);
     1145    if (!output) {
     1146      psError(PS_ERR_UNKNOWN, false, "database error");
     1147      return false;
     1148    }
     1149    if (!psArrayLength(output)) {
     1150      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1151      psFree(output);
     1152      return true;
     1153    }
     1154
     1155    // we must write the export table in non-simple (true) format
     1156    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1157      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1158      psFree(output);
     1159      return false;
     1160    }
     1161    psFree(output);
     1162  }
     1163
     1164  fclose (f);
     1165
     1166  return true;
     1167}
     1168
     1169bool importrunMode(pxConfig *config)
     1170{
     1171  unsigned int nFail;
     1172
     1173  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1174 
     1175  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1176
     1177  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1178
     1179  fprintf (stdout, "---- input ----\n");
     1180  psMetadataPrint (stderr, input, 1);
     1181
     1182  psMetadataItem *item = psMetadataLookup (input, "camRun");
     1183  psAssert (item, "entry not in input?");
     1184  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1185 
     1186  psMetadataItem *entry = psListGet (item->data.list, 0);
     1187  assert (entry);
     1188  assert (entry->type == PS_DATA_METADATA);
     1189  camRunRow *camRun = camRunObjectFromMetadata (entry->data.md);
     1190  camRunInsertObject (config->dbh, camRun);
     1191
     1192  // fprintf (stdout, "---- cam run ----\n");
     1193  // psMetadataPrint (stderr, entry->data.md, 1);
     1194 
     1195  item = psMetadataLookup (input, "camProcessedImfile");
     1196  psAssert (item, "entry not in input?");
     1197  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1198
     1199  for (int i = 0; i < item->data.list->n; i++) {
     1200    psMetadataItem *entry = psListGet (item->data.list, i);
     1201    assert (entry);
     1202    assert (entry->type == PS_DATA_METADATA);
     1203    camProcessedExpRow *camProcessedExp = camProcessedExpObjectFromMetadata (entry->data.md);
     1204    camProcessedExpInsertObject (config->dbh, camProcessedExp);
     1205
     1206    // fprintf (stdout, "---- row %d ----\n", i);
     1207    // psMetadataPrint (stderr, entry->data.md, 1);
     1208  }
     1209
     1210  return true;
     1211}
  • trunk/ippTools/src/camtool.h

    r19092 r23310  
    3939    CAMTOOL_MODE_PENDINGCLEANUPEXP,
    4040    CAMTOOL_MODE_DONECLEANUP,
     41    CAMTOOL_MODE_EXPORTRUN,
     42    CAMTOOL_MODE_IMPORTRUN
    4143} camtoolMode;
    4244
  • trunk/ippTools/src/camtoolConfig.c

    r20276 r23310  
    228228    psMetadataAddU64(donecleanupArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    229229
     230    // -exportrun
     231    psMetadata *exportrunArgs = psMetadataAlloc();
     232    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-cam_id", 0,          "export this camera ID (required)", 0);
     233    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     234    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     235
     236    // -importrun
     237    psMetadata *importrunArgs = psMetadataAlloc();
     238    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     239
     240
    230241    psMetadata *argSets = psMetadataAlloc();
    231242    psMetadata *modes = psMetadataAlloc();
     
    245256    PXOPT_ADD_MODE("-pendingcleanupexp",    "show exposures for cleanup runs",      CAMTOOL_MODE_PENDINGCLEANUPEXP, pendingcleanupexpArgs);
    246257    PXOPT_ADD_MODE("-donecleanup",          "show runs that have been cleaned",     CAMTOOL_MODE_DONECLEANUP,       donecleanupArgs);
     258   PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", CAMTOOL_MODE_EXPORTRUN, exportrunArgs);
     259    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           CAMTOOL_MODE_IMPORTRUN, importrunArgs);
    247260
    248261    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/chiptool.c

    r23281 r23310  
    4242static bool revertprocessedimfileMode(pxConfig *config);
    4343static bool updateprocessedimfileMode(pxConfig *config);
    44 static bool advanceexpMode(pxConfig *config);
     44static bool promoteexpMode(pxConfig *config);
    4545static bool blockMode(pxConfig *config);
    4646static bool maskedMode(pxConfig *config);
     
    5252static bool runMode(pxConfig *config);
    5353static bool tocleanedimfileMode(pxConfig *config);
    54 // static bool tocleanedimfile_from_scrubbedMode(pxConfig *config);
    5554static bool tofullimfileMode(pxConfig *config);
    5655static bool topurgedimfileMode(pxConfig *config);
    5756static bool exportrunMode(pxConfig *config);
    5857static bool importrunMode(pxConfig *config);
    59 static bool change_imfile_data_state(pxConfig *config, psString data_state, psString run_state);
    6058
    6159# define MODECASE(caseName, func) \
     
    8381        MODECASE(CHIPTOOL_MODE_REVERTPROCESSEDIMFILE,   revertprocessedimfileMode);
    8482        MODECASE(CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,   updateprocessedimfileMode);
    85         MODECASE(CHIPTOOL_MODE_ADVANCEEXP,              advanceexpMode);
     83        MODECASE(CHIPTOOL_MODE_PROMOTEEXP,              promoteexpMode);
    8684        MODECASE(CHIPTOOL_MODE_BLOCK,                   blockMode);
    8785        MODECASE(CHIPTOOL_MODE_MASKED,                  maskedMode);
     
    9391        MODECASE(CHIPTOOL_MODE_RUN,                     runMode);
    9492        MODECASE(CHIPTOOL_MODE_TOCLEANEDIMFILE,         tocleanedimfileMode);
    95         // MODECASE(CHIPTOOL_MODE_TOCLEANEDIMFILE_FROM_SCRUBBED, tocleanedimfile_from_scrubbedMode);
    9693        MODECASE(CHIPTOOL_MODE_TOFULLIMFILE,            tofullimfileMode);
    9794        MODECASE(CHIPTOOL_MODE_TOPURGEDIMFILE,          topurgedimfileMode);
     
    652649    PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
    653650    PXOPT_COPY_STR(config->args, where, "-class_id", "class_id", "==");
    654     PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
    655     PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
    656 
    657     if (state && code) {
    658         psError(PS_ERR_UNKNOWN, true, "only one of -set_state and -code may be supplied");
    659         return false;
    660     }
    661 
    662     if (state) {
    663       // make sure that the state string is valid
    664       if (!pxIsValidState(state)) {
    665         psError(PXTOOLS_ERR_DATA, false, "%s is not a valid state", state);
    666         return false;
    667       }
    668       if (!change_imfile_data_state(config, state, "unknown")) {
     651    PXOPT_LOOKUP_S16(code, config->args, "-code", true, false);
     652
     653    if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", where, code)) {
    669654        psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
    670655        return false;
    671       }
    672       return true;
    673     }
    674 
    675     if (code) {
    676       if (!pxSetFaultCode(config->dbh, "chipProcessedImfile", where, code)) {
    677         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
    678         return false;
    679       }
    680       psFree(where);
    681       return true;
    682     }
    683 
    684     psError(PS_ERR_UNKNOWN, true, "one of -set_state or -code must be supplied");
    685     return false;
     656    }
     657    psFree(where);
     658
     659    return true;
    686660}
    687661
     
    11041078
    11051079
    1106 static bool advanceexpMode(pxConfig *config)
     1080static bool promoteexpMode(pxConfig *config)
    11071081{
    11081082    PS_ASSERT_PTR_NON_NULL(config, false);
     
    12191193// shared code for the modes -tocleanedimfile -tofullimfile -topurgedimfile
    12201194
    1221 // XXX EAM : this function was enforcing only certain transitions with the SQL.  However,
    1222 // this is getting fairly messy now that we have added a few additional target and
    1223 // destination states.  I'm disabling these restrictions for now; is there are better way
    1224 // to enforce the allowed state transitions?
    1225 
    12261195static bool change_imfile_data_state(pxConfig *config, psString data_state, psString run_state)
    12271196{
     
    12391208    }
    12401209
    1241     // XXX this feature is disabled (run_state is ignored)
    12421210    // note only updates if chipRun.state = run_state
    1243 
    1244     if (!p_psDBRunQueryF(config->dbh, query, data_state, chip_id, class_id)) {
     1211    if (!p_psDBRunQueryF(config->dbh, query, data_state, chip_id, class_id, run_state)) {
    12451212        psError(PS_ERR_UNKNOWN, false, "database error");
    12461213        // rollback
     
    12891256bool exportrunMode(pxConfig *config)
    12901257{
    1291     PS_ASSERT_PTR_NON_NULL(config, NULL);
    1292 
    1293     PXOPT_LOOKUP_S64(chip_id, config->args, "-chip_id", true,  false);
    1294     PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
    1295     PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
    1296 
    1297     FILE *f = fopen (outfile, "w");
    1298     if (f == NULL) {
    1299         psError(PS_ERR_UNKNOWN, false, "failed to open output file");
    1300         return false;
    1301     }
    1302 
    1303     psMetadata *where = psMetadataAlloc();
    1304     PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
    1305 
    1306     // *** extract the chipRun in this section ***
    1307     psString query = pxDataGet("chiptool_export_run.sql");
     1258  typedef struct ExportTable {
     1259    char tableName[80];
     1260    char sqlFilename[80];
     1261  } ExportTable;
     1262 
     1263  int numExportTables = 3;
     1264
     1265  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1266
     1267  PXOPT_LOOKUP_S64(det_id, config->args, "-chip_id", true,  false);
     1268  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1269  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1270
     1271  FILE *f = fopen (outfile, "w");
     1272  if (f == NULL) {
     1273    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1274    return false;
     1275  }
     1276
     1277  psMetadata *where = psMetadataAlloc();
     1278  PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
     1279
     1280  ExportTable tables [] = {
     1281    {"chipRun", "chiptool_export_run.sql"},
     1282    {"chipImfile", "chiptool_export_imfile.sql"},
     1283    {"chipProcessedImfile", "chiptool_export_processed_imfile.sql"},
     1284  };
     1285
     1286
     1287  for (int i=0; i < numExportTables; i++) {
     1288    psString query = pxDataGet(tables[i].sqlFilename);
    13081289    if (!query) {
    1309         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    1310         return false;
     1290      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1291      return false;
    13111292    }
    13121293
    13131294    if (where && psListLength(where->list)) {
    1314         psString whereClause = psDBGenerateWhereSQL(where, NULL);
    1315         psStringAppend(&query, " %s", whereClause);
    1316         psFree(whereClause);
     1295      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1296      psStringAppend(&query, " %s", whereClause);
     1297      psFree(whereClause);
    13171298    }
    13181299
    13191300    // treat limit == 0 as "no limit"
    13201301    if (limit) {
    1321         psString limitString = psDBGenerateLimitSQL(limit);
    1322         psStringAppend(&query, " %s", limitString);
    1323         psFree(limitString);
     1302      psString limitString = psDBGenerateLimitSQL(limit);
     1303      psStringAppend(&query, " %s", limitString);
     1304      psFree(limitString);
    13241305    }
    13251306
    13261307    if (!p_psDBRunQuery(config->dbh, query)) {
    1327         psError(PS_ERR_UNKNOWN, false, "database error");
    1328         psFree(query);
    1329         return false;
     1308      psError(PS_ERR_UNKNOWN, false, "database error");
     1309      psFree(query);
     1310      return false;
    13301311    }
    13311312    psFree(query);
     
    13331314    psArray *output = p_psDBFetchResult(config->dbh);
    13341315    if (!output) {
    1335         psError(PS_ERR_UNKNOWN, false, "database error");
    1336         return false;
     1316      psError(PS_ERR_UNKNOWN, false, "database error");
     1317      return false;
    13371318    }
    13381319    if (!psArrayLength(output)) {
    1339         psTrace("chiptool", PS_LOG_INFO, "no rows found");
    1340         psFree(output);
    1341         return true;
     1320      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1321      psFree(output);
     1322      return true;
    13421323    }
    13431324
    13441325    // we must write the export table in non-simple (true) format
    1345     if (!ippdbPrintMetadatas(f, output, "chipRun", true)) {
    1346         psError(PS_ERR_UNKNOWN, false, "failed to print array");
    1347         psFree(output);
    1348         return false;
     1326    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1327      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1328      psFree(output);
     1329      return false;
    13491330    }
    13501331    psFree(output);
    1351 
    1352     // *** extract the chipProcessedImfile entries in this section ***
    1353     query = pxDataGet("chiptool_export_imfiles.sql");
    1354     if (!query) {
    1355         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    1356         return false;
    1357     }
    1358 
    1359     if (where && psListLength(where->list)) {
    1360         psString whereClause = psDBGenerateWhereSQL(where, NULL);
    1361         psStringAppend(&query, " %s", whereClause);
    1362         psFree(whereClause);
    1363     }
    1364     psFree(where);
    1365 
    1366     // treat limit == 0 as "no limit"
    1367     if (limit) {
    1368         psString limitString = psDBGenerateLimitSQL(limit);
    1369         psStringAppend(&query, " %s", limitString);
    1370         psFree(limitString);
    1371     }
    1372 
    1373     if (!p_psDBRunQuery(config->dbh, query)) {
    1374         psError(PS_ERR_UNKNOWN, false, "database error");
    1375         psFree(query);
    1376         return false;
    1377     }
    1378     psFree(query);
    1379 
    1380     output = p_psDBFetchResult(config->dbh);
    1381     if (!output) {
    1382         psError(PS_ERR_UNKNOWN, false, "database error");
    1383         return false;
    1384     }
    1385     if (!psArrayLength(output)) {
    1386         psTrace("chiptool", PS_LOG_INFO, "no rows found");
    1387         psFree(output);
    1388         return true;
    1389     }
    1390 
    1391     // we must write the export table in non-simple (true) format
    1392     if (!ippdbPrintMetadatas(f, output, "chipProcessedImfiles", true)) {
    1393         psError(PS_ERR_UNKNOWN, false, "failed to print array");
    1394         psFree(output);
    1395         return false;
    1396     }
    1397     psFree(output);
    1398 
    1399     fclose (f);
    1400 
    1401     return true;
    1402 }
    1403 
     1332  }
     1333
     1334  fclose (f);
     1335
     1336  return true;
     1337}
    14041338
    14051339bool importrunMode(pxConfig *config)
    14061340{
    14071341  unsigned int nFail;
     1342 
     1343  int numImportTables = 2;
     1344 
     1345  char tables[2] [80] = {"chipImfile", "chipProcessedImfile"};
    14081346
    14091347  PS_ASSERT_PTR_NON_NULL(config, NULL);
     
    14161354  psMetadataPrint (stderr, input, 1);
    14171355
    1418   psMetadataItem *chipRunItem = psMetadataLookup (input, "chipRun");
    1419   psAssert (chipRunItem, "entry not in input?");
    1420   psAssert (chipRunItem->type == PS_DATA_METADATA_MULTI, "entry not multi?");
    1421  
    1422   psMetadataItem *chipRunEntry = psListGet (chipRunItem->data.list, 0);
    1423   assert (chipRunEntry);
    1424   assert (chipRunEntry->type == PS_DATA_METADATA);
    1425   chipRunRow *chipRun = chipRunObjectFromMetadata (chipRunEntry->data.md);
    1426   chipRunInsertObject (config->dbh, chipRun);
    1427 
    1428   // fprintf (stdout, "---- chip run ----\n");
    1429   // psMetadataPrint (stderr, chipRunEntry->data.md, 1);
    1430 
    1431   psMetadataItem *item = psMetadataLookup (input, "chipProcessedImfiles");
     1356  psMetadataItem *item = psMetadataLookup (input, "chipRun");
    14321357  psAssert (item, "entry not in input?");
    14331358  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
    14341359
    1435   // XXX would be better to use the iterator?
    1436   for (int i = 0; i < item->data.list->n; i++) {
    1437     psMetadataItem *entry = psListGet (item->data.list, i);
    1438     assert (entry);
    1439     assert (entry->type == PS_DATA_METADATA);
    1440     chipProcessedImfileRow *chipProcessedImfile = chipProcessedImfileObjectFromMetadata (entry->data.md);
    1441     chipProcessedImfileInsertObject (config->dbh, chipProcessedImfile);
    1442 
    1443     // fprintf (stdout, "---- row %d ----\n", i);
    1444     // psMetadataPrint (stderr, entry->data.md, 1);
     1360  psMetadataItem *entry = psListGet (item->data.list, 0);
     1361  assert (entry);
     1362  assert (entry->type == PS_DATA_METADATA);
     1363  chipRunRow *chipRun = chipRunObjectFromMetadata (entry->data.md);
     1364  chipRunInsertObject (config->dbh, chipRun);
     1365
     1366  // fprintf (stdout, "---- chip run ----\n");
     1367  // psMetadataPrint (stderr, entry->data.md, 1);
     1368 
     1369  for (int i = 0; i < numImportTables; i++) {
     1370    psMetadataItem *item = psMetadataLookup (input, tables[i]);
     1371    psAssert (item, "entry not in input?");
     1372    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1373 
     1374    switch (i) {
     1375      case 0:
     1376        for (int i = 0; i < item->data.list->n; i++) {
     1377          psMetadataItem *entry = psListGet (item->data.list, i);
     1378          assert (entry);
     1379          assert (entry->type == PS_DATA_METADATA);
     1380          chipImfileRow *chipImfile = chipImfileObjectFromMetadata (entry->data.md);
     1381          chipImfileInsertObject (config->dbh, chipImfile);
     1382
     1383          // fprintf (stdout, "---- row %d ----\n", i);
     1384          // psMetadataPrint (stderr, entry->data.md, 1);
     1385        }
     1386        break;
     1387       
     1388      case 1:
     1389        for (int i = 0; i < item->data.list->n; i++) {
     1390          psMetadataItem *entry = psListGet (item->data.list, i);
     1391          assert (entry);
     1392          assert (entry->type == PS_DATA_METADATA);
     1393          chipProcessedImfileRow *chipProcessedImfile = chipProcessedImfileObjectFromMetadata (entry->data.md);
     1394          chipProcessedImfileInsertObject (config->dbh, chipProcessedImfile);
     1395
     1396          // fprintf (stdout, "---- row %d ----\n", i);
     1397          // psMetadataPrint (stderr, entry->data.md, 1);
     1398        }
     1399        break;
     1400    }
    14451401  }
    14461402
  • trunk/ippTools/src/chiptool.h

    r23281 r23310  
    3232    CHIPTOOL_MODE_REVERTPROCESSEDIMFILE,
    3333    CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,
    34     CHIPTOOL_MODE_ADVANCEEXP,
     34    CHIPTOOL_MODE_PROMOTEEXP,
    3535    CHIPTOOL_MODE_BLOCK,
    3636    CHIPTOOL_MODE_MASKED,
     
    4343    CHIPTOOL_MODE_RUN,
    4444    CHIPTOOL_MODE_TOCLEANEDIMFILE,
    45     CHIPTOOL_MODE_TOCLEANEDIMFILE_FROM_SCRUBBED,
    4645    CHIPTOOL_MODE_TOFULLIMFILE,
    4746    CHIPTOOL_MODE_TOPURGEDIMFILE,
  • trunk/ippTools/src/chiptoolConfig.c

    r23281 r23310  
    172172    // -updateprocessedimfile
    173173    psMetadata *updateprocessedimfileArgs = psMetadataAlloc();
    174     psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-chip_id",    0, "search by chip ID", 0);
    175     psMetadataAddStr(updateprocessedimfileArgs,  PS_LIST_TAIL, "-class_id",  0, "search by class ID", NULL);
    176     psMetadataAddS16(updateprocessedimfileArgs, PS_LIST_TAIL, "-code",       0, "set fault code", 0);
    177     psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-set_state",  0, "set state", NULL);
    178 
    179     // -advanceexp
    180     psMetadata *advanceexpArgs = psMetadataAlloc();
    181     psMetadataAddS64(advanceexpArgs, PS_LIST_TAIL, "-chip_id",  0,          "search by chip ID", 0);
    182     psMetadataAddStr(advanceexpArgs, PS_LIST_TAIL, "-label",  0,            "advance exposures for specified label", NULL);
    183     psMetadataAddU64(advanceexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     174    psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-chip_id",  0,            "search by chip ID", 0);
     175    psMetadataAddStr(updateprocessedimfileArgs,  PS_LIST_TAIL, "-class_id",           0, "search by class ID", NULL);
     176    psMetadataAddS16(updateprocessedimfileArgs, PS_LIST_TAIL, "-code",  0,            "set fault code (required)", 0);
     177
     178    // -promoteexp
     179    psMetadata *promoteexpArgs = psMetadataAlloc();
     180    psMetadataAddS64(promoteexpArgs, PS_LIST_TAIL, "-chip_id",  0,          "search by chip ID", 0);
     181    psMetadataAddStr(promoteexpArgs, PS_LIST_TAIL, "-label",  0,            "promote exposures for specified label", NULL);
     182    psMetadataAddU64(promoteexpArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    184183
    185184    // -block
     
    235234    psMetadataAddStr(tocleanedimfileArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
    236235
    237 //    // -tocleanedimfile_from_scrubbed
    238 //    psMetadata *tocleanedimfile_from_scrubbedArgs = psMetadataAlloc();
    239 //    psMetadataAddS64(tocleanedimfile_from_scrubbedArgs, PS_LIST_TAIL, "-chip_id", 0,          "chip ID to update", 0);
    240 //    psMetadataAddStr(tocleanedimfile_from_scrubbedArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
    241 //
    242236    // -tofullimfile
    243237    psMetadata *tofullimfileArgs = psMetadataAlloc();
     
    271265    PXOPT_ADD_MODE("-updateprocessedimfile","change procesed imfile properties",    CHIPTOOL_MODE_UPDATEPROCESSEDIMFILE,updateprocessedimfileArgs);
    272266    PXOPT_ADD_MODE("-revertprocessedimfile","undo a processed imfile",              CHIPTOOL_MODE_REVERTPROCESSEDIMFILE,revertprocessedimfileArgs);
    273     PXOPT_ADD_MODE("-advanceexp",           "advance completed exposures",          CHIPTOOL_MODE_ADVANCEEXP,           advanceexpArgs);
     267    PXOPT_ADD_MODE("-promoteexp",           "promote completed exposures",          CHIPTOOL_MODE_PROMOTEEXP,           promoteexpArgs);
    274268    PXOPT_ADD_MODE("-block",                "set a label block",                    CHIPTOOL_MODE_BLOCK,                blockArgs);
    275269    PXOPT_ADD_MODE("-masked",               "show blocked labels",                  CHIPTOOL_MODE_MASKED,               maskedArgs);
     
    281275    PXOPT_ADD_MODE("-run",                  "show runs",                            CHIPTOOL_MODE_RUN,                  runArgs);
    282276    PXOPT_ADD_MODE("-tocleanedimfile",      "set imfile state to cleaned",          CHIPTOOL_MODE_TOCLEANEDIMFILE,      tocleanedimfileArgs);
    283     //    PXOPT_ADD_MODE("-tocleanedimfile_from_scrubbed", "set imfile state to cleaned (for goto_scrubbed)", CHIPTOOL_MODE_TOCLEANEDIMFILE_FROM_SCRUBBED, tocleanedimfile_from_scrubbedArgs);
    284277    PXOPT_ADD_MODE("-tofullimfile",         "set imfile state to full",              CHIPTOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
    285278    PXOPT_ADD_MODE("-topurgedimfile",       "set imfile state to purged",            CHIPTOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
  • trunk/ippTools/src/dettool.c

    r23259 r23310  
    2828static bool inputMode(pxConfig *config);
    2929static bool rawMode(pxConfig *config);
     30static bool exportrunMode(pxConfig *config);
     31static bool importrunMode(pxConfig *config);
    3032
    3133// run
     
    4648    } \
    4749    break;
    48 
     50/*
     51typedef struct ExportTable {
     52    char tableName[80];
     53    char sqlFilename[80];
     54} ExportTable;
     55*/
    4956int main(int argc, char **argv)
    5057{
     
    146153        MODECASE(DETTOOL_MODE_REGISTER_DETREND, register_detrendMode);
    147154        MODECASE(DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileMode);
     155        MODECASE(DETTOOL_MODE_EXPORTRUN,               exportrunMode);
     156        MODECASE(DETTOOL_MODE_IMPORTRUN,               importrunMode);
    148157        default:
    149158            psAbort("invalid option (this should not happen)");
     
    578587      // generate a random-valued vector, return an index sorted by the random values
    579588      psVector *randomVector = psVectorAlloc(detrendExps->n, PS_TYPE_F32); // random values
    580       psRandom *rng = psRandomAllocSpecific(PS_RANDOM_TAUS, 0);
     589      /*
     590       * change due to PAP work on random number generator?
     591       * psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS, 0);
     592       */
     593      psRandom *rng = psRandomAlloc(PS_RANDOM_TAUS);
    581594      for (int i = 0; i < randomVector->n; i++) {
    582595        randomVector->data.F32[i] = psRandomUniform(rng);
     
    19962009}
    19972010
     2011bool exportrunMode(pxConfig *config)
     2012{
     2013  typedef struct ExportTable {
     2014    char tableName[80];
     2015    char sqlFilename[80];
     2016  } ExportTable;
     2017 
     2018  int numExportTables = 12;
     2019
     2020  PS_ASSERT_PTR_NON_NULL(config, NULL);
     2021
     2022  PXOPT_LOOKUP_S64(det_id, config->args, "-det_id", true,  false);
     2023  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     2024  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     2025
     2026  FILE *f = fopen (outfile, "w");
     2027  if (f == NULL) {
     2028    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     2029    return false;
     2030  }
     2031
     2032  psMetadata *where = psMetadataAlloc();
     2033  PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
     2034
     2035  ExportTable tables [] = {
     2036    {"detInputExp", "dettool_export_input_exp.sql"},
     2037    {"detNormalizedExp", "dettool_export_normalized_exp.sql"},
     2038    {"detNormalizedImfile", "dettool_export_normalized_imfile.sql"},
     2039    {"detNormalizedStatImfile", "dettool_export_normalized_stat_imfile.sql"},
     2040    {"detProcessedExp", "dettool_export_processed_exp.sql"},
     2041    {"detProcessedImfile", "dettool_export_processed_imfile.sql"},
     2042    {"detRegisteredImfile", "dettool_export_registered_imfile.sql"},
     2043    {"detResidExp", "dettool_export_resid_exp.sql"},
     2044    {"detResidImfile", "dettool_export_resid_imfile.sql"},
     2045    {"detRun", "dettool_export_run.sql"},
     2046    {"detRunSummary", "dettool_export_run_summary.sql"},
     2047    {"detStackedImfile", "dettool_export_stacked_imfile.sql"},
     2048  };
     2049
     2050  for (int i=0; i < numExportTables; i++) {
     2051    psString query = pxDataGet(tables[i].sqlFilename);
     2052    if (!query) {
     2053      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     2054      return false;
     2055    }
     2056
     2057    if (where && psListLength(where->list)) {
     2058      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     2059      psStringAppend(&query, " %s", whereClause);
     2060      psFree(whereClause);
     2061    }
     2062
     2063    // treat limit == 0 as "no limit"
     2064    if (limit) {
     2065      psString limitString = psDBGenerateLimitSQL(limit);
     2066      psStringAppend(&query, " %s", limitString);
     2067      psFree(limitString);
     2068    }
     2069
     2070    if (!p_psDBRunQuery(config->dbh, query)) {
     2071      psError(PS_ERR_UNKNOWN, false, "database error");
     2072      psFree(query);
     2073      return false;
     2074    }
     2075    psFree(query);
     2076
     2077    psArray *output = p_psDBFetchResult(config->dbh);
     2078    if (!output) {
     2079      psError(PS_ERR_UNKNOWN, false, "database error");
     2080      return false;
     2081    }
     2082    if (!psArrayLength(output)) {
     2083      psTrace("chiptool", PS_LOG_INFO, "no rows found");
     2084      psFree(output);
     2085      return true;
     2086    }
     2087
     2088    // we must write the export table in non-simple (true) format
     2089    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     2090      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2091      psFree(output);
     2092      return false;
     2093    }
     2094    psFree(output);
     2095 
     2096  }
     2097
     2098  fclose (f);
     2099
     2100  return true;
     2101}
     2102
     2103bool importrunMode(pxConfig *config)
     2104{
     2105  unsigned int nFail;
     2106 
     2107  int numImportTables = 11;
     2108 
     2109  char tables[11] [80] = {"detInputExp", "detNormalizedExp",
     2110    "detNormalizedStatImfile", "detProcessedExp", "detProcessedImfile",
     2111    "detRegisteredImfile", "detResidExp", "detResidImfile",
     2112    "detNormalizedImfile", "detRunSummary", "detStackedImfile"};
     2113
     2114  PS_ASSERT_PTR_NON_NULL(config, NULL);
     2115 
     2116  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     2117
     2118  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     2119
     2120  fprintf (stdout, "---- input ----\n");
     2121  psMetadataPrint (stderr, input, 1);
     2122 
     2123  psMetadataItem *item = psMetadataLookup (input, "detRun");
     2124  psAssert (item, "entry not in input?");
     2125  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2126
     2127  psMetadataItem *entry = psListGet (item->data.list, 0);
     2128  assert (entry);
     2129  assert (entry->type == PS_DATA_METADATA);
     2130  detRunRow *detRun = detRunObjectFromMetadata (entry->data.md);
     2131  detRunInsertObject (config->dbh, detRun);
     2132 
     2133  // fprintf (stdout, "---- det run ----\n");
     2134  // psMetadataPrint (stderr, entry->data.md, 1);
     2135
     2136  for (int i = 0; i < numImportTables; i++) {
     2137    item = psMetadataLookup (input, tables[i]);
     2138    psAssert (item, "entry not in input?");
     2139    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     2140 
     2141    switch (i) {
     2142      case 0:
     2143        for (int i = 0; i < item->data.list->n; i++) {
     2144          entry = psListGet (item->data.list, i);
     2145          assert (entry);
     2146          assert (entry->type == PS_DATA_METADATA);
     2147          detInputExpRow *detInputExp = detInputExpObjectFromMetadata (entry->data.md);
     2148          detInputExpInsertObject (config->dbh, detInputExp);
     2149
     2150          // fprintf (stdout, "---- row %d ----\n", i);
     2151          // psMetadataPrint (stderr, entry->data.md, 1);
     2152        }
     2153        break;
     2154 
     2155      case 1:
     2156        for (int i = 0; i < item->data.list->n; i++) {
     2157          entry = psListGet (item->data.list, i);
     2158          assert (entry);
     2159          assert (entry->type == PS_DATA_METADATA);
     2160          detNormalizedExpRow *detNormalizedExp = detNormalizedExpObjectFromMetadata (entry->data.md);
     2161          detNormalizedExpInsertObject (config->dbh, detNormalizedExp);
     2162
     2163          // fprintf (stdout, "---- row %d ----\n", i);
     2164          // psMetadataPrint (stderr, entry->data.md, 1);
     2165        }
     2166        break;
     2167       
     2168      case 2:
     2169        for (int i = 0; i < item->data.list->n; i++) {
     2170          entry = psListGet (item->data.list, i);
     2171          assert (entry);
     2172          assert (entry->type == PS_DATA_METADATA);
     2173          detNormalizedStatImfileRow *detNormalizedStatImfile = detNormalizedStatImfileObjectFromMetadata (entry->data.md);
     2174          detNormalizedStatImfileInsertObject (config->dbh, detNormalizedStatImfile);
     2175
     2176          // fprintf (stdout, "---- row %d ----\n", i);
     2177          // psMetadataPrint (stderr, entry->data.md, 1);
     2178        }
     2179        break;
     2180 
     2181      case 3:
     2182        for (int i = 0; i < item->data.list->n; i++) {
     2183          entry = psListGet (item->data.list, i);
     2184          assert (entry);
     2185          assert (entry->type == PS_DATA_METADATA);
     2186          detProcessedExpRow *detProcessedExp =  detProcessedExpObjectFromMetadata (entry->data.md);
     2187          detProcessedExpInsertObject (config->dbh, detProcessedExp);
     2188
     2189          // fprintf (stdout, "---- row %d ----\n", i);
     2190          // psMetadataPrint (stderr, entry->data.md, 1);
     2191        }
     2192        break;
     2193       
     2194      case 4:
     2195        for (int i = 0; i < item->data.list->n; i++) {
     2196          entry = psListGet (item->data.list, i);
     2197          assert (entry);
     2198          assert (entry->type == PS_DATA_METADATA);
     2199          detProcessedImfileRow *detProcessedImfile =  detProcessedImfileObjectFromMetadata (entry->data.md);
     2200          detProcessedImfileInsertObject (config->dbh, detProcessedImfile);
     2201
     2202          // fprintf (stdout, "---- row %d ----\n", i);
     2203          // psMetadataPrint (stderr, entry->data.md, 1);
     2204        }
     2205        break;
     2206       
     2207      case 5:
     2208        for (int i = 0; i < item->data.list->n; i++) {
     2209          entry = psListGet (item->data.list, i);
     2210          assert (entry);
     2211          assert (entry->type == PS_DATA_METADATA);
     2212          detRegisteredImfileRow *detRegisteredImfile = detRegisteredImfileObjectFromMetadata (entry->data.md);
     2213          detRegisteredImfileInsertObject (config->dbh, detRegisteredImfile);
     2214
     2215          // fprintf (stdout, "---- row %d ----\n", i);
     2216          // psMetadataPrint (stderr, entry->data.md, 1);
     2217        }
     2218        break;
     2219       
     2220      case 6:
     2221        for (int i = 0; i < item->data.list->n; i++) {
     2222          entry = psListGet (item->data.list, i);
     2223          assert (entry);
     2224          assert (entry->type == PS_DATA_METADATA);
     2225          detResidExpRow *detResidExp = detResidExpObjectFromMetadata (entry->data.md);
     2226          detResidExpInsertObject (config->dbh, detResidExp);
     2227
     2228          // fprintf (stdout, "---- row %d ----\n", i);
     2229          // psMetadataPrint (stderr, entry->data.md, 1);
     2230        }
     2231        break;
     2232       
     2233      case 7:
     2234        for (int i = 0; i < item->data.list->n; i++) {
     2235          entry = psListGet (item->data.list, i);
     2236          assert (entry);
     2237          assert (entry->type == PS_DATA_METADATA);
     2238          detResidImfileRow *detResidImfile = detResidImfileObjectFromMetadata (entry->data.md);
     2239          detResidImfileInsertObject (config->dbh, detResidImfile);
     2240
     2241          // fprintf (stdout, "---- row %d ----\n", i);
     2242          // psMetadataPrint (stderr, entry->data.md, 1);
     2243        }
     2244        break;
     2245       
     2246      case 8:
     2247        for (int i = 0; i < item->data.list->n; i++) {
     2248          entry = psListGet (item->data.list, i);
     2249          assert (entry);
     2250          assert (entry->type == PS_DATA_METADATA);
     2251          detNormalizedImfileRow *detNormalizedImfile = detNormalizedImfileObjectFromMetadata (entry->data.md);
     2252          detNormalizedImfileInsertObject (config->dbh, detNormalizedImfile);
     2253
     2254          // fprintf (stdout, "---- row %d ----\n", i);
     2255          // psMetadataPrint (stderr, entry->data.md, 1);
     2256        }
     2257        break;
     2258       
     2259      case 9:
     2260        for (int i = 0; i < item->data.list->n; i++) {
     2261          entry = psListGet (item->data.list, i);
     2262          assert (entry);
     2263          assert (entry->type == PS_DATA_METADATA);
     2264          detRunSummaryRow *detRunSummary = detRunSummaryObjectFromMetadata (entry->data.md);
     2265          detRunSummaryInsertObject (config->dbh, detRunSummary);
     2266
     2267          // fprintf (stdout, "---- row %d ----\n", i);
     2268          // psMetadataPrint (stderr, entry->data.md, 1);
     2269        }
     2270        break;
     2271       
     2272      case 10:
     2273        for (int i = 0; i < item->data.list->n; i++) {
     2274          entry = psListGet (item->data.list, i);
     2275          assert (entry);
     2276          assert (entry->type == PS_DATA_METADATA);
     2277          detStackedImfileRow *detStackedImfile = detStackedImfileObjectFromMetadata (entry->data.md);
     2278          detStackedImfileInsertObject (config->dbh, detStackedImfile);
     2279
     2280          // fprintf (stdout, "---- row %d ----\n", i);
     2281          // psMetadataPrint (stderr, entry->data.md, 1);
     2282        }
     2283        break;
     2284    }
     2285  }
     2286
     2287  return true;
     2288}
     2289
    19982290#if 0
    19992291// XXX this function was left in commented as this method may be useful in the
  • trunk/ippTools/src/dettool.h

    r19814 r23310  
    114114    DETTOOL_MODE_RERUN,
    115115    DETTOOL_MODE_REGISTER_DETREND,
    116     DETTOOL_MODE_REGISTER_DETREND_IMFILE
     116    DETTOOL_MODE_REGISTER_DETREND_IMFILE,
     117
     118    DETTOOL_MODE_EXPORTRUN,
     119    DETTOOL_MODE_IMPORTRUN
    117120} dettoolMode;
    118121
  • trunk/ippTools/src/dettoolConfig.c

    r23229 r23310  
    7373    psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-time_begin",  0,            "detrend applies to exposures taken during this period", NULL);
    7474    psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-time_end",  0,            "detrend applies to exposures taken during this period", NULL);
    75     psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run period (CURRENTLY NOT USED)", NULL);
    76     psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period (CURRENTLY NOT USED)", NULL);
     75    psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period", NULL);
     76    psMetadataAddTime(definebytagArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period", NULL);
    7777    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-reduction",  0,            "define reduction class for processing", NULL);
    7878    psMetadataAddStr(definebytagArgs, PS_LIST_TAIL, "-label",  0,            "define detrun label", NULL);
     
    104104    psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-time_begin",  0,            "detrend applies to exposures taken during this period", NULL);
    105105    psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-time_end",  0,            "detrend applies to exposures taken during this period", NULL);
    106     psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period (CURRENTLY NOT USED)", NULL);
    107     psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period (CURRENTLY NOT USED)", NULL);
     106    psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period", NULL);
     107    psMetadataAddTime(definebyqueryArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period", NULL);
    108108    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-select_exp_type",  0,            "search for exp_type", NULL);
    109109    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-select_inst",  0,            "search for camera", NULL);
     
    159159    psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_time_begin",  0,            "start of period to apply detrend too", NULL);
    160160    psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_time_end",  0,            "end of period to apply detrend too", NULL);
    161     psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_use_begin",  0,            "start of detrend run applicable period (CURRENTLY NOT USED)", NULL);
    162     psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_use_end",  0,            "end of detrend run applicable period (CURRENTLY NOT USED)", NULL);
     161    psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_use_begin",  0,            "start of detrend run applicable period", NULL);
     162    psMetadataAddTime(definebydetrunArgs, PS_LIST_TAIL, "-set_use_end",  0,            "end of detrend run applicable period", NULL);
    163163    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_reduction",  0,            "define reduction class for processing", NULL);
    164164    psMetadataAddStr(definebydetrunArgs, PS_LIST_TAIL, "-set_label",  0,            "define detrun label", NULL);
     
    640640    // -residimfile
    641641    psMetadata *residimfileArgs = psMetadataAlloc();
    642     psMetadataAddS64(residimfileArgs,  PS_LIST_TAIL, "-det_id",  0,            "search for detrend ID", 0);
    643     psMetadataAddS32(residimfileArgs,  PS_LIST_TAIL, "-iteration",  0,            "search for iteration number", 0);
    644     psMetadataAddS64(residimfileArgs,  PS_LIST_TAIL, "-exp_id",  0,            "search by detrend ID", 0);
    645     psMetadataAddStr(residimfileArgs,  PS_LIST_TAIL, "-class_id",  0,            "search for class ID", NULL);
    646     psMetadataAddStr(residimfileArgs,  PS_LIST_TAIL, "-recip",  0,            "search for recipe", NULL);
    647     psMetadataAddU64(residimfileArgs,  PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
     642    psMetadataAddS64(residimfileArgs, PS_LIST_TAIL, "-det_id",  0,            "search for detrend ID", 0);
     643    psMetadataAddS32(residimfileArgs, PS_LIST_TAIL, "-iteration",  0,            "search for iteration number", 0);
     644    psMetadataAddS64(residimfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by detrend ID", 0);
     645    psMetadataAddStr(residimfileArgs, PS_LIST_TAIL, "-class_id",  0,            "search for class ID", NULL);
     646    psMetadataAddStr(residimfileArgs, PS_LIST_TAIL, "-recip",  0,            "search for recipe", NULL);
     647    psMetadataAddU64(residimfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    648648    psMetadataAddBool(residimfileArgs, PS_LIST_TAIL, "-faulted",  0,            "only return imfiles with a fault status set", false);
    649649    psMetadataAddBool(residimfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
    650     psMetadataAddBool(residimfileArgs, PS_LIST_TAIL, "-included",  0,            "restrict results to exposures 'includeded' in the current iteration", false);
    651     psMetadataAddStr(residimfileArgs,  PS_LIST_TAIL, "-select_state",  0,            "search for state", NULL);
     650    psMetadataAddStr(residimfileArgs, PS_LIST_TAIL, "-select_state",  0,            "search for state", NULL);
    652651
    653652    // -revertresidimfile
     
    834833    psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-time_begin",  0,            "detrend applies to exposures taken during this period", NULL);
    835834    psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-time_end",  0,            "detrend applies to exposures taken during this period", NULL);
    836     psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period (CURRENTLY NOT USED)", NULL);
    837     psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period (CURRENTLY NOT USED)", NULL);
     835    psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_begin",  0,            "start of detrend run applicable period", NULL);
     836    psMetadataAddTime(register_detrendArgs, PS_LIST_TAIL, "-use_end",  0,            "end of detrend run applicable period", NULL);
    838837    psMetadataAddS64(register_detrendArgs, PS_LIST_TAIL, "-ref_det_id",  0,            "define reference det_id", 0);
    839838    psMetadataAddS32(register_detrendArgs, PS_LIST_TAIL, "-ref_iter",  0,            "define reference iteration", -1);
     
    856855    psMetadataAddStr(register_detrend_imfileArgs, PS_LIST_TAIL, "-path_base",  0,            "define base output location", NULL);
    857856
     857    // -exportrun
     858    psMetadata *exportrunArgs = psMetadataAlloc();
     859    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-det_id", 0,          "export this detrend ID (required)", 0);
     860    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     861    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     862
     863    // -importrun
     864    psMetadata *importrunArgs = psMetadataAlloc();
     865    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     866
     867
    858868    psFree(now);
    859869
     
    948958    PXOPT_ADD_MODE("-register_detrend", "", DETTOOL_MODE_REGISTER_DETREND, register_detrendArgs);
    949959    PXOPT_ADD_MODE("-register_detrend_imfile", "", DETTOOL_MODE_REGISTER_DETREND_IMFILE, register_detrend_imfileArgs);
     960    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", DETTOOL_MODE_EXPORTRUN, exportrunArgs);
     961    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           DETTOOL_MODE_IMPORTRUN, importrunArgs);
    950962
    951963    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/difftool.c

    r21402 r23310  
    4545static bool donecleanupMode(pxConfig *config);
    4646static bool updatediffskyfileMode(pxConfig *config);
     47static bool exportrunMode(pxConfig *config);
     48static bool importrunMode(pxConfig *config);
    4749
    4850static bool setdiffRunState(pxConfig *config, psS64 diff_id, const char *state);
     
    8183        MODECASE(DIFFTOOL_MODE_DONECLEANUP,           donecleanupMode);
    8284        MODECASE(DIFFTOOL_MODE_UPDATEDIFFSKYFILE,     updatediffskyfileMode);
     85        MODECASE(DIFFTOOL_MODE_EXPORTRUN,             exportrunMode);
     86        MODECASE(DIFFTOOL_MODE_IMPORTRUN,             importrunMode);
    8387        default:
    8488            psAbort("invalid option (this should not happen)");
     
    14371441}
    14381442
     1443bool exportrunMode(pxConfig *config)
     1444{
     1445  typedef struct ExportTable {
     1446    char tableName[80];
     1447    char sqlFilename[80];
     1448  } ExportTable;
     1449 
     1450  int numExportFiles = 3;
     1451
     1452  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1453
     1454  PXOPT_LOOKUP_S64(det_id, config->args, "-diff_id", true,  false);
     1455  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1456  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1457
     1458  FILE *f = fopen (outfile, "w");
     1459  if (f == NULL) {
     1460    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1461    return false;
     1462  }
     1463
     1464  psMetadata *where = psMetadataAlloc();
     1465  PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "==");
     1466
     1467  ExportTable tables [] = {
     1468    {"diffRun", "difftool_export_run.sql"},
     1469    {"diffInputSkyfile", "difftool_export_input_skyfile.sql"},
     1470    {"diffSkyfile", "difftool_export_skyfile.sql"},
     1471  };
     1472
     1473  for (int i=0; i < numExportFiles; i++) {
     1474    psString query = pxDataGet(tables[i].sqlFilename);
     1475    if (!query) {
     1476      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1477      return false;
     1478    }
     1479
     1480    if (where && psListLength(where->list)) {
     1481      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1482      psStringAppend(&query, " %s", whereClause);
     1483      psFree(whereClause);
     1484    }
     1485
     1486    // treat limit == 0 as "no limit"
     1487    if (limit) {
     1488      psString limitString = psDBGenerateLimitSQL(limit);
     1489      psStringAppend(&query, " %s", limitString);
     1490      psFree(limitString);
     1491    }
     1492
     1493    if (!p_psDBRunQuery(config->dbh, query)) {
     1494      psError(PS_ERR_UNKNOWN, false, "database error");
     1495      psFree(query);
     1496      return false;
     1497    }
     1498    psFree(query);
     1499
     1500    psArray *output = p_psDBFetchResult(config->dbh);
     1501    if (!output) {
     1502      psError(PS_ERR_UNKNOWN, false, "database error");
     1503      return false;
     1504    }
     1505    if (!psArrayLength(output)) {
     1506      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1507      psFree(output);
     1508      return true;
     1509    }
     1510
     1511    // we must write the export table in non-simple (true) format
     1512    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1513      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1514      psFree(output);
     1515      return false;
     1516    }
     1517    psFree(output);
     1518  }
     1519
     1520  fclose (f);
     1521
     1522  return true;
     1523}
     1524
     1525bool importrunMode(pxConfig *config)
     1526{
     1527  unsigned int nFail;
     1528 
     1529  int numImportTables = 2;
     1530 
     1531  char tables[2] [80] = {"diffInputSkyfile", "diffSkyfile"};
     1532
     1533  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1534 
     1535  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1536
     1537  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1538
     1539  fprintf (stdout, "---- input ----\n");
     1540  psMetadataPrint (stderr, input, 1);
     1541
     1542  psMetadataItem *item = psMetadataLookup (input, "diffRun");
     1543  psAssert (item, "entry not in input?");
     1544  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1545
     1546  psMetadataItem *entry = psListGet (item->data.list, 0);
     1547  assert (entry);
     1548  assert (entry->type == PS_DATA_METADATA);
     1549  diffRunRow *diffRun = diffRunObjectFromMetadata (entry->data.md);
     1550  diffRunInsertObject (config->dbh, diffRun);
     1551
     1552  // fprintf (stdout, "---- diff run ----\n");
     1553  // psMetadataPrint (stderr, entry->data.md, 1);
     1554
     1555  for (int i = 0; i < numImportTables; i++) {
     1556    item = psMetadataLookup (input, tables[i]);
     1557    psAssert (item, "entry not in input?");
     1558    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1559 
     1560    switch (i) {
     1561      case 0:
     1562        for (int i = 0; i < item->data.list->n; i++) {
     1563          entry = psListGet (item->data.list, i);
     1564          assert (entry);
     1565          assert (entry->type == PS_DATA_METADATA);
     1566          diffInputSkyfileRow *diffInputSkyfile = diffInputSkyfileObjectFromMetadata (entry->data.md);
     1567          diffInputSkyfileInsertObject (config->dbh, diffInputSkyfile);
     1568
     1569          // fprintf (stdout, "---- row %d ----\n", i);
     1570          // psMetadataPrint (stderr, entry->data.md, 1);
     1571        }
     1572        break;
     1573       
     1574      case 1:
     1575        for (int i = 0; i < item->data.list->n; i++) {
     1576          entry = psListGet (item->data.list, i);
     1577          assert (entry);
     1578          assert (entry->type == PS_DATA_METADATA);
     1579          diffSkyfileRow *diffSkyfile = diffSkyfileObjectFromMetadata (entry->data.md);
     1580          diffSkyfileInsertObject (config->dbh, diffSkyfile);
     1581
     1582          // fprintf (stdout, "---- row %d ----\n", i);
     1583          // psMetadataPrint (stderr, entry->data.md, 1);
     1584        }
     1585        break;
     1586    }
     1587  }
     1588
     1589  return true;
     1590}
  • trunk/ippTools/src/difftool.h

    r19677 r23310  
    3939    DIFFTOOL_MODE_DONECLEANUP,
    4040    DIFFTOOL_MODE_UPDATEDIFFSKYFILE,
     41    DIFFTOOL_MODE_EXPORTRUN,
     42    DIFFTOOL_MODE_IMPORTRUN
    4143} difftoolMode;
    4244
  • trunk/ippTools/src/difftoolConfig.c

    r21308 r23310  
    187187    psMetadataAddS16(updatediffskyfileArgs, PS_LIST_TAIL, "-code", 0,         "set fault code (required)", 0);
    188188
     189    // -exportrun
     190    psMetadata *exportrunArgs = psMetadataAlloc();
     191    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-diff_id", 0,          "export this diff ID (required)", 0);
     192    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     193    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     194
     195    // -importrun
     196    psMetadata *importrunArgs = psMetadataAlloc();
     197    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     198
     199
    189200
    190201    psFree(now);
     
    207218    PXOPT_ADD_MODE("-donecleanup",           "show runs that have been cleaned",     DIFFTOOL_MODE_DONECLEANUP,          donecleanupArgs);
    208219    PXOPT_ADD_MODE("-updatediffskyfile",     "update fault code for a diffskyfile",  DIFFTOOL_MODE_UPDATEDIFFSKYFILE,          updatediffskyfileArgs);
     220    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", DIFFTOOL_MODE_EXPORTRUN, exportrunArgs);
     221    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           DIFFTOOL_MODE_IMPORTRUN, importrunArgs);
    209222
    210223    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/faketool.c

    r23281 r23310  
    4141static bool revertprocessedimfileMode(pxConfig *config);
    4242static bool updateprocessedimfileMode(pxConfig *config);
    43 static bool advanceexpMode(pxConfig *config);
     43static bool promoteexpMode(pxConfig *config);
    4444static bool blockMode(pxConfig *config);
    4545static bool maskedMode(pxConfig *config);
     
    5252static bool tofullimfileMode(pxConfig *config);
    5353static bool topurgedimfileMode(pxConfig *config);
     54static bool exportrunMode(pxConfig *config);
     55static bool importrunMode(pxConfig *config);
    5456
    5557# define MODECASE(caseName, func) \
     
    7880        MODECASE(FAKETOOL_MODE_REVERTPROCESSEDIMFILE,   revertprocessedimfileMode);
    7981        MODECASE(FAKETOOL_MODE_UPDATEPROCESSEDIMFILE,   updateprocessedimfileMode);
    80         MODECASE(FAKETOOL_MODE_ADVANCEEXP,              advanceexpMode);
     82        MODECASE(FAKETOOL_MODE_PROMOTEEXP,              promoteexpMode);
    8183        MODECASE(FAKETOOL_MODE_BLOCK,                   blockMode);
    8284        MODECASE(FAKETOOL_MODE_MASKED,                  maskedMode);
     
    8991        MODECASE(FAKETOOL_MODE_TOFULLIMFILE,            tofullimfileMode);
    9092        MODECASE(FAKETOOL_MODE_TOPURGEDIMFILE,          topurgedimfileMode);
     93        MODECASE(FAKETOOL_MODE_EXPORTRUN,               exportrunMode);
     94        MODECASE(FAKETOOL_MODE_IMPORTRUN,               importrunMode);
    9195
    9296        default:
     
    10481052}
    10491053
    1050 static bool advanceexpMode(pxConfig *config)
     1054static bool promoteexpMode(pxConfig *config)
    10511055{
    10521056    PS_ASSERT_PTR_NON_NULL(config, false);
     
    12251229    return change_imfile_data_state(config, "purged", "goto_purged");
    12261230}
     1231
     1232bool exportrunMode(pxConfig *config)
     1233{
     1234  typedef struct ExportTable {
     1235    char tableName[80];
     1236    char sqlFilename[80];
     1237  } ExportTable;
     1238
     1239  int numExportTables = 2;
     1240 
     1241  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1242
     1243  PXOPT_LOOKUP_S64(det_id, config->args, "-fake_id", true,  false);
     1244  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1245  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1246
     1247  FILE *f = fopen (outfile, "w");
     1248  if (f == NULL) {
     1249    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1250    return false;
     1251  }
     1252
     1253  psMetadata *where = psMetadataAlloc();
     1254  PXOPT_COPY_S64(config->args, where, "-fake_id", "fake_id", "==");
     1255
     1256  ExportTable tables [] = {
     1257    {"fakeRun", "faketool_export_run.sql"},
     1258    {"fakeProcessedImfile", "faketool_export_processed_imfile.sql"},
     1259  };
     1260
     1261  for (int i=0; i < numExportTables; i++) {
     1262    psString query = pxDataGet(tables[i].sqlFilename);
     1263    if (!query) {
     1264      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1265      return false;
     1266    }
     1267
     1268    if (where && psListLength(where->list)) {
     1269      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1270      psStringAppend(&query, " %s", whereClause);
     1271      psFree(whereClause);
     1272    }
     1273
     1274    // treat limit == 0 as "no limit"
     1275    if (limit) {
     1276      psString limitString = psDBGenerateLimitSQL(limit);
     1277      psStringAppend(&query, " %s", limitString);
     1278      psFree(limitString);
     1279    }
     1280
     1281    if (!p_psDBRunQuery(config->dbh, query)) {
     1282      psError(PS_ERR_UNKNOWN, false, "database error");
     1283      psFree(query);
     1284      return false;
     1285    }
     1286    psFree(query);
     1287
     1288    psArray *output = p_psDBFetchResult(config->dbh);
     1289    if (!output) {
     1290      psError(PS_ERR_UNKNOWN, false, "database error");
     1291      return false;
     1292    }
     1293    if (!psArrayLength(output)) {
     1294      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1295      psFree(output);
     1296      return true;
     1297    }
     1298
     1299    // we must write the export table in non-simple (true) format
     1300    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1301      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1302      psFree(output);
     1303      return false;
     1304    }
     1305    psFree(output);
     1306  }
     1307
     1308    fclose (f);
     1309
     1310    return true;
     1311}
     1312
     1313bool importrunMode(pxConfig *config)
     1314{
     1315  unsigned int nFail;
     1316
     1317  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1318 
     1319  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1320
     1321  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1322
     1323  fprintf (stdout, "---- input ----\n");
     1324  psMetadataPrint (stderr, input, 1);
     1325
     1326  psMetadataItem *item = psMetadataLookup (input, "fakeRun");
     1327  psAssert (item, "entry not in input?");
     1328  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1329
     1330  psMetadataItem *entry = psListGet (item->data.list, 0);
     1331  assert (entry);
     1332  assert (entry->type == PS_DATA_METADATA);
     1333  fakeRunRow *fakeRun = fakeRunObjectFromMetadata (entry->data.md);
     1334  fakeRunInsertObject (config->dbh, fakeRun);
     1335
     1336  // fprintf (stdout, "---- fake run ----\n");
     1337  // psMetadataPrint (stderr, entry->data.md, 1);
     1338
     1339  item = psMetadataLookup (input, "fakeProcessedImfile");
     1340  psAssert (item, "entry not in input?");
     1341  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1342
     1343  for (int i = 0; i < item->data.list->n; i++) {
     1344    psMetadataItem *entry = psListGet (item->data.list, i);
     1345    assert (entry);
     1346    assert (entry->type == PS_DATA_METADATA);
     1347    fakeProcessedImfileRow *fakeProcessedImfile = fakeProcessedImfileObjectFromMetadata (entry->data.md);
     1348    fakeProcessedImfileInsertObject (config->dbh, fakeProcessedImfile);
     1349
     1350    // fprintf (stdout, "---- row %d ----\n", i);
     1351    // psMetadataPrint (stderr, entry->data.md, 1);
     1352  }
     1353
     1354  return true;
     1355}
  • trunk/ippTools/src/faketool.h

    r23281 r23310  
    3333    FAKETOOL_MODE_REVERTPROCESSEDIMFILE,
    3434    FAKETOOL_MODE_UPDATEPROCESSEDIMFILE,
    35     FAKETOOL_MODE_ADVANCEEXP,
     35    FAKETOOL_MODE_PROMOTEEXP,
    3636    FAKETOOL_MODE_BLOCK,
    3737    FAKETOOL_MODE_MASKED,
     
    4545    FAKETOOL_MODE_TOFULLIMFILE,
    4646    FAKETOOL_MODE_TOPURGEDIMFILE,
     47    FAKETOOL_MODE_EXPORTRUN,
     48    FAKETOOL_MODE_IMPORTRUN
    4749} FAKETOOLMode;
    4850
  • trunk/ippTools/src/faketoolConfig.c

    r23281 r23310  
    242242
    243243
    244     // -advanceexp
    245     psMetadata *advanceexpArgs = psMetadataAlloc();
    246     psMetadataAddS64(advanceexpArgs, PS_LIST_TAIL, "-fake_id", 0,      "search by fake ID", 0);
    247     psMetadataAddStr(advanceexpArgs, PS_LIST_TAIL, "-label",  0,       "search by label ", NULL);
    248     psMetadataAddU64(advanceexpArgs, PS_LIST_TAIL, "-limit",  0,       "limit exposures to advance to N items", 0);
     244    // -promoteexp
     245    psMetadata *promoteexpArgs = psMetadataAlloc();
     246    psMetadataAddS64(promoteexpArgs, PS_LIST_TAIL, "-fake_id", 0,      "search by fake ID", 0);
     247    psMetadataAddStr(promoteexpArgs, PS_LIST_TAIL, "-label",  0,       "search by label ", NULL);
     248    psMetadataAddU64(promoteexpArgs, PS_LIST_TAIL, "-limit",  0,       "limit exposures to promote to N items", 0);
    249249
    250250    // -block
     
    301301    psMetadataAddStr(topurgedimfileArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
    302302
     303    // -exportrun
     304    psMetadata *exportrunArgs = psMetadataAlloc();
     305    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-fake_id", 0,          "export this fake ID (required)", 0);
     306    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     307    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     308
     309    // -importrun
     310    psMetadata *importrunArgs = psMetadataAlloc();
     311    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     312
     313
    303314
    304315
     
    314325    PXOPT_ADD_MODE("-updateprocessedimfile","change procesed imfile properties",     FAKETOOL_MODE_UPDATEPROCESSEDIMFILE,    updateprocessedimfileArgs);
    315326    PXOPT_ADD_MODE("-revertprocessedimfile", "undo a processed imfile",              FAKETOOL_MODE_REVERTPROCESSEDIMFILE,    revertprocessedimfileArgs);
    316     PXOPT_ADD_MODE("-advanceexp",            "advance completed exposoures",         FAKETOOL_MODE_ADVANCEEXP,          advanceexpArgs);
     327    PXOPT_ADD_MODE("-promoteexp",            "promote completed exposoures",         FAKETOOL_MODE_PROMOTEEXP,          promoteexpArgs);
    317328    PXOPT_ADD_MODE("-block",                 "set a label block",                    FAKETOOL_MODE_BLOCK,          blockArgs);
    318329    PXOPT_ADD_MODE("-masked",                "show blocked labels",                  FAKETOOL_MODE_MASKED,         maskedArgs);
     
    325336    PXOPT_ADD_MODE("-tofullimfile",        "set imfile state to full",               FAKETOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
    326337    PXOPT_ADD_MODE("-topurgedimfile",      "set imfile state to purged",             FAKETOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
     338    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", FAKETOOL_MODE_EXPORTRUN, exportrunArgs);
     339    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           FAKETOOL_MODE_IMPORTRUN, importrunArgs);
    327340
    328341
  • trunk/ippTools/src/flatcorr.c

    r21402 r23310  
    4646static bool inputexpMode(pxConfig *config);
    4747static bool inputimfileMode(pxConfig *config);
     48static bool exportrunMode(pxConfig *config);
     49static bool importrunMode(pxConfig *config);
    4850
    4951static bool setflatcorrRunState(pxConfig *config, psS64 corr_id, const char *state);
     
    7880        MODECASE(FLATCORR_MODE_INPUTEXP,       inputexpMode);
    7981        MODECASE(FLATCORR_MODE_INPUTIMFILE,    inputimfileMode);
     82        MODECASE(FLATCORR_MODE_EXPORTRUN,      exportrunMode);
     83        MODECASE(FLATCORR_MODE_IMPORTRUN,      importrunMode);
    8084        default:
    8185            psAbort("invalid option (this should not happen)");
     
    734738    return true;
    735739}
     740
     741bool exportrunMode(pxConfig *config)
     742{
     743  typedef struct ExportTable {
     744    char tableName[80];
     745    char sqlFilename[80];
     746  } ExportTable;
     747 
     748  int numExportTables = 3;
     749
     750  PS_ASSERT_PTR_NON_NULL(config, NULL);
     751
     752  PXOPT_LOOKUP_S64(det_id, config->args, "-corr_id", true,  false);
     753  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     754  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     755
     756  FILE *f = fopen (outfile, "w");
     757  if (f == NULL) {
     758    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     759    return false;
     760  }
     761
     762  psMetadata *where = psMetadataAlloc();
     763  PXOPT_COPY_S64(config->args, where, "-coor_id", "corr_id", "==");
     764
     765  ExportTable tables [] = {
     766    {"flatcorrRun", "flatcorrtool_export_run.sql"},
     767    {"flatcorrCamLink", "flatcorrtool_export_cam_link.sql"},
     768    {"flatcorrChipLink", "flatcorr_export_chip_link.sql"},
     769  };
     770
     771  for (int i=0; i < numExportTables; i++) {
     772    psString query = pxDataGet(tables[i].sqlFilename);
     773    if (!query) {
     774      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     775      return false;
     776    }
     777
     778    if (where && psListLength(where->list)) {
     779      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     780      psStringAppend(&query, " %s", whereClause);
     781      psFree(whereClause);
     782    }
     783
     784    // treat limit == 0 as "no limit"
     785    if (limit) {
     786      psString limitString = psDBGenerateLimitSQL(limit);
     787      psStringAppend(&query, " %s", limitString);
     788      psFree(limitString);
     789    }
     790
     791    if (!p_psDBRunQuery(config->dbh, query)) {
     792      psError(PS_ERR_UNKNOWN, false, "database error");
     793      psFree(query);
     794      return false;
     795    }
     796    psFree(query);
     797
     798    psArray *output = p_psDBFetchResult(config->dbh);
     799    if (!output) {
     800      psError(PS_ERR_UNKNOWN, false, "database error");
     801      return false;
     802    }
     803    if (!psArrayLength(output)) {
     804      psTrace("regtool", PS_LOG_INFO, "no rows found");
     805      psFree(output);
     806      return true;
     807    }
     808
     809    // we must write the export table in non-simple (true) format
     810    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     811      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     812      psFree(output);
     813      return false;
     814    }
     815    psFree(output);
     816  }
     817
     818    fclose (f);
     819
     820    return true;
     821}
     822
     823bool importrunMode(pxConfig *config)
     824{
     825  unsigned int nFail;
     826  psMetadataItem *item, *entry;
     827 
     828  int numImportTables = 3;
     829 
     830  char tables[3] [80] = {"flatcorrRun", "flatcorrCamLink", "flatcorrChipLink"};
     831
     832  PS_ASSERT_PTR_NON_NULL(config, NULL);
     833 
     834  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     835
     836  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     837
     838  fprintf (stdout, "---- input ----\n");
     839  psMetadataPrint (stderr, input, 1);
     840
     841  for (int i = 0; i < numImportTables; i++) {
     842    item = psMetadataLookup (input, tables[i]);
     843    psAssert (item, "entry not in input?");
     844    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     845   
     846    entry = psListGet (item->data.list, 0);
     847    assert (entry);
     848    assert (entry->type == PS_DATA_METADATA);
     849 
     850    switch (i) {
     851      case 0:
     852      {
     853        flatcorrRunRow *flatcorrRun = flatcorrRunObjectFromMetadata (entry->data.md);
     854        flatcorrRunInsertObject (config->dbh, flatcorrRun);
     855
     856        // fprintf (stdout, "---- flatcorr run ----\n");
     857        // psMetadataPrint (stderr, entry->data.md, 1);
     858        break;
     859      }
     860      case 1:
     861      {
     862        flatcorrCamLinkRow *flatcorrCamLink = flatcorrCamLinkObjectFromMetadata (entry->data.md);
     863        flatcorrCamLinkInsertObject (config->dbh, flatcorrCamLink);
     864
     865        // fprintf (stdout, "---- flatcorr cam link ----\n");
     866        // psMetadataPrint (stderr, entry->data.md, 1);
     867        break;
     868      }
     869      case 2:
     870      {
     871        flatcorrChipLinkRow *flatcorrChipLink = flatcorrChipLinkObjectFromMetadata (entry->data.md);
     872        flatcorrChipLinkInsertObject (config->dbh, flatcorrChipLink);
     873
     874        // fprintf (stdout, "---- flatcorr chip link ----\n");
     875        // psMetadataPrint (stderr, entry->data.md, 1);
     876        break;
     877      }
     878    }
     879  }
     880  return true;
     881}
  • trunk/ippTools/src/flatcorr.h

    r20397 r23310  
    3535    FLATCORR_MODE_UPDATERUN,
    3636    FLATCORR_MODE_INPUTEXP,
    37     FLATCORR_MODE_INPUTIMFILE
     37    FLATCORR_MODE_INPUTIMFILE,
     38    FLATCORR_MODE_EXPORTRUN,
     39    FLATCORR_MODE_IMPORTRUN
    3840} flatcorrMode;
    3941
  • trunk/ippTools/src/flatcorrConfig.c

    r20397 r23310  
    125125    psMetadataAddU64(inputimfileArgs, PS_LIST_TAIL, "-limit",   0, "limit result set to N items", 0);
    126126
     127    // -exportrun
     128    psMetadata *exportrunArgs = psMetadataAlloc();
     129    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-corr_id", 0,          "export this correction ID (required)", 0);
     130    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     131    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     132
     133    // -importrun
     134    psMetadata *importrunArgs = psMetadataAlloc();
     135    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     136
     137
    127138    psFree(now);
    128139
     
    141152    PXOPT_ADD_MODE("-inputexp",       "list exposures for a correction run",               FLATCORR_MODE_INPUTEXP,       inputexpArgs);
    142153    PXOPT_ADD_MODE("-inputimfile",    "list imfiles for a chip run",                       FLATCORR_MODE_INPUTIMFILE,    inputimfileArgs);
     154    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", FLATCORR_MODE_EXPORTRUN, exportrunArgs);
     155    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           FLATCORR_MODE_IMPORTRUN, importrunArgs);
    143156
    144157    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/pxadmin.c

    r18927 r23310  
    2929
    3030bool createMode(pxConfig *config);
     31bool createMirrorMode(pxConfig *config);
    3132bool deleteMode(pxConfig *config);
    3233static bool runMultipleStatments(pxConfig *config, const char *query);
     
    5354            }
    5455            break;
     56        case PXADMIN_MODE_CREATE_MIRROR:
     57            if (!createMirrorMode(config)) {
     58                goto FAIL;
     59            }
     60            break;
    5561        case PXADMIN_MODE_DELETE:
    5662            if (!deleteMode(config)) {
     
    8692
    8793    psString query = pxDataGet("pxadmin_create_tables.sql");
     94    if (!query) {
     95        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     96        return false;
     97    }
     98
     99    // BEGIN
     100    if (!psDBTransaction(config->dbh)) {
     101        psError(PS_ERR_UNKNOWN, false, "database error");
     102        return false;
     103    }
     104
     105    if (!runMultipleStatments(config, query)) {
     106        if (!psDBRollback(config->dbh)) {
     107                psError(PS_ERR_UNKNOWN, false, "database error");
     108        }
     109        psError(PS_ERR_UNKNOWN, false, "database error");
     110        psFree(query);
     111        return false;
     112    }
     113    psFree(query);
     114
     115    // COMMIT
     116    if (!psDBCommit(config->dbh)) {
     117        psError(PS_ERR_UNKNOWN, false, "database error");
     118        return false;
     119    }
     120
     121    return true;
     122}
     123
     124
     125bool createMirrorMode(pxConfig *config)
     126{
     127    PS_ASSERT_PTR_NON_NULL(config, false);
     128
     129    psString query = pxDataGet("pxadmin_create_mirror_tables.sql");
    88130    if (!query) {
    89131        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
  • trunk/ippTools/src/pxadmin.h

    r9392 r23310  
    2626    PXADMIN_MODE_NONE      = 0x0,
    2727    PXADMIN_MODE_CREATE,
     28    PXADMIN_MODE_CREATE_MIRROR,
    2829    PXADMIN_MODE_DELETE,
    2930    PXADMIN_MODE_RECREATE
  • trunk/ippTools/src/pxadminConfig.c

    r19062 r23310  
    3131    fprintf (stderr, "\nPan-STARRS DataBase Admin Tool\n\n");
    3232    fprintf (stderr, "Usage: %s [mode]\n", program);
    33     fprintf (stderr, " [mode] : -create | -delete\n\n");
     33    fprintf (stderr, " [mode] : -create | -create-mirror | -delete\n\n");
    3434
    3535    psMetadataItem *server = pmConfigUserSite(config->modules, "DBSERVER",   PS_DATA_STRING);
     
    8787        config->mode = PXADMIN_MODE_CREATE;
    8888    }
     89    if ((N = psArgumentGet(argc, argv, "-create-mirror"))) {
     90        psArgumentRemove(N, &argc, argv);
     91        if (config->mode) {
     92            psAbort("only one mode selection is allowed");
     93        }
     94        config->mode = PXADMIN_MODE_CREATE_MIRROR;
     95    }
    8996    if ((N = psArgumentGet(argc, argv, "-delete"))) {
    9097        psArgumentRemove(N, &argc, argv);
     
    105112    psMetadataAddStr(arguments, PS_LIST_TAIL, "-create", 0,
    106113            "create all IPP tables", "");
     114    psMetadataAddStr(arguments, PS_LIST_TAIL, "-create-mirror", 0,
     115            "mirror all IPP tables", "");
    107116    psMetadataAddStr(arguments, PS_LIST_TAIL, "-delete", 0,
    108117            "delete all IPP tables", "");
  • trunk/ippTools/src/regtool.c

    r21402 r23310  
    4444static bool updateprocessedexpMode(pxConfig *config);
    4545static bool cleardupexpMode(pxConfig *config);
     46static bool exportrunMode(pxConfig *config);
     47static bool importrunMode(pxConfig *config);
    4648
    4749# define MODECASE(caseName, func) \
     
    7678        MODECASE(REGTOOL_MODE_UPDATEPROCESSEDEXP,    updateprocessedexpMode);
    7779        MODECASE(REGTOOL_MODE_CLEARDUPEXP,           cleardupexpMode);
     80        MODECASE(CHIPTOOL_MODE_EXPORTRUN,            exportrunMode);
     81        MODECASE(CHIPTOOL_MODE_IMPORTRUN,            importrunMode);
    7882        default:
    7983            psAbort("invalid option (this should not happen)");
     
    11071111    return true;
    11081112}
     1113
     1114bool exportrunMode(pxConfig *config)
     1115{
     1116  typedef struct ExportTable {
     1117    char tableName[80];
     1118    char sqlFilename[80];
     1119  } ExportTable;
     1120 
     1121  int numExportTables = 2;
     1122
     1123  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1124
     1125  PXOPT_LOOKUP_S64(det_id, config->args, "-exp_id", true,  false);
     1126  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1127  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1128
     1129  FILE *f = fopen (outfile, "w");
     1130  if (f == NULL) {
     1131    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1132    return false;
     1133  }
     1134
     1135  psMetadata *where = psMetadataAlloc();
     1136  PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
     1137
     1138  ExportTable tables [] = {
     1139    {"rawExp", "regtool_export_raw__exp.sql"},
     1140    {"rawImfile", "regtool_export_raw_imfile.sql"},
     1141  };
     1142
     1143  for (int i=0; i < numExportTables; i++) {
     1144    psString query = pxDataGet(tables[i].sqlFilename);
     1145    if (!query) {
     1146      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1147      return false;
     1148    }
     1149
     1150    if (where && psListLength(where->list)) {
     1151      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1152      psStringAppend(&query, " %s", whereClause);
     1153      psFree(whereClause);
     1154    }
     1155
     1156    // treat limit == 0 as "no limit"
     1157    if (limit) {
     1158      psString limitString = psDBGenerateLimitSQL(limit);
     1159      psStringAppend(&query, " %s", limitString);
     1160      psFree(limitString);
     1161    }
     1162
     1163    if (!p_psDBRunQuery(config->dbh, query)) {
     1164      psError(PS_ERR_UNKNOWN, false, "database error");
     1165      psFree(query);
     1166      return false;
     1167    }
     1168    psFree(query);
     1169
     1170    psArray *output = p_psDBFetchResult(config->dbh);
     1171    if (!output) {
     1172      psError(PS_ERR_UNKNOWN, false, "database error");
     1173      return false;
     1174    }
     1175    if (!psArrayLength(output)) {
     1176      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1177      psFree(output);
     1178      return true;
     1179    }
     1180
     1181    // we must write the export table in non-simple (true) format
     1182    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1183      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1184      psFree(output);
     1185      return false;
     1186    }
     1187    psFree(output);
     1188  }
     1189
     1190  fclose (f);
     1191
     1192  return true;
     1193}
     1194
     1195bool importrunMode(pxConfig *config)
     1196{
     1197  unsigned int nFail;
     1198
     1199  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1200 
     1201  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1202
     1203  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1204
     1205  fprintf (stdout, "---- input ----\n");
     1206  psMetadataPrint (stderr, input, 1);
     1207
     1208  psMetadataItem *item = psMetadataLookup (input, "rawExp");
     1209  psAssert (item, "entry not in input?");
     1210  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1211 
     1212  psMetadataItem *entry = psListGet (item->data.list, 0);
     1213  assert (entry);
     1214  assert (entry->type == PS_DATA_METADATA);
     1215  rawExpRow *rawExp = rawExpObjectFromMetadata (entry->data.md);
     1216  rawExpInsertObject (config->dbh, rawExp);
     1217
     1218  // fprintf (stdout, "---- raw exp ----\n");
     1219  // psMetadataPrint (stderr, entry->data.md, 1);
     1220
     1221  item = psMetadataLookup (input, "rawImfile");
     1222  psAssert (item, "entry not in input?");
     1223  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1224
     1225  for (int i = 0; i < item->data.list->n; i++) {
     1226    psMetadataItem *entry = psListGet (item->data.list, i);
     1227    assert (entry);
     1228    assert (entry->type == PS_DATA_METADATA);
     1229    rawImfileRow *rawImfile = rawImfileObjectFromMetadata (entry->data.md);
     1230    rawImfileInsertObject (config->dbh, rawImfile);
     1231
     1232    // fprintf (stdout, "---- row %d ----\n", i);
     1233    // psMetadataPrint (stderr, entry->data.md, 1);
     1234  }
     1235
     1236  return true;
     1237}
     1238
  • trunk/ippTools/src/regtool.h

    r18328 r23310  
    3636    REGTOOL_MODE_UPDATEPROCESSEDEXP,
    3737    REGTOOL_MODE_CLEARDUPEXP,
     38    REGTOOL_MODE_EXPORTRUN,
     39    REGTOOL_MODE_IMPORTRUN
    3840} regtoolMode;
    3941
  • trunk/ippTools/src/regtoolConfig.c

    r20608 r23310  
    278278    psMetadataAddS16(updatedprocessedexpArgs, PS_LIST_TAIL, "-code",    0,            "set fault code (required)", INT16_MAX);
    279279
     280    // -exportrun
     281    psMetadata *exportrunArgs = psMetadataAlloc();
     282    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-exp_id", 0,          "export this exposure ID (required)", 0);
     283    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     284    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     285
     286    // -importrun
     287    psMetadata *importrunArgs = psMetadataAlloc();
     288    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     289
     290
    280291    // -cleardupexp
    281292    psMetadata *cleardupexpArgs = psMetadataAlloc();
     
    295306    PXOPT_ADD_MODE("-updateprocessedexp",      "", REGTOOL_MODE_UPDATEPROCESSEDEXP,      updatedprocessedexpArgs);
    296307    PXOPT_ADD_MODE("-cleardupexp",             "", REGTOOL_MODE_CLEARDUPEXP,      cleardupexpArgs);
     308    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", REGTOOL_MODE_EXPORTRUN, exportrunArgs);
     309    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           REGTOOL_MODE_IMPORTRUN, importrunArgs);
    297310
    298311    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/stacktool.c

    r21402 r23310  
    4444static bool donecleanupMode(pxConfig *config);
    4545static bool updatesumskyfileMode(pxConfig *config);
     46static bool exportrunMode(pxConfig *config);
     47static bool importrunMode(pxConfig *config);
    4648
    4749static bool setstackRunState(pxConfig *config, psS64 stack_id, const char *state);
     
    7880        MODECASE(STACKTOOL_MODE_DONECLEANUP,           donecleanupMode);
    7981        MODECASE(STACKTOOL_MODE_UPDATESUMSKYFILE,      updatesumskyfileMode);
     82        MODECASE(STACKTOOL_MODE_EXPORTRUN,             exportrunMode);
     83        MODECASE(STACKTOOL_MODE_IMPORTRUN,             importrunMode);
    8084        default:
    8185            psAbort("invalid option (this should not happen)");
     
    11801184}
    11811185
     1186bool exportrunMode(pxConfig *config)
     1187{
     1188  typedef struct ExportTable {
     1189    char tableName[80];
     1190    char sqlFilename[80];
     1191  } ExportTable;
     1192
     1193  int numExportTables = 3;
     1194 
     1195  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1196
     1197  PXOPT_LOOKUP_S64(det_id, config->args, "-stack_id", true,  false);
     1198  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1199  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1200
     1201  FILE *f = fopen (outfile, "w");
     1202  if (f == NULL) {
     1203      psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1204      return false;
     1205  }
     1206
     1207  psMetadata *where = psMetadataAlloc();
     1208  PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
     1209
     1210  ExportTable tables [] = {
     1211    {"stackRun", "stacktool_export_run.sql"},
     1212    {"stackInputSkyfile", "stacktool_export_input_skyfile.sql"},
     1213    {"stackSumSkyfile", "stacktool_export_sum_skyfile.sql"},
     1214  };
     1215
     1216  for (int i=0; i < numExportTables; i++) {
     1217    psString query = pxDataGet(tables[i].sqlFilename);
     1218    if (!query) {
     1219      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1220      return false;
     1221    }
     1222
     1223    if (where && psListLength(where->list)) {
     1224      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1225      psStringAppend(&query, " %s", whereClause);
     1226      psFree(whereClause);
     1227    }
     1228
     1229    // treat limit == 0 as "no limit"
     1230    if (limit) {
     1231      psString limitString = psDBGenerateLimitSQL(limit);
     1232      psStringAppend(&query, " %s", limitString);
     1233      psFree(limitString);
     1234    }
     1235
     1236    if (!p_psDBRunQuery(config->dbh, query)) {
     1237      psError(PS_ERR_UNKNOWN, false, "database error");
     1238      psFree(query);
     1239      return false;
     1240    }
     1241    psFree(query);
     1242
     1243    psArray *output = p_psDBFetchResult(config->dbh);
     1244    if (!output) {
     1245      psError(PS_ERR_UNKNOWN, false, "database error");
     1246      return false;
     1247    }
     1248    if (!psArrayLength(output)) {
     1249      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1250      psFree(output);
     1251      return true;
     1252    }
     1253    psFree(output);
     1254  }
     1255
     1256    fclose (f);
     1257
     1258    return true;
     1259}
     1260
     1261bool importrunMode(pxConfig *config)
     1262{
     1263  unsigned int nFail;
     1264 
     1265  int numImportTables = 2;
     1266 
     1267  char tables[2] [80] = {"stackInputSkyfile", "stackSumSkyfile"};
     1268
     1269  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1270 
     1271  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1272
     1273  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1274
     1275  fprintf (stdout, "---- input ----\n");
     1276  psMetadataPrint (stderr, input, 1);
     1277
     1278  psMetadataItem *item = psMetadataLookup (input, "stackRun");
     1279  psAssert (item, "entry not in input?");
     1280  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1281
     1282  psMetadataItem *entry = psListGet (item->data.list, 0);
     1283  assert (entry);
     1284  assert (entry->type == PS_DATA_METADATA);
     1285  stackRunRow *stackRun = stackRunObjectFromMetadata (entry->data.md);
     1286  stackRunInsertObject (config->dbh, stackRun);
     1287
     1288  // fprintf (stdout, "---- stack run ----\n");
     1289  // psMetadataPrint (stderr, entry->data.md, 1);
     1290
     1291  for (int i = 0; i < numImportTables; i++) {
     1292    psMetadataItem *item = psMetadataLookup (input, tables[i]);
     1293    psAssert (item, "entry not in input?");
     1294    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1295 
     1296    switch (i) {
     1297      case 0:
     1298        for (int i = 0; i < item->data.list->n; i++) {
     1299          entry = psListGet (item->data.list, i);
     1300          assert (entry);
     1301          assert (entry->type == PS_DATA_METADATA);
     1302          stackInputSkyfileRow *stackInputSkyfile = stackInputSkyfileObjectFromMetadata (entry->data.md);
     1303          stackInputSkyfileInsertObject (config->dbh, stackInputSkyfile);
     1304
     1305          // fprintf (stdout, "---- row %d ----\n", i);
     1306          // psMetadataPrint (stderr, entry->data.md, 1);
     1307        }
     1308        break;
     1309       
     1310      case 1:
     1311        for (int i = 0; i < item->data.list->n; i++) {
     1312          entry = psListGet (item->data.list, i);
     1313          assert (entry);
     1314          assert (entry->type == PS_DATA_METADATA);
     1315          stackSumSkyfileRow *stackSumSkyfile = stackSumSkyfileObjectFromMetadata (entry->data.md);
     1316          stackSumSkyfileInsertObject (config->dbh, stackSumSkyfile);
     1317
     1318          // fprintf (stdout, "---- row %d ----\n", i);
     1319          // psMetadataPrint (stderr, entry->data.md, 1);
     1320        }
     1321        break;
     1322    }
     1323  }
     1324 
     1325  return true;
     1326}
  • trunk/ippTools/src/stacktool.h

    r19676 r23310  
    3838    STACKTOOL_MODE_DONECLEANUP,
    3939    STACKTOOL_MODE_UPDATESUMSKYFILE,
     40    STACKTOOL_MODE_EXPORTRUN,
     41    STACKTOOL_MODE_IMPORTRUN
    4042} stacktoolMode;
    4143
  • trunk/ippTools/src/stacktoolConfig.c

    r19931 r23310  
    187187    psMetadataAddS16(updatesumskyfileArgs, PS_LIST_TAIL, "-code", 0,            "set fault code (required)", 0);
    188188
     189    // -exportrun
     190    psMetadata *exportrunArgs = psMetadataAlloc();
     191    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-stack_id", 0,          "export this stack ID (required)", 0);
     192    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     193    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     194
     195    // -importrun
     196    psMetadata *importrunArgs = psMetadataAlloc();
     197    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     198
     199
    189200    psFree(now);
    190201
     
    205216    PXOPT_ADD_MODE("-donecleanup",           "show runs that have been cleaned",     STACKTOOL_MODE_DONECLEANUP,          donecleanupArgs);
    206217    PXOPT_ADD_MODE("-updatesumskyfile",      "update fault code for sumskyfile",     STACKTOOL_MODE_UPDATESUMSKYFILE,          updatesumskyfileArgs);
     218    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", STACKTOOL_MODE_EXPORTRUN, exportrunArgs);
     219    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           STACKTOOL_MODE_IMPORTRUN, importrunArgs);
    207220
    208221    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • trunk/ippTools/src/warptool.c

    r23251 r23310  
    5454static bool tofullskyfileMode(pxConfig *config);
    5555static bool updateskyfileMode(pxConfig *config);
    56 
    57 static bool change_skyfile_data_state(pxConfig *config, psString data_state, psString run_state);
     56static bool exportrunMode(pxConfig *config);
     57static bool importrunMode(pxConfig *config);
     58
    5859static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
    5960static bool isValidMode(pxConfig *config, const char *mode);
     
    100101        MODECASE(WARPTOOL_MODE_TOFULLSKYFILE,      tofullskyfileMode);
    101102        MODECASE(WARPTOOL_MODE_UPDATESKYFILE,      updateskyfileMode);
     103        MODECASE(WARPTOOL_MODE_EXPORTRUN,          exportrunMode);
     104        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
    102105
    103106        default:
     
    12711274
    12721275        if (numUpdated < 1) {
    1273             psError(PS_ERR_UNKNOWN, false, "should have affected at least 1 row");
     1276            psError(PS_ERR_UNKNOWN, false, "should have affected atleast 1 row");
    12741277            if (!psDBRollback(config->dbh)) {
    12751278                psError(PS_ERR_UNKNOWN, false, "database error");
     
    16051608// shared code for the modes -tocleanedskyfile -tofullskyfile -topurgedskyfile
    16061609
    1607 // XXX EAM : this function was enforcing only certain transitions with the SQL.  However,
    1608 // this is getting fairly messy now that we have added a few additional target and
    1609 // destination states.  I'm disabling these restrictions for now; is there are better way
    1610 // to enforce the allowed state transitions?
    1611 
    16121610static bool change_skyfile_data_state(pxConfig *config, psString data_state, psString run_state)
    16131611{
     
    16251623    }
    16261624
    1627     // XXX this feature is disabled (run_state is ignored)
    16281625    // note only updates if warpRun.state = run_state
    1629 
    1630     if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, skycell_id)) {
     1626    if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, skycell_id, run_state)) {
    16311627        psError(PS_ERR_UNKNOWN, false, "database error");
    16321628        // rollback
     
    16761672    PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false);
    16771673    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
    1678     PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
    16791674    PXOPT_LOOKUP_S16(code, config->args, "-code", false, false);
    16801675
    1681     if (state && code) {
    1682         psError(PS_ERR_UNKNOWN, true, "only one of -set_state and -code may be supplied");
    1683         return false;
    1684     }
    1685 
    1686     if (state) {
    1687       // make sure that the state string is valid
    1688       if (!pxIsValidState(state)) {
    1689         psError(PXTOOLS_ERR_DATA, false, "%s is not a valid state", state);
    1690         return false;
     1676    psString query = pxDataGet("warptool_updateskyfile.sql");
     1677
     1678    if (!p_psDBRunQueryF(config->dbh, query, code, warp_id, skycell_id)) {
     1679        psError(PS_ERR_UNKNOWN, false, "database error");
     1680        return false;
     1681    }
     1682    psFree(query);
     1683
     1684    return true;
     1685}
     1686
     1687bool exportrunMode(pxConfig *config)
     1688{
     1689  typedef struct ExportTable {
     1690    char tableName[80];
     1691    char sqlFilename[80];
     1692  } ExportTable;
     1693
     1694    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1695
     1696    PXOPT_LOOKUP_S64(det_id, config->args, "-warp_id", true,  false);
     1697    PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1698    PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1699
     1700    FILE *f = fopen (outfile, "w");
     1701    if (f == NULL) {
     1702        psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1703        return false;
     1704    }
     1705
     1706    psMetadata *where = psMetadataAlloc();
     1707    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
     1708
     1709    ExportTable tables [] = {
     1710      {"warpRun", "warptool_export_run.sql"},
     1711      {"warpImfile", "warptool_export_imfile.sql"},
     1712      {"warpSkyfile", "warptool_export_skyfile.sql"},
     1713      {"warpSkyCellMap", "warptool_export_sky_cell_map.sql"},
     1714    };
     1715
     1716
     1717    for (int i=0; i < sizeof(tables); i++) {
     1718      psString query = pxDataGet(tables[i].sqlFilename);
     1719      if (!query) {
     1720          psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1721          return false;
    16911722      }
    1692       if (!change_skyfile_data_state(config, state, "unknown")) {
    1693         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
    1694         return false;
     1723
     1724      if (where && psListLength(where->list)) {
     1725          psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1726          psStringAppend(&query, " %s", whereClause);
     1727          psFree(whereClause);
    16951728      }
    1696       return true;
    1697     }
    1698 
    1699     if (code) {
    1700       psString query = pxDataGet("warptool_updateskyfile.sql");
    1701 
    1702       if (!p_psDBRunQueryF(config->dbh, query, code, warp_id, skycell_id)) {
    1703         psError(PS_ERR_UNKNOWN, false, "database error");
     1729
     1730      // treat limit == 0 as "no limit"
     1731      if (limit) {
     1732        psString limitString = psDBGenerateLimitSQL(limit);
     1733        psStringAppend(&query, " %s", limitString);
     1734        psFree(limitString);
     1735      }
     1736
     1737      if (!p_psDBRunQuery(config->dbh, query)) {
     1738        psError(PS_ERR_UNKNOWN, false, "database error");
     1739        psFree(query);
    17041740        return false;
    17051741      }
    17061742      psFree(query);
    1707       return true;
    1708     }
    1709 
    1710     psError(PS_ERR_UNKNOWN, true, "one of -set_state or -code must be supplied");
    1711     return false;
    1712 }
     1743
     1744      psArray *output = p_psDBFetchResult(config->dbh);
     1745      if (!output) {
     1746          psError(PS_ERR_UNKNOWN, false, "database error");
     1747          return false;
     1748      }
     1749      if (!psArrayLength(output)) {
     1750        psTrace("regtool", PS_LOG_INFO, "no rows found");
     1751        psFree(output);
     1752        return true;
     1753      }
     1754
     1755      // we must write the export table in non-simple (true) format
     1756      if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1757        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1758        psFree(output);
     1759        return false;
     1760      }
     1761      psFree(output);
     1762    }
     1763
     1764    fclose (f);
     1765
     1766    return true;
     1767}
     1768
     1769bool importrunMode(pxConfig *config)
     1770{
     1771  unsigned int nFail;
     1772
     1773  int numImportTables = 3;
     1774 
     1775  char tables[3] [80] = {"warpImfile", "warpSkyfile", "warpSkyCellMap"};
     1776
     1777  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1778 
     1779  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1780
     1781  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1782
     1783  fprintf (stdout, "---- input ----\n");
     1784  psMetadataPrint (stderr, input, 1);
     1785
     1786  psMetadataItem *item = psMetadataLookup (input, "warpRun");
     1787  psAssert (item, "entry not in input?");
     1788  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1789 
     1790  psMetadataItem *entry = psListGet (item->data.list, 0);
     1791  assert (entry);
     1792  assert (entry->type == PS_DATA_METADATA);
     1793  warpRunRow *warpRun = warpRunObjectFromMetadata (entry->data.md);
     1794  warpRunInsertObject (config->dbh, warpRun);
     1795
     1796  // fprintf (stdout, "---- warp run ----\n");
     1797  // psMetadataPrint (stderr, entry->data.md, 1);
     1798
     1799  for (int i = 0; i < numImportTables; i++) {
     1800    item = psMetadataLookup (input, tables[i]);
     1801    psAssert (item, "entry not in input?");
     1802    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1803   
     1804    switch (i) {
     1805      case 0: 
     1806        for (int i = 0; i < item->data.list->n; i++) {
     1807          entry = psListGet (item->data.list, i);
     1808          assert (entry);
     1809          assert (entry->type == PS_DATA_METADATA);
     1810          warpImfileRow *warpImfile = warpImfileObjectFromMetadata (entry->data.md);
     1811          warpImfileInsertObject (config->dbh, warpImfile);
     1812
     1813          // fprintf (stdout, "---- row %d ----\n", i);
     1814          // psMetadataPrint (stderr, entry->data.md, 1);
     1815        }
     1816        break;
     1817       
     1818      case 1: 
     1819        for (int i = 0; i < item->data.list->n; i++) {
     1820          entry = psListGet (item->data.list, i);
     1821          assert (entry);
     1822          assert (entry->type == PS_DATA_METADATA);
     1823          warpSkyfileRow *warpSkyfile = warpSkyfileObjectFromMetadata (entry->data.md);
     1824          warpSkyfileInsertObject (config->dbh, warpSkyfile);
     1825
     1826          // fprintf (stdout, "---- row %d ----\n", i);
     1827          // psMetadataPrint (stderr, entry->data.md, 1);
     1828        }
     1829        break;
     1830       
     1831      case 2: 
     1832        for (int i = 0; i < item->data.list->n; i++) {
     1833          entry = psListGet (item->data.list, i);
     1834          assert (entry);
     1835          assert (entry->type == PS_DATA_METADATA);
     1836          warpSkyCellMapRow *warpSkyCellMap = warpSkyCellMapObjectFromMetadata (entry->data.md);
     1837          warpSkyCellMapInsertObject (config->dbh, warpSkyCellMap);
     1838
     1839          // fprintf (stdout, "---- row %d ----\n", i);
     1840          // psMetadataPrint (stderr, entry->data.md, 1);
     1841        }
     1842        break;
     1843    }
     1844  }
     1845  return true;
     1846}
  • trunk/ippTools/src/warptool.h

    r19522 r23310  
    4949    WARPTOOL_MODE_TOFULLSKYFILE,
    5050    WARPTOOL_MODE_UPDATESKYFILE,
     51    WARPTOOL_MODE_EXPORTRUN,
     52    WARPTOOL_MODE_IMPORTRUN
    5153} warptoolMode;
    5254
  • trunk/ippTools/src/warptoolConfig.c

    r23229 r23310  
    348348    psMetadataAddStr(tofullskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
    349349
    350     // -updateskyfile
     350    // -toupdateskyfile
    351351    psMetadata *updateskyfileArgs = psMetadataAlloc();
    352     psMetadataAddS64(updateskyfileArgs, PS_LIST_TAIL, "-warp_id",    0, "warptool ID to update", 0);
     352    psMetadataAddS64(updateskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,    "warptool ID to update", 0);
    353353    psMetadataAddStr(updateskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
    354     psMetadataAddS16(updateskyfileArgs, PS_LIST_TAIL, "-code",       0, "set fault code", 0);
    355     psMetadataAddStr(updateskyfileArgs, PS_LIST_TAIL, "-set_state",  0, "set state", NULL);
     354    psMetadataAddS16(updateskyfileArgs, PS_LIST_TAIL, "-code",  0,      "new fault code", 0);
     355
     356    // -exportrun
     357    psMetadata *exportrunArgs = psMetadataAlloc();
     358    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-warp_id", 0,          "export this warp ID (required)", 0);
     359    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     360    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     361
     362    // -importrun
     363    psMetadata *importrunArgs = psMetadataAlloc();
     364    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     365
    356366
    357367    psFree(now);
     
    381391    PXOPT_ADD_MODE("-tofullskyfile", "set skyfile as full (updated)", WARPTOOL_MODE_TOFULLSKYFILE, tofullskyfileArgs);
    382392    PXOPT_ADD_MODE("-updateskyfile", "update fault code for skyfile", WARPTOOL_MODE_UPDATESKYFILE, updateskyfileArgs);
     393    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", WARPTOOL_MODE_EXPORTRUN, exportrunArgs);
     394    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           WARPTOOL_MODE_IMPORTRUN, importrunArgs);
    383395
    384396    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.