IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 21521


Ignore:
Timestamp:
Feb 16, 2009, 5:05:45 PM (17 years ago)
Author:
eugene
Message:

adding chiptool -exportrun and -importrun

Location:
trunk/ippTools
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/Makefile.am

    r20973 r21521  
    2121     chiptool_revertprocessedimfile.sql \
    2222     chiptool_run.sql \
     23     chiptool_export_run.sql \
     24     chiptool_export_imfiles.sql \
    2325     chiptool_unmasked.sql \
    2426     detselect_search.sql \
  • trunk/ippTools/src/chiptool.c

    r21463 r21521  
    5454static bool tofullimfileMode(pxConfig *config);
    5555static bool topurgedimfileMode(pxConfig *config);
     56static bool exportrunMode(pxConfig *config);
     57static bool importrunMode(pxConfig *config);
    5658
    5759# define MODECASE(caseName, func) \
     
    9193        MODECASE(CHIPTOOL_MODE_TOFULLIMFILE,            tofullimfileMode);
    9294        MODECASE(CHIPTOOL_MODE_TOPURGEDIMFILE,          topurgedimfileMode);
     95        MODECASE(CHIPTOOL_MODE_EXPORTRUN,               exportrunMode);
     96        MODECASE(CHIPTOOL_MODE_IMPORTRUN,               importrunMode);
    9397        default:
    9498            psAbort("invalid option (this should not happen)");
     
    880884}
    881885
    882 
    883886static bool pendingcleanupimfileMode(pxConfig *config)
    884887{
     
    10051008    return true;
    10061009}
    1007 
    10081010
    10091011static bool runMode(pxConfig *config)
     
    12511253    return change_imfile_data_state(config, "purged", "goto_purged");
    12521254}
     1255
     1256bool exportrunMode(pxConfig *config)
     1257{
     1258    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1259
     1260    PXOPT_LOOKUP_S64(chip_id, config->args, "-chip_id", true,  false);
     1261    PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1262    PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1263
     1264    FILE *f = fopen (outfile, "w");
     1265    if (f == NULL) {
     1266        psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1267        return false;
     1268    }
     1269
     1270    psMetadata *where = psMetadataAlloc();
     1271    PXOPT_COPY_S64(config->args, where, "-chip_id", "chip_id", "==");
     1272
     1273    // *** extract the chipRun in this section ***
     1274    psString query = pxDataGet("chiptool_export_run.sql");
     1275    if (!query) {
     1276        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1277        return false;
     1278    }
     1279
     1280    if (where && psListLength(where->list)) {
     1281        psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1282        psStringAppend(&query, " %s", whereClause);
     1283        psFree(whereClause);
     1284    }
     1285
     1286    // treat limit == 0 as "no limit"
     1287    if (limit) {
     1288        psString limitString = psDBGenerateLimitSQL(limit);
     1289        psStringAppend(&query, " %s", limitString);
     1290        psFree(limitString);
     1291    }
     1292
     1293    if (!p_psDBRunQuery(config->dbh, query)) {
     1294        psError(PS_ERR_UNKNOWN, false, "database error");
     1295        psFree(query);
     1296        return false;
     1297    }
     1298    psFree(query);
     1299
     1300    psArray *output = p_psDBFetchResult(config->dbh);
     1301    if (!output) {
     1302        psError(PS_ERR_UNKNOWN, false, "database error");
     1303        return false;
     1304    }
     1305    if (!psArrayLength(output)) {
     1306        psTrace("chiptool", PS_LOG_INFO, "no rows found");
     1307        psFree(output);
     1308        return true;
     1309    }
     1310
     1311    // we must write the export table in non-simple (true) format
     1312    if (!ippdbPrintMetadatas(f, output, "chipRun", true)) {
     1313        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1314        psFree(output);
     1315        return false;
     1316    }
     1317    psFree(output);
     1318
     1319    // *** extract the chipProcessedImfile entries in this section ***
     1320    query = pxDataGet("chiptool_export_imfiles.sql");
     1321    if (!query) {
     1322        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1323        return false;
     1324    }
     1325
     1326    if (where && psListLength(where->list)) {
     1327        psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1328        psStringAppend(&query, " %s", whereClause);
     1329        psFree(whereClause);
     1330    }
     1331    psFree(where);
     1332
     1333    // treat limit == 0 as "no limit"
     1334    if (limit) {
     1335        psString limitString = psDBGenerateLimitSQL(limit);
     1336        psStringAppend(&query, " %s", limitString);
     1337        psFree(limitString);
     1338    }
     1339
     1340    if (!p_psDBRunQuery(config->dbh, query)) {
     1341        psError(PS_ERR_UNKNOWN, false, "database error");
     1342        psFree(query);
     1343        return false;
     1344    }
     1345    psFree(query);
     1346
     1347    output = p_psDBFetchResult(config->dbh);
     1348    if (!output) {
     1349        psError(PS_ERR_UNKNOWN, false, "database error");
     1350        return false;
     1351    }
     1352    if (!psArrayLength(output)) {
     1353        psTrace("chiptool", PS_LOG_INFO, "no rows found");
     1354        psFree(output);
     1355        return true;
     1356    }
     1357
     1358    // we must write the export table in non-simple (true) format
     1359    if (!ippdbPrintMetadatas(f, output, "chipProcessedImfiles", true)) {
     1360        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1361        psFree(output);
     1362        return false;
     1363    }
     1364    psFree(output);
     1365
     1366    fclose (f);
     1367
     1368    return true;
     1369}
     1370
     1371
     1372bool importrunMode(pxConfig *config)
     1373{
     1374  unsigned int nFail;
     1375
     1376  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1377 
     1378  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1379
     1380  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1381
     1382  fprintf (stdout, "---- input ----\n");
     1383  psMetadataPrint (stderr, input, 1);
     1384
     1385  psMetadataItem *chipRunItem = psMetadataLookup (input, "chipRun");
     1386  psAssert (chipRunItem, "entry not in input?");
     1387  psAssert (chipRunItem->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1388 
     1389  psMetadataItem *chipRunEntry = psListGet (chipRunItem->data.list, 0);
     1390  assert (chipRunEntry);
     1391  assert (chipRunEntry->type == PS_DATA_METADATA);
     1392  chipRunRow *chipRun = chipRunObjectFromMetadata (chipRunEntry->data.md);
     1393  chipRunInsertObject (config->dbh, chipRun);
     1394
     1395  // fprintf (stdout, "---- chip run ----\n");
     1396  // psMetadataPrint (stderr, chipRunEntry->data.md, 1);
     1397
     1398  psMetadataItem *item = psMetadataLookup (input, "chipProcessedImfiles");
     1399  psAssert (item, "entry not in input?");
     1400  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1401
     1402  // XXX would be better to use the iterator?
     1403  for (int i = 0; i < item->data.list->n; i++) {
     1404    psMetadataItem *entry = psListGet (item->data.list, i);
     1405    assert (entry);
     1406    assert (entry->type == PS_DATA_METADATA);
     1407    chipProcessedImfileRow *chipProcessedImfile = chipProcessedImfileObjectFromMetadata (entry->data.md);
     1408    chipProcessedImfileInsertObject (config->dbh, chipProcessedImfile);
     1409
     1410    // fprintf (stdout, "---- row %d ----\n", i);
     1411    // psMetadataPrint (stderr, entry->data.md, 1);
     1412  }
     1413
     1414  return true;
     1415}
     1416
     1417
  • trunk/ippTools/src/chiptool.h

    r21463 r21521  
    4444    CHIPTOOL_MODE_TOCLEANEDIMFILE,
    4545    CHIPTOOL_MODE_TOFULLIMFILE,
    46     CHIPTOOL_MODE_TOPURGEDIMFILE
     46    CHIPTOOL_MODE_TOPURGEDIMFILE,
     47    CHIPTOOL_MODE_EXPORTRUN,
     48    CHIPTOOL_MODE_IMPORTRUN
    4749} chiptoolMode;
    4850
  • trunk/ippTools/src/chiptoolConfig.c

    r21463 r21521  
    244244    psMetadataAddStr(topurgedimfileArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
    245245
     246    // -exportrun
     247    psMetadata *exportrunArgs = psMetadataAlloc();
     248    // pxchipSetSearchArgs (exportrunArgs); XXX include search terms?
     249    psMetadataAddS64(exportrunArgs, PS_LIST_TAIL, "-chip_id", 0,          "export this chip ID (required)", 0);
     250    psMetadataAddStr(exportrunArgs, PS_LIST_TAIL, "-outfile", 0,          "export to this file (required)", NULL);
     251    psMetadataAddU64(exportrunArgs, PS_LIST_TAIL, "-limit",   0,          "limit result set to N items", 0);
     252
     253    // -importrun
     254    psMetadata *importrunArgs = psMetadataAlloc();
     255    psMetadataAddStr(importrunArgs, PS_LIST_TAIL, "-infile",  0,          "import from this file (required)", NULL);
     256
    246257    psMetadata *argSets = psMetadataAlloc();
    247258    psMetadata *modes = psMetadataAlloc();
     
    264275    PXOPT_ADD_MODE("-run",                  "show runs",                            CHIPTOOL_MODE_RUN,                  runArgs);
    265276    PXOPT_ADD_MODE("-tocleanedimfile",      "set imfile state to cleaned",          CHIPTOOL_MODE_TOCLEANEDIMFILE,      tocleanedimfileArgs);
    266     PXOPT_ADD_MODE("-tofullimfile",        "set imfile state to full",              CHIPTOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
    267     PXOPT_ADD_MODE("-topurgedimfile",      "set imfile state to purged",            CHIPTOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
     277    PXOPT_ADD_MODE("-tofullimfile",         "set imfile state to full",              CHIPTOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
     278    PXOPT_ADD_MODE("-topurgedimfile",       "set imfile state to purged",            CHIPTOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
     279
     280    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", CHIPTOOL_MODE_EXPORTRUN, exportrunArgs);
     281    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           CHIPTOOL_MODE_IMPORTRUN, importrunArgs);
    268282
    269283    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.