IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 2, 2009, 5:10:19 PM (17 years ago)
Author:
eugene
Message:

merge changes from trunk

Location:
branches/eam_branches/20090820
Files:
44 edited
7 copied

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090820

  • branches/eam_branches/20090820/ippTools/src

    • Property svn:ignore
      •  

        old new  
        3434disttool
        3535receivetool
        36 
         36addtool
        3737pubtool
  • branches/eam_branches/20090820/ippTools/src/Makefile.am

    r24512 r25766  
    11bin_PROGRAMS = \
     2        addtool \
    23        caltool \
    34        camtool \
     
    2324        pubtool
    2425
    25 
    26 bin_SCRIPTS = \
    27         fakemagic
    28 
    2926pkginclude_HEADERS = \
     27        pxadd.h \
    3028        pxadmin.h \
    3129        pxcam.h \
     
    3432        pxdata.h \
    3533        pxfake.h \
     34        pxmagic.h \
    3635        pxregister.h \
    3736        pxtag.h \
     
    4241
    4342noinst_HEADERS = \
     43        addtool.h \
    4444        caltool.h \
    4545        camtool.h \
     
    6868libpxtools_la_LDFLAGS   = -release $(PACKAGE_VERSION)
    6969libpxtools_la_SOURCES   = \
     70        pxadd.c \
    7071        pxcam.c \
    7172        pxchip.c \
     
    7576        pxfake.c \
    7677        pxfault.c \
     78        pxmagic.c \
    7779        pxregister.c \
    7880        pxtag.c \
     
    9698    pstamptool.c \
    9799    pstamptoolConfig.c
     100
     101addtool_CFLAGS = $(PSLIB_CFLAGS) $(PSMODULES_CFLAGS) $(IPPDB_CFLAGS)
     102addtool_LDADD = $(PSLIB_LIBS) $(PSMODULES_LIBS) $(IPPDB_LIBS) libpxtools.la
     103addtool_SOURCES = \
     104    addtool.c \
     105    addtoolConfig.c
    98106
    99107caltool_CFLAGS = $(PSLIB_CFLAGS) $(PSMODULES_CFLAGS) $(IPPDB_CFLAGS)
  • branches/eam_branches/20090820/ippTools/src/camtool.c

    r24681 r25766  
    656656        return false;
    657657    }
     658
     659/*     if (!pxaddQueueByCamID(config, */
     660/*                         pendingRow->cam_id, */
     661/*                         pendingRow->workdir, */
     662/*                         pendingRow->label, */
     663/*                         pendingRow->reduction, */
     664/*                         pendingRow->dvodb */
     665/*     )) { */
     666/*         // rollback */
     667/*         if (!psDBRollback(config->dbh)) { */
     668/*             psError(PS_ERR_UNKNOWN, false, "database error"); */
     669/*         } */
     670/*         psError(PS_ERR_UNKNOWN, false, "failed to queue new addRun"); */
     671/*         psFree(pendingRow); */
     672/*         return false; */
     673/*     } */
     674
    658675    psFree(pendingRow);
    659676
  • branches/eam_branches/20090820/ippTools/src/chiptool.c

    r24562 r25766  
    5454static bool tofullimfileMode(pxConfig *config);
    5555static bool topurgedimfileMode(pxConfig *config);
     56static bool toscrubbedimfileMode(pxConfig *config);
    5657static bool exportrunMode(pxConfig *config);
    5758static bool importrunMode(pxConfig *config);
     
    9394        MODECASE(CHIPTOOL_MODE_TOFULLIMFILE,            tofullimfileMode);
    9495        MODECASE(CHIPTOOL_MODE_TOPURGEDIMFILE,          topurgedimfileMode);
     96        MODECASE(CHIPTOOL_MODE_TOSCRUBBEDIMFILE,        toscrubbedimfileMode);
    9597        MODECASE(CHIPTOOL_MODE_EXPORTRUN,               exportrunMode);
    9698        MODECASE(CHIPTOOL_MODE_IMPORTRUN,               importrunMode);
     
    601603    PXOPT_COPY_STR(config->args, where, "-reduction", "chipRun.reduction", "==");
    602604    pxAddLabelSearchArgs (config, where, "-label", "chipRun.label", "LIKE");
    603     PXOPT_COPY_S64(config->args, where, "-magicked", "chipRun.magicked", "==");
     605    PXOPT_COPY_S64(config->args, where, "-magicked", "chipProcessedImfile.magicked", "==");
     606
     607    PXOPT_LOOKUP_U64(magicked, config->args, "-magicked", false, false);
     608    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
     609    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
    604610
    605611    if (!psListLength(where->list) &&
     
    629635        // don't list faulted rows
    630636        psStringAppend(&query, " %s", "AND chipProcessedImfile.fault = 0");
     637    }
     638    if (not_destreaked) {
     639        if (destreaked) {
     640            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
     641            return false;
     642        }
     643        if (magicked) {
     644            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
     645            return false;
     646        }
     647        psStringAppend(&query, " AND chipProcessedImfile.magicked = 0");
     648    }
     649    if (destreaked) {
     650        psStringAppend(&query, " AND chipProcessedImfile.magicked != 0");
    631651    }
    632652
     
    13331353    return change_imfile_data_state(config, "purged", "goto_purged");
    13341354}
    1335 
     1355static bool toscrubbedimfileMode(pxConfig *config)
     1356{
     1357  return change_imfile_data_state(config, "scrubbed", "goto_scrubbed");
     1358}
    13361359bool exportrunMode(pxConfig *config)
    13371360{
  • branches/eam_branches/20090820/ippTools/src/chiptool.h

    r23339 r25766  
    4545    CHIPTOOL_MODE_TOFULLIMFILE,
    4646    CHIPTOOL_MODE_TOPURGEDIMFILE,
     47    CHIPTOOL_MODE_TOSCRUBBEDIMFILE,
    4748    CHIPTOOL_MODE_EXPORTRUN,
    4849    CHIPTOOL_MODE_IMPORTRUN
  • branches/eam_branches/20090820/ippTools/src/chiptoolConfig.c

    r24562 r25766  
    158158    psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-reduction",          0, "search by reduction class", NULL);
    159159    psMetadataAddStr(processedimfileArgs,  PS_LIST_TAIL, "-label",  PS_META_DUPLICATE_OK, "search by chipRun label (LIKE comparison)", NULL);
    160     psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-magicked",  0,        "search by magicked status", false);
     160
     161    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
     162    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that have not been destreaked", false);
     163    psMetadataAddS64(processedimfileArgs, PS_LIST_TAIL, "-magicked",  0,        "search by magicked value", 0);
    161164    psMetadataAddU64(processedimfileArgs,  PS_LIST_TAIL, "-limit",  0,           "limit result set to N items", 0);
    162165    psMetadataAddBool(processedimfileArgs, PS_LIST_TAIL, "-all",  0,            "list everything without search terms", false);
     
    247250    psMetadataAddS64(topurgedimfileArgs, PS_LIST_TAIL, "-chip_id", 0,          "chip ID to update", 0);
    248251    psMetadataAddStr(topurgedimfileArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
     252
     253    // -toscrubbedimfile
     254    psMetadata *toscrubbedimfileArgs = psMetadataAlloc();
     255    psMetadataAddS64(toscrubbedimfileArgs, PS_LIST_TAIL, "-chip_id", 0,        "chip ID to update", 0);
     256    psMetadataAddStr(toscrubbedimfileArgs, PS_LIST_TAIL, "-class_id", 0,       "class ID to update", NULL);
    249257
    250258    // -exportrun
     
    282290    PXOPT_ADD_MODE("-tofullimfile",         "set imfile state to full",              CHIPTOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
    283291    PXOPT_ADD_MODE("-topurgedimfile",       "set imfile state to purged",            CHIPTOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
     292    PXOPT_ADD_MODE("-toscrubbedimfile",     "set imfile state to scrubbed",          CHIPTOOL_MODE_TOSCRUBBEDIMFILE,     toscrubbedimfileArgs);
    284293
    285294    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", CHIPTOOL_MODE_EXPORTRUN, exportrunArgs);
  • branches/eam_branches/20090820/ippTools/src/dettool.c

    r24866 r25766  
    150150        MODECASE(DETTOOL_MODE_UPDATEDETRUN,     updatedetrunMode);
    151151        MODECASE(DETTOOL_MODE_RERUN,            rerunMode);
     152        MODECASE(DETTOOL_MODE_PENDINGCLEANUP_DETRUNSUMMARY, pendingcleanup_detrunsummaryMode);
    152153        // register
    153154        MODECASE(DETTOOL_MODE_REGISTER_DETREND, register_detrendMode);
     
    18271828    if (!strcmp(data_state, "drop")) return true;
    18281829    if (!strcmp(data_state, "register")) return true;
     1830    // These are valid data states, and are necessary for the cleanup to work correctly.
     1831    if (!strcmp(data_state, "full")) return true;
     1832    if (!strcmp(data_state, "goto_cleaned")) return true;
     1833    if (!strcmp(data_state, "goto_scrubbed")) return true;
     1834    if (!strcmp(data_state, "goto_purged")) return true;
     1835    if (!strcmp(data_state, "cleaned")) return true;
     1836    if (!strcmp(data_state, "scrubbed")) return true;
     1837    if (!strcmp(data_state, "purged")) return true;
     1838    if (!strcmp(data_state, "error_cleaned")) return true;
     1839    if (!strcmp(data_state, "error_scrubbed")) return true;
     1840    if (!strcmp(data_state, "error_purged")) return true;
    18291841
    18301842    psError(PS_ERR_UNKNOWN, true, "invalid data state: %s", data_state);
     
    18531865
    18541866    if (!isValidDataState (data_state)) return false;
    1855 
     1867   
    18561868    char *query = "UPDATE detProcessedImfile SET data_state = '%s'"
    18571869        " WHERE det_id = %" PRId64
     
    19001912        " WHERE det_id = %" PRId64
    19011913        " AND iteration = %" PRId32
    1902         " AND class_id = %s";
     1914        " AND class_id = '%s'";
    19031915    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, class_id)) {
    19041916        psError(PS_ERR_UNKNOWN, false,
     
    19221934        " WHERE det_id = %" PRId64
    19231935        " AND iteration = %" PRId32
    1924         " AND class_id = %s";
    1925     if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration)) {
     1936        " AND class_id = '%s'";
     1937/*     fprintf(stderr,"DETTOOL SAYS: %s\n",query); */
     1938    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration,class_id)) {
    19261939        psError(PS_ERR_UNKNOWN, false,
    19271940                "failed to change state for det_id %" PRId64 ", iteration %" PRId32,
     
    19441957        " WHERE det_id = %" PRId64
    19451958        " AND iteration = %" PRId32
    1946         " AND class_id = %s";
     1959        " AND class_id = '%s'";
    19471960    if (!p_psDBRunQueryF(config->dbh, query, data_state, det_id, iteration, class_id)) {
    19481961        psError(PS_ERR_UNKNOWN, false,
  • branches/eam_branches/20090820/ippTools/src/dettool.h

    r23310 r25766  
    111111    DETTOOL_MODE_REVERTDETRUNSUMMARY,
    112112    DETTOOL_MODE_UPDATEDETRUNSUMMARY,
     113    DETTOOL_MODE_PENDINGCLEANUP_DETRUNSUMMARY,
    113114    DETTOOL_MODE_UPDATEDETRUN,
    114115    DETTOOL_MODE_RERUN,
     
    209210bool revertdetrunsummaryMode(pxConfig *config);
    210211bool updatedetrunsummaryMode(pxConfig *config);
     212bool pendingcleanup_detrunsummaryMode(pxConfig *config);
    211213
    212214// other utilities
  • branches/eam_branches/20090820/ippTools/src/dettoolConfig.c

    r24866 r25766  
    4141    // XXX EAM : is this used?  does it make sense?
    4242    psMetadata *pendingArgs = psMetadataAlloc();
    43     psMetadataAddS64(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,            "search by exposure ID", 0);
    44     psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,            "search by exposure type", NULL);
    45     psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,            "search by camera", NULL);
    46     psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,            "search by telescope", NULL);
    47     psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0,            "search by filter", NULL);
     43    psMetadataAddS64(pendingArgs, PS_LIST_TAIL, "-exp_id",  0,         "search by exposure ID", 0);
     44    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-exp_type",  0,       "search by exposure type", NULL);
     45    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-inst",  0,           "search by camera", NULL);
     46    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-telescope",  0,      "search by telescope", NULL);
     47    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-filter",  0,         "search by filter", NULL);
    4848    psMetadataAddStr(pendingArgs, PS_LIST_TAIL, "-uri",  0,            "search by URL", NULL);
    49     psMetadataAddBool(pendingArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     49    psMetadataAddBool(pendingArgs, PS_LIST_TAIL, "-simple",  0,        "use the simple output format", false);
    5050
    5151    // -definebytag
     
    125125    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_posang_min",  0,            "define min rotator position angle", NAN);
    126126    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_posang_max",  0,            "define max rotator position angle", NAN);
     127
    127128    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_sun_angle_min",  0,            "define min solar angle", NAN);
    128129    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_sun_angle_max",  0,            "define max solar angle", NAN);
     
    137138    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_moon_phase_max",  0,          "define max moon phase", NAN);
    138139    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-comment",                0,          "search by comment field (LIKE comparison)", NULL);
     140
    139141
    140142    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-pretend",  0,            "print the exposures that would be included in the detrend run and exit", false);
     
    207209    // -addcorrectimfile
    208210    psMetadata *addcorrectimfileArgs = psMetadataAlloc();
    209     psMetadataAddS64(addcorrectimfileArgs, PS_LIST_TAIL, "-det_id",  0,            "define detrend ID (required)", 0);
    210     psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-class_id",  0,            "search for class ID (required)", NULL);
    211     psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-uri",  0,            "define resid file URI", NULL);
     211    psMetadataAddS64(addcorrectimfileArgs, PS_LIST_TAIL, "-det_id",  0,        "define detrend ID (required)", 0);
     212    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-class_id",  0,      "search for class ID (required)", NULL);
     213    psMetadataAddStr(addcorrectimfileArgs, PS_LIST_TAIL, "-uri",  0,           "define resid file URI", NULL);
    212214    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-bg",  0,            "define exposure background", NAN);
    213215    psMetadataAddF64(addcorrectimfileArgs, PS_LIST_TAIL, "-bg_stdev",  0,            "define exposure background stdev", NAN);
     
    306308    psMetadataAddS64(updateprocessedimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
    307309    psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
    308     psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     310    psMetadataAddStr(updateprocessedimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    309311
    310312    // -pendingcleanup_processedimfile
     
    366368    psMetadataAddS64(updateprocessedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
    367369    psMetadataAddS64(updateprocessedexpArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
    368     psMetadataAddStr(updateprocessedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     370    psMetadataAddStr(updateprocessedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    369371
    370372    // -pendingcleanup_processedexp
     
    426428    psMetadataAddS32(updatestackedArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
    427429    psMetadataAddStr(updatestackedArgs, PS_LIST_TAIL, "-class_id",  0,            "search by class ID", NULL);
    428     psMetadataAddStr(updatestackedArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     430    psMetadataAddStr(updatestackedArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    429431
    430432    // -pendingcleanup_stacked
     
    478480    psMetadataAddS32(updatenormalizedstatArgs, PS_LIST_TAIL, "-iteration",  0,            "search by iteration number", 0);
    479481    psMetadataAddStr(updatenormalizedstatArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
    480     psMetadataAddStr(updatenormalizedstatArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     482    psMetadataAddStr(updatenormalizedstatArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    481483
    482484    // -pendingcleanup_normalizedstat
     
    540542    psMetadataAddS32(updatenormalizedimfileArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
    541543    psMetadataAddStr(updatenormalizedimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
    542     psMetadataAddStr(updatenormalizedimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     544    psMetadataAddStr(updatenormalizedimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    543545
    544546    // -pendingcleanup_normalizedimfile
     
    598600    psMetadataAddS64(updatenormalizedexpArgs, PS_LIST_TAIL, "-det_id",               0,            "search by chip ID", 0);
    599601    psMetadataAddS32(updatenormalizedexpArgs, PS_LIST_TAIL, "-iteration", 0,            "search by iteration number", 0);
    600     psMetadataAddStr(updatenormalizedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     602    psMetadataAddStr(updatenormalizedexpArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    601603
    602604    // -pendingcleanup_normalizedexp
     
    678680    psMetadataAddS64(updateresidimfileArgs, PS_LIST_TAIL, "-exp_id",               0,            "search by exp_id", 0);
    679681    psMetadataAddStr(updateresidimfileArgs, PS_LIST_TAIL, "-class_id",             0,            "search by exp_name", NULL);
    680     psMetadataAddStr(updateresidimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     682    psMetadataAddStr(updateresidimfileArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    681683
    682684    // -pendingcleanup_residimfile
     
    759761    psMetadataAddStr(updateresidexpArgs, PS_LIST_TAIL, "-path_base",  0,            "define base output location", NULL);
    760762    psMetadataAddBool(updateresidexpArgs, PS_LIST_TAIL, "-reject",  0,            "exposure is not to be stacked in the next iteration", false);
    761     psMetadataAddStr(updateresidexpArgs, PS_LIST_TAIL, "-data_state",           0,            "search for telescope", NULL);
     763    psMetadataAddStr(updateresidexpArgs, PS_LIST_TAIL, "-data_state",           0,            "set state", NULL);
    762764
    763765    // -pendingcleanup_residexp
     
    813815    psMetadataAddBool(updatedetrunsummaryArgs, PS_LIST_TAIL, "-accept",  0,            "declare that this detrun iteration is accepted as a master", false);
    814816    psMetadataAddBool(updatedetrunsummaryArgs, PS_LIST_TAIL, "-reject",  0,            "reject this detrun iteration as a master", false);
     817    psMetadataAddStr(updatedetrunsummaryArgs, PS_LIST_TAIL, "-data_state", 0,          "set the data state", NULL);
     818    psMetadataAddS32(updatedetrunsummaryArgs, PS_LIST_TAIL, "-iteration", 0,           "search by iteration number", 0);
     819
     820    // -pendingcleanup_detrunsummary
     821    psMetadata *pendingcleanup_detrunsummaryArgs = psMetadataAlloc();
     822    psMetadataAddS64(pendingcleanup_detrunsummaryArgs, PS_LIST_TAIL, "-det_id", 0,     "search by detrend ID (required)", 0);
     823    psMetadataAddS32(pendingcleanup_detrunsummaryArgs, PS_LIST_TAIL, "-iteration", 0,  "search by iteration number", 0);
     824    psMetadataAddU64(pendingcleanup_detrunsummaryArgs, PS_LIST_TAIL, "-limit",  0,     "limit result set to N items", 0);
     825    psMetadataAddBool(pendingcleanup_detrunsummaryArgs, PS_LIST_TAIL, "-simple", 0,    "use the simple output format", false);
    815826
    816827    // -updatedetrun
     
    968979    PXOPT_ADD_MODE("-updatedetrunsummary", "", DETTOOL_MODE_UPDATEDETRUNSUMMARY, updatedetrunsummaryArgs);
    969980
     981    PXOPT_ADD_MODE("-pendingcleanup_detrunsummary", "", DETTOOL_MODE_PENDINGCLEANUP_DETRUNSUMMARY, pendingcleanup_detrunsummaryArgs);
     982
    970983    PXOPT_ADD_MODE("-updatedetrun", "", DETTOOL_MODE_UPDATEDETRUN, updatedetrunArgs);
    971984    PXOPT_ADD_MODE("-rerun",           "", DETTOOL_MODE_RERUN,         rerunArgs);
  • branches/eam_branches/20090820/ippTools/src/dettool_detrunsummary.c

    r23688 r25766  
    336336}
    337337
    338 // XXX need to add -data_state here
     338bool pendingcleanup_detrunsummaryMode(pxConfig *config) {
     339  PS_ASSERT_PTR_NON_NULL(config, false);
     340
     341  PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     342  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     343
     344  psMetadata *where = psMetadataAlloc();
     345  PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
     346  PXOPT_COPY_S32(config->args, where, "-iteration", "iteration", "==");
     347
     348  psString query = pxDataGet("dettool_pendingcleanup_detrunsummary.sql");
     349  if (!query) {
     350    psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     351    return(false);
     352  }
     353 
     354  if (psListLength(where->list)) {
     355    psString whereClause = psDBGenerateWhereConditionSQL(where, "detRunSummary");
     356    psStringAppend(&query, " AND %s", whereClause);
     357    psFree(whereClause);
     358  }
     359  psFree(where);
     360
     361  // treat limit == 0 as "no limit"
     362  if (limit) {
     363    psString limitString = psDBGenerateLimitSQL(limit);
     364    psStringAppend(&query, " %s", limitString);
     365    psFree(limitString);
     366  }
     367  //  fprintf(stderr,">>>%s<<<\n",query);
     368  if (!p_psDBRunQuery(config->dbh, query)) {
     369    psError(PS_ERR_UNKNOWN, false, "database error");
     370    psFree(query);
     371    return(false);
     372  }
     373  psFree(query);
     374
     375  psArray *output = p_psDBFetchResult(config->dbh);
     376  if (!output) {
     377    psError(PS_ERR_UNKNOWN, false, "database error");
     378    return(false);
     379  }
     380  if (!psArrayLength(output)) {
     381    psTrace("dettool", PS_LOG_INFO, "no rows found");
     382    psFree(output);
     383    return(true);
     384  }
     385
     386  // negative simple so the default is true
     387  if (!ippdbPrintMetadatas(stdout, output, "pendingCleanupDetRun", !simple)) {
     388    psError(PS_ERR_UNKNOWN, false, "failed to print array");
     389    psFree(output);
     390    return(false);
     391  }
     392  psFree(output);
     393
     394  return(true);
     395}
     396
     397
     398// preliminary code now.
    339399bool updatedetrunsummaryMode(pxConfig *config)
    340400{
     
    344404    PXOPT_LOOKUP_BOOL(accept, config->args, "-accept", false);
    345405    PXOPT_LOOKUP_BOOL(reject, config->args, "-reject", false);
     406    PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", ((accept == 0)&&(reject == 0)), false);
     407    PXOPT_LOOKUP_S32(iteration, config->args, "-iteration", ((accept == 0)&&(reject == 0)), false);
     408
    346409
    347410    if (accept && reject) {
     
    350413    }
    351414
    352     if (!(accept || reject)) {
    353         psError(PS_ERR_UNKNOWN, true, "either -accept or -reject is required");
    354         return false;
    355     }
    356 
    357     char *query = "UPDATE detRunSummary SET accept = %d WHERE det_id = %"PRId64;
    358     if (!p_psDBRunQueryF(config->dbh, query, accept, det_id)) {
    359         psError(PS_ERR_UNKNOWN, false, "database error");
    360         return false;
     415    if (!(accept || reject || (data_state != NULL))) {
     416        psError(PS_ERR_UNKNOWN, true, "either -accept or -reject is required if -data_state is not supplied");
     417        return false;
     418    }
     419
     420    if (accept || reject) {
     421      char *query = "UPDATE detRunSummary SET accept = %d WHERE det_id = %"PRId64;
     422      if (!p_psDBRunQueryF(config->dbh, query, accept, det_id)) {
     423        psError(PS_ERR_UNKNOWN, false, "database error");
     424        return false;
     425      }
     426    }
     427    else {
     428      PS_ASSERT_PTR_NON_NULL(data_state,false);
     429
     430/*       if (!isValidDataState(data_state)) return false; */
     431     
     432     
     433     
     434      char *query_detRunSummary = "UPDATE detRunSummary SET data_state = '%s'"
     435        " WHERE det_id = %" PRId64
     436        " AND iteration = %" PRId32;
     437      if (!p_psDBRunQueryF(config->dbh, query_detRunSummary, data_state, det_id,iteration)) {
     438        psError(PS_ERR_UNKNOWN, false,
     439                "failed to change state for det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     440        return false;
     441      }
     442
     443      /* This check allows the one update to flag everything for cleanup.  The check for full is only temporary while I test for bugs. */
     444      if ((!strncmp(data_state,"goto_",5)
     445           //      || (!strcmp(data_state,"full"))
     446           //      || (!strcmp(data_state,"cleaned"))
     447           ))   {
     448        char *query_detProcessedImfile = "UPDATE detProcessedImfile SET data_state = '%s'"
     449          " WHERE det_id = %" PRId64;
     450        if (!p_psDBRunQueryF(config->dbh, query_detProcessedImfile,data_state,det_id)) {
     451          psError(PS_ERR_UNKNOWN, false,
     452                  "failed to change state for detProcessedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     453          return(false);
     454        }
     455       
     456        char *query_detProcessedExp = "UPDATE detProcessedExp SET data_state = '%s'"
     457          " WHERE det_id = %" PRId64;
     458        if (!p_psDBRunQueryF(config->dbh, query_detProcessedExp,data_state,det_id)) {
     459          psError(PS_ERR_UNKNOWN, false,
     460                  "failed to change state for detProcessedExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     461          return(false);
     462        }
     463       
     464        char *query_detNormalizedImfile = "UPDATE detNormalizedImfile SET data_state = '%s'"
     465          " WHERE det_id = %" PRId64
     466          " AND iteration = %" PRId32;
     467        if (!p_psDBRunQueryF(config->dbh, query_detNormalizedImfile,data_state,det_id,iteration)) {
     468          psError(PS_ERR_UNKNOWN, false,
     469                  "failed to change state for detNormalizedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     470          return(false);
     471        }
     472       
     473        char *query_detNormalizedStatImfile = "UPDATE detNormalizedStatImfile SET data_state = '%s'"
     474          " WHERE det_id = %" PRId64
     475          " AND iteration = %" PRId32;
     476        if (!p_psDBRunQueryF(config->dbh, query_detNormalizedStatImfile,data_state,det_id,iteration)) {
     477          psError(PS_ERR_UNKNOWN, false,
     478                  "failed to change state for detNormalizedStatImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     479          return(false);
     480        }
     481
     482        char *query_detNormalizedExp = "UPDATE detNormalizedExp SET data_state = '%s'"
     483          " WHERE det_id = %" PRId64
     484          " AND iteration = %" PRId32;
     485        if (!p_psDBRunQueryF(config->dbh, query_detNormalizedExp,data_state,det_id,iteration)) {
     486          psError(PS_ERR_UNKNOWN, false,
     487                  "failed to change state for detNormalizedExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     488          return(false);
     489        }
     490       
     491        char *query_detResidImfile = "UPDATE detResidImfile SET data_state = '%s'"
     492          " WHERE det_id = %" PRId64
     493          " AND iteration = %" PRId32;
     494        if (!p_psDBRunQueryF(config->dbh, query_detResidImfile,data_state,det_id,iteration)) {
     495          psError(PS_ERR_UNKNOWN, false,
     496                  "failed to change state for detResidImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     497          return(false);
     498        }
     499       
     500        char *query_detResidExp = "UPDATE detResidExp SET data_state = '%s'"
     501          " WHERE det_id = %" PRId64
     502          " AND iteration = %" PRId32;
     503        if (!p_psDBRunQueryF(config->dbh, query_detResidExp,data_state,det_id,iteration)) {
     504          psError(PS_ERR_UNKNOWN, false,
     505                  "failed to change state for detResidExp det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     506          return(false);
     507        }
     508       
     509        char *query_detStackedImfile = "UPDATE detStackedImfile SET data_state = '%s'"
     510          " WHERE det_id = %" PRId64
     511          " AND iteration = %" PRId32;
     512        if (!p_psDBRunQueryF(config->dbh, query_detStackedImfile,data_state,det_id,iteration)) {
     513          psError(PS_ERR_UNKNOWN, false,
     514                  "failed to change state for detStackedImfile det_id %" PRId64 ", iteration %" PRId32, det_id,iteration);
     515          return(false);
     516        }
     517      }
     518      /* End if */
     519     
    361520    }
    362521
  • branches/eam_branches/20090820/ippTools/src/dettool_processedimfile.c

    r23688 r25766  
    314314    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    315315    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    316 
     316/*     int i; */
    317317    psMetadata *where = psMetadataAlloc();
    318318    PXOPT_COPY_S64(config->args, where, "-det_id", "det_id", "==");
     
    345345        return false;
    346346    }
     347/*     fprintf(stderr,"DETTOOL:procimfile: %s\n",query); */
    347348    psFree(query);
    348349
     
    350351    if (!output) {
    351352        psError(PS_ERR_UNKNOWN, false, "database error");
     353/*      fprintf(stderr,"WTF !output?\n"); */
    352354        return false;
    353355    }
    354356    if (!psArrayLength(output)) {
    355357        psTrace("dettool", PS_LOG_INFO, "no rows found");
     358/*      fprintf(stderr,"WTF no rows??\n"); */
    356359        psFree(output);
    357360        return true;
     
    359362
    360363    // negative simple so the default is true
     364/*     i = (int) ippdbPrintMetadatas(stdout, output, "detCleanupProcessedImfile", !simple); */
     365/*     fprintf(stderr,">>%d<<\n",i); */
    361366    if (!ippdbPrintMetadatas(stdout, output, "detCleanupProcessedImfile", !simple)) {
    362367        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     
    364369        return false;
    365370    }
     371/*     fprintf(stderr,"DETTOOL:procimfile: %s\n",output); */
     372/*     psFree(output); */
    366373
    367374    psFree(output);
  • branches/eam_branches/20090820/ippTools/src/difftool.c

    r25074 r25766  
    3737static bool todiffskyfileMode(pxConfig *config);
    3838static bool adddiffskyfileMode(pxConfig *config);
     39static bool advanceMode(pxConfig *config);
    3940static bool diffskyfileMode(pxConfig *config);
    4041static bool revertdiffskyfileMode(pxConfig *config);
     
    5051
    5152static bool setdiffRunState(pxConfig *config, psS64 diff_id, const char *state, psS64 magicked);
    52 static bool diffRunComplete(pxConfig *config);
    5353
    5454# define MODECASE(caseName, func) \
     
    7676        MODECASE(DIFFTOOL_MODE_TODIFFSKYFILE,         todiffskyfileMode);
    7777        MODECASE(DIFFTOOL_MODE_ADDDIFFSKYFILE,        adddiffskyfileMode);
     78        MODECASE(DIFFTOOL_MODE_ADVANCE,               advanceMode);
    7879        MODECASE(DIFFTOOL_MODE_DIFFSKYFILE,           diffskyfileMode);
    7980        MODECASE(DIFFTOOL_MODE_REVERTDIFFSKYFILE,     revertdiffskyfileMode);
    8081        MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN,          definepoprunMode);
    81         MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK,         definewarpstackMode);
     82        MODECASE(DIFFTOOL_MODE_DEFINEWARPSTACK,       definewarpstackMode);
    8283        MODECASE(DIFFTOOL_MODE_DEFINEWARPWARP,        definewarpwarpMode);
    8384        MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPRUN,     pendingcleanuprunMode);
     
    555556    }
    556557
    557     if (!diffRunComplete(config)) {
    558         if (!psDBRollback(config->dbh)) {
    559             psError(PS_ERR_UNKNOWN, false, "database error");
    560         }
    561         psError(PS_ERR_UNKNOWN, false, "database error");
    562         return false;
    563     }
    564 
    565558    // point of no return
    566559    if (!psDBCommit(config->dbh)) {
     
    569562    }
    570563
     564
     565    return true;
     566}
     567
     568static bool advanceMode(pxConfig *config)
     569{
     570    PS_ASSERT_PTR_NON_NULL(config, false);
     571
     572    psMetadata *where = psMetadataAlloc();
     573    PXOPT_COPY_S64(config->args, where,  "-diff_id", "diffRun.diff_id", "==");
     574    pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "==");
     575
     576    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     577
     578    // look for completed diffRuns
     579    psString query = pxDataGet("difftool_completed_runs.sql");
     580    if (!query) {
     581        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     582        return false;
     583    }
     584
     585    psString whereString = psStringCopy("");
     586    if (psListLength(where->list)) {
     587        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     588        psStringAppend(&whereString, "\n AND %s", whereClause);
     589        psFree(whereClause);
     590    }
     591    psFree(where);
     592
     593    // treat limit == 0 as "no limit"
     594    if (limit) {
     595        psString limitString = psDBGenerateLimitSQL(limit);
     596        psStringAppend(&query, " %s", limitString);
     597        psFree(limitString);
     598    }
     599
     600    if (!psDBTransaction(config->dbh)) {
     601        psError(PS_ERR_UNKNOWN, false, "database error");
     602        psFree(whereString);
     603        return false;
     604    }
     605
     606    if (!p_psDBRunQueryF(config->dbh, query, whereString)) {
     607        psError(PS_ERR_UNKNOWN, false, "database error");
     608        psFree(query);
     609        psFree(whereString);
     610        if (!psDBRollback(config->dbh)) {
     611            psError(PS_ERR_UNKNOWN, false, "database error");
     612        }
     613        return false;
     614    }
     615    psFree(query);
     616    psFree(whereString);
     617
     618    psArray *output = p_psDBFetchResult(config->dbh);
     619    if (!output) {
     620        psError(PS_ERR_UNKNOWN, false, "database error");
     621        if (!psDBRollback(config->dbh)) {
     622            psError(PS_ERR_UNKNOWN, false, "database error");
     623        }
     624        return false;
     625    }
     626    if (!psArrayLength(output)) {
     627        psTrace("difftool", PS_LOG_INFO, "no rows found");
     628        psFree(output);
     629        return true;
     630    }
     631
     632    for (long i = 0; i < psArrayLength(output); i++) {
     633        psMetadata *row = output->data[i];
     634
     635        psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id");
     636        psS64 magicked = psMetadataLookupS64(NULL, row, "magicked");
     637
     638        // set diffRun.state to 'full'
     639        if (!setdiffRunState(config, diff_id, "full", magicked)) {
     640            psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64,
     641                diff_id);
     642            psFree(output);
     643            if (!psDBRollback(config->dbh)) {
     644                psError(PS_ERR_UNKNOWN, false, "database error");
     645            }
     646            return false;
     647        }
     648    }
     649    psFree(output);
     650
     651    if (!psDBCommit(config->dbh)) {
     652        psError(PS_ERR_UNKNOWN, false, "database error");
     653        return false;
     654    }
    571655
    572656    return true;
     
    581665    PXOPT_COPY_S64(config->args, where,  "-diff_id", "diffSkyfile.diff_id", "==");
    582666    PXOPT_COPY_STR(config->args, where, "-skycell_id", "diffInputSkyfile.skycell_id", "==");
    583     PXOPT_COPY_S64(config->args, where,  "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "==");
     667    PXOPT_COPY_S64(config->args, where, "-diff_skyfile_id", "diffInputSkyfile.diff_skyfile_id", "==");
    584668    PXOPT_COPY_STR(config->args, where, "-tess_id", "diffRun.tess_id", "==");
    585669    PXOPT_COPY_S16(config->args, where, "-fault", "diffSkyfile.fault", "==");
    586     PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "==");
    587     PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "==");
    588     PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "==");
    589 
     670    PXOPT_COPY_S64(config->args, where,  "-magicked", "diffSkyfile.magicked", "==");
     671    pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "LIKE");
     672
     673    PXOPT_LOOKUP_BOOL(template, config->args, "-template", false);
     674    if (!template) {
     675        PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "==");
     676        PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "==");
     677        PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "==");
     678        PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawInput.dateobs",  ">=");
     679        PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawInput.dateobs",  "<=");
     680        PXOPT_COPY_STR(config->args, where, "-filter",     "rawInput.filter", "==");
     681    } else {
     682        PXOPT_COPY_S64(config->args, where, "-exp_id", "rawTemplate.exp_id", "==");
     683        PXOPT_COPY_STR(config->args, where, "-exp_name", "rawTemplate.exp_name", "==");
     684        PXOPT_COPY_STR(config->args, where, "-warp_id", "warpTemplate.warp_id", "==");
     685        PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawTemplate.dateobs",  ">=");
     686        PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawTemplate.dateobs",  "<=");
     687        PXOPT_COPY_STR(config->args, where, "-filter",     "rawTemplate.filter", "==");
     688    }
     689
     690    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
    590691    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    591692    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     693
     694    PXOPT_LOOKUP_U64(magicked, config->args,        "-magicked", false, false);
     695    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
     696    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
    592697
    593698    psString query = pxDataGet("difftool_skyfile.sql");
     
    601706        psStringAppend(&query, " WHERE %s", whereClause);
    602707        psFree(whereClause);
     708    } else if (!all) {
     709        psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
    603710    }
    604711    psFree(where);
     712
     713    if (not_destreaked) {
     714        if (destreaked) {
     715            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
     716            return false;
     717        }
     718        if (magicked) {
     719            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
     720            return false;
     721        }
     722        psStringAppend(&query, " AND diffSkyfile.magicked = 0");
     723    }
     724    if (destreaked) {
     725        psStringAppend(&query, " AND diffSkyfile.magicked != 0");
     726    }
     727
    605728
    606729    // treat limit == 0 as "no limit"
     
    18101933}
    18111934
    1812 static bool diffRunComplete(pxConfig *config)
    1813 {
    1814     PS_ASSERT_PTR_NON_NULL(config, false);
    1815 
    1816     // look for completed diffRuns
    1817     psString query = pxDataGet("difftool_completed_runs.sql");
    1818     if (!query) {
    1819         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    1820         return false;
    1821     }
    1822 
    1823     if (!p_psDBRunQuery(config->dbh, query)) {
    1824         psError(PS_ERR_UNKNOWN, false, "database error");
    1825         psFree(query);
    1826         return false;
    1827     }
    1828     psFree(query);
    1829 
    1830     psArray *output = p_psDBFetchResult(config->dbh);
    1831     if (!output) {
    1832         psError(PS_ERR_UNKNOWN, false, "database error");
    1833         return false;
    1834     }
    1835     if (!psArrayLength(output)) {
    1836         psTrace("difftool", PS_LOG_INFO, "no rows found");
    1837         psFree(output);
    1838         return true;
    1839     }
    1840     for (long i = 0; i < psArrayLength(output); i++) {
    1841         psMetadata *row = output->data[i];
    1842 
    1843         psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id");
    1844         psS64 magicked = psMetadataLookupS64(NULL, row, "magicked");
    1845 
    1846         // set diffRun.state to 'stop'
    1847         if (!setdiffRunState(config, diff_id, "full", magicked)) {
    1848             psError(PS_ERR_UNKNOWN, false, "failed to change diffRun.state for diff_id: %" PRId64,
    1849                 diff_id);
    1850             psFree(output);
    1851             return false;
    1852         }
    1853     }
    1854 
    1855     return true;
    1856 }
    18571935
    18581936bool exportrunMode(pxConfig *config)
  • branches/eam_branches/20090820/ippTools/src/difftool.h

    r24174 r25766  
    3131    DIFFTOOL_MODE_TODIFFSKYFILE,
    3232    DIFFTOOL_MODE_ADDDIFFSKYFILE,
     33    DIFFTOOL_MODE_ADVANCE,
    3334    DIFFTOOL_MODE_DIFFSKYFILE,
    3435    DIFFTOOL_MODE_REVERTDIFFSKYFILE,
  • branches/eam_branches/20090820/ippTools/src/difftoolConfig.c

    r24933 r25766  
    115115    psMetadataAddBool(adddiffskyfileArgs, PS_LIST_TAIL, "-magicked",  0, "define magicked state", false);
    116116
     117    // -advance
     118    psMetadata *advanceArgs = psMetadataAlloc();
     119    psMetadataAddS64(advanceArgs, PS_LIST_TAIL, "-diff_id", 0, "select by diff ID", 0);
     120    psMetadataAddStr(advanceArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "select by label", NULL);
     121    psMetadataAddS32(advanceArgs, PS_LIST_TAIL, "-limit", 0, "limit number of results", 0);
     122
    117123    // -diffskyfile
    118124    psMetadata *diffskyfileArgs = psMetadataAlloc();
    119     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,            "search by diff ID", 0);
    120     psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-skycell_id",  0,       "define skycell ID", NULL);
    121     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-diff_skyfile_id", 0,    "search by diff_skyfile_id ID", 0);
    122     psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL, "-tess_id",  0,            "define tessellation ID", NULL);
    123     psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL, "-exp_id",  0,            "define exposure ID", 0);
    124     psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-exp_name",  0,         "define exposure name", NULL);
    125     psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-warp_id",  0,         "define warp_id", NULL);
    126     psMetadataAddU64(diffskyfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    127     psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
    128     psMetadataAddS16(diffskyfileArgs, PS_LIST_TAIL, "-fault",  0,            "define fault code", 0);
     125    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL,  "-diff_id", 0,           "search by diff ID", 0);
     126    psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-skycell_id",  0,      "search by skycell ID", NULL);
     127    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL,  "-diff_skyfile_id", 0,   "search by diff_skyfile_id ID", 0);
     128    psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL,  "-tess_id",  0,          "search by tessellation ID", NULL);
     129    psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-warp_id",  0,         "search by warp_id", NULL);
     130    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-template",  0,        "apply exposure args to template of bothways diff", false);
     131    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL,  "-exp_id",  0,           "search by exposure ID", 0);
     132    psMetadataAddStr(diffskyfileArgs , PS_LIST_TAIL, "-exp_name",  0,        "search by exposure name", NULL);
     133    psMetadataAddTime(diffskyfileArgs, PS_LIST_TAIL, "-dateobs_begin", 0,    "search for exposures by time (>=)", NULL);
     134    psMetadataAddTime(diffskyfileArgs, PS_LIST_TAIL, "-dateobs_end", 0,      "search for exposures by time (<=)", NULL);
     135    psMetadataAddStr(diffskyfileArgs, PS_LIST_TAIL,  "-filter", 0,           "search for filter", NULL);
     136    psMetadataAddS64(diffskyfileArgs, PS_LIST_TAIL,  "-magicked", 0,         "search by magicked value", 0);
     137    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
     138    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that are not destreaked", false);
     139    psMetadataAddStr(diffskyfileArgs,  PS_LIST_TAIL, "-label",  PS_META_DUPLICATE_OK, "search by diffRun label (LIKE comparison)", NULL);
     140    psMetadataAddS16(diffskyfileArgs, PS_LIST_TAIL,  "-fault",  0,           "search by fault code", 0);
     141
     142    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
     143    psMetadataAddU64(diffskyfileArgs, PS_LIST_TAIL,  "-limit",  0,            "limit result set to N items", 0);
     144    psMetadataAddBool(diffskyfileArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
    129145
    130146    // -revertdiffskyfile
     
    267283    PXOPT_ADD_MODE("-todiffskyfile",    "", DIFFTOOL_MODE_TODIFFSKYFILE,     todiffskyfileArgs);
    268284    PXOPT_ADD_MODE("-adddiffskyfile",   "", DIFFTOOL_MODE_ADDDIFFSKYFILE,    adddiffskyfileArgs);
     285    PXOPT_ADD_MODE("-advance",          "", DIFFTOOL_MODE_ADVANCE,           advanceArgs);
    269286    PXOPT_ADD_MODE("-diffskyfile",      "", DIFFTOOL_MODE_DIFFSKYFILE,       diffskyfileArgs);
    270287    PXOPT_ADD_MODE("-revertdiffskyfile","", DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileArgs);
  • branches/eam_branches/20090820/ippTools/src/disttool.c

    r25031 r25766  
    22 * disttool.c
    33 *
    4  * Copyright (C) 2008
     4 * Copyright (C) 2008-2009
    55 *
    66 * This program is free software; you can redistribute it and/or modify it
     
    3737static bool pendingcomponentMode(pxConfig *config);
    3838static bool addprocessedcomponentMode(pxConfig *config);
     39static bool revertcomponentMode(pxConfig *config);
    3940static bool processedcomponentMode(pxConfig *config);
    4041static bool toadvanceMode(pxConfig *config);
     
    5152static bool listtargetMode(pxConfig *config);
    5253
    53 static bool definedsproductMode(pxConfig *config);
    54 static bool updatedsproductMode(pxConfig *config);
    55 
    5654static bool definedestinationMode(pxConfig *config);
    5755static bool updatedestinationMode(pxConfig *config);
     
    5957static bool defineinterestMode(pxConfig *config);
    6058static bool updateinterestMode(pxConfig *config);
     59static bool listinterestsMode(pxConfig *config);
    6160
    6261# define MODECASE(caseName, func) \
     
    8685        MODECASE(DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, addprocessedcomponentMode);
    8786        MODECASE(DISTTOOL_MODE_PROCESSEDCOMPONENT, processedcomponentMode);
     87        MODECASE(DISTTOOL_MODE_REVERTCOMPONENT, revertcomponentMode);
    8888        MODECASE(DISTTOOL_MODE_TOADVANCE, toadvanceMode);
    8989        MODECASE(DISTTOOL_MODE_PENDINGFILESET, pendingfilesetMode);
     
    9797        MODECASE(DISTTOOL_MODE_UPDATETARGET, updatetargetMode);
    9898        MODECASE(DISTTOOL_MODE_LISTTARGET, listtargetMode);
    99         MODECASE(DISTTOOL_MODE_DEFINEDSPRODUCT, definedsproductMode);
    100         MODECASE(DISTTOOL_MODE_UPDATEDSPRODUCT, updatedsproductMode);
    10199        MODECASE(DISTTOOL_MODE_DEFINEDESTINATION, definedestinationMode);
    102100        MODECASE(DISTTOOL_MODE_UPDATEDESTINATION, updatedestinationMode);
    103101        MODECASE(DISTTOOL_MODE_DEFINEINTEREST, defineinterestMode);
    104102        MODECASE(DISTTOOL_MODE_UPDATEINTEREST, updateinterestMode);
     103        MODECASE(DISTTOOL_MODE_LISTINTERESTS, listinterestsMode);
    105104        default:
    106105            psAbort("invalid option (this should not happen)");
     
    151150            stage,
    152151            stage_id,
     152            0,
    153153            set_label,
    154154            outroot,
     
    223223        }
    224224    } else if (!strcmp(stage, "camera")) {
    225         magicRunType = "chipRun";    // This is used below to set the magicked business
     225        magicRunType = "camRun";    // This is used below to set the magicked business
     226        runJoinStr = "camRun.cam_id";
    226227        query = pxDataGet("disttool_definebyquery_camera.sql");
    227228        if (!query) {
     
    288289            psStringAppend(&query, " AND (stackRun.label = '%s')", label);
    289290        }
    290         // stack stage doesn't require magic (perhaps let the script do this?
     291        // stack stage doesn't require magic
    291292        no_magic = true;
    292293    } else {
     
    306307
    307308    if (!no_magic) {
    308         psStringAppend(&query, " AND (distTarget.clean OR %s.magicked)", magicRunType);
     309        psStringAppend(&query, " AND (%s.magicked)", magicRunType);
    309310
    310311        // is selecting by magic_ds_id really interesting?
    311312        if (magic_ds_id) {
    312             if (strcmp(stage, "camera")) {
    313                 // stage other than camera
    314                 if (!runJoinStr) {
    315                     psError(PS_ERR_PROGRAMMING, true, "cannot select by magic_ds_id for stage: %s", stage);
    316                     psFree(query);
    317                     return false;
    318                 }
    319                 psStringAppend(&joinHook, "\nJOIN magicDSRun ON magicDSRun.stage = distTarget.stage"
     313            if (!runJoinStr) {
     314                psError(PS_ERR_PROGRAMMING, true, "cannot select by magic_ds_id for stage: %s", stage);
     315                psFree(query);
     316                return false;
     317            }
     318            psStringAppend(&joinHook, "\nJOIN magicDSRun ON magicDSRun.stage = distTarget.stage"
    320319                                              " AND magicDSRun.stage_id = %s", runJoinStr);
    321             } else {
    322                 // camera masks are magicked when the chipRun is magicked
    323                 // XXX: This is confusing. Is it dangerous?
    324                 // Maybe I should add a magicked bit to camRun. Note this isn't
    325                 psStringAppend(&joinHook, "\nJOIN magicDSRun ON magicDSRun.stage = 'chip'"
    326                                               " AND magicDSRun.stage_id = chipRun.chip_id");
    327             }
    328320            psStringAppend(&query, " AND (magicDSRun.state = 'full' AND magicDSRun.re_place AND (magic_ds_id = %" PRId64 "))", magic_ds_id);
    329321        }
     
    377369        psString run_tag = psMetadataLookupStr(NULL, md, "run_tag");
    378370        psS64 stage_id = psMetadataLookupS64(NULL, md, "stage_id");
     371        psS64 magic_ds_id = psMetadataLookupS64(NULL, md, "magicked");
    379372        psS64 target_id = psMetadataLookupS64(NULL, md, "target_id");
    380373        psString target_label = psMetadataLookupStr(NULL, md, "label");
     
    395388                stage,
    396389                stage_id,
     390                magic_ds_id,
    397391                new_label,
    398392                outroot,
     
    500494    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
    501495
    502     // we need to disambiguate fault so make a copy of the where list before adding fault
    503     psMetadata *whereComponent = psMetadataCopy(NULL, where);
    504496    PXOPT_COPY_S16(config->args, where,  "-fault", "distRun.fault", "==");
    505     PXOPT_COPY_S16(config->args, whereComponent, "-fault", "distComponent.fault", "==");
    506497
    507498    // It might be useful to be able to query by the parameters of the underlying runs
     
    513504    }
    514505
    515     if (!psDBTransaction(config->dbh)) {
    516         psError(PS_ERR_UNKNOWN, false, "database error");
     506    psString query = pxDataGet("disttool_revertrun.sql");
     507    if (!query) {
     508        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     509        if (!psDBRollback(config->dbh)) {
     510            psError(PS_ERR_UNKNOWN, false, "database error");
     511        }
     512        return false;
     513    }
     514
     515    if (psListLength(where->list)) {
     516        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     517        psStringAppend(&query, " AND %s", whereClause);
     518        psFree(whereClause);
     519    }
     520    psFree(where);
     521
     522    if (!p_psDBRunQuery(config->dbh, query)) {
     523        psError(PS_ERR_UNKNOWN, false, "database error");
     524        psFree(query);
     525        return false;
     526    }
     527
     528    int numUpdated = psDBAffectedRows(config->dbh);
     529
     530    psLogMsg("disttool", PS_LOG_INFO, "Updated %d dist runs", numUpdated);
     531
     532    return true;
     533}
     534
     535static bool revertcomponentMode(pxConfig *config)
     536{
     537    psMetadata *where = psMetadataAlloc();
     538    PXOPT_COPY_S64(config->args, where, "-dist_id", "distRun.dist_id", "==");
     539    PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");;
     540    PXOPT_COPY_STR(config->args, where, "-component", "component", "==");;
     541    PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
     542    PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
     543    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
     544
     545    PXOPT_COPY_S16(config->args, where,  "-fault", "distComponent.fault", "==");
     546
     547    // It might be useful to be able to query by the parameters of the underlying runs
     548
     549    if (!psListLength(where->list) && !psMetadataLookupBool(NULL, config->args, "-all")) {
    517550        psFree(where);
    518         return false;
    519     }
    520 
    521     // Update state to 'new'
    522     int numUpdated;                     // Number updated
    523     {
    524         psString query = pxDataGet("disttool_revertrun_update.sql");
    525         if (!query) {
    526             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    527             if (!psDBRollback(config->dbh)) {
    528                 psError(PS_ERR_UNKNOWN, false, "database error");
    529             }
    530             return false;
    531         }
    532 
    533         if (psListLength(where->list)) {
    534             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    535             psStringAppend(&query, " AND %s", whereClause);
    536             psFree(whereClause);
    537         }
    538 
    539         if (!p_psDBRunQuery(config->dbh, query)) {
    540             psError(PS_ERR_UNKNOWN, false, "database error");
    541             psFree(query);
    542             if (!psDBRollback(config->dbh)) {
    543                 psError(PS_ERR_UNKNOWN, false, "database error");
    544             }
    545             return false;
    546         }
    547         psFree(query);
    548 
    549         numUpdated = psDBAffectedRows(config->dbh);
    550     }
    551 
    552     psLogMsg("disttool", PS_LOG_INFO, "Updated %d dist runs", numUpdated);
    553 
    554     // Delete product
    555     int numDeleted;                     // Number deleted
    556     {
    557         psString query = pxDataGet("disttool_revertrun_delete.sql");
    558         if (!query) {
    559             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    560             if (!psDBRollback(config->dbh)) {
    561                 psError(PS_ERR_UNKNOWN, false, "database error");
    562             }
    563             return false;
    564         }
    565 
    566         if (psListLength(whereComponent->list)) {
    567             psString whereClause = psDBGenerateWhereConditionSQL(whereComponent, NULL);
    568             psStringAppend(&query, " AND %s", whereClause);
    569             psFree(whereClause);
    570         }
    571 
    572         if (!p_psDBRunQuery(config->dbh, query)) {
    573             psError(PS_ERR_UNKNOWN, false, "database error");
    574             psFree(query);
    575             if (!psDBRollback(config->dbh)) {
    576                 psError(PS_ERR_UNKNOWN, false, "database error");
    577             }
    578             return false;
    579         }
    580         psFree(query);
    581 
    582         numDeleted = psDBAffectedRows(config->dbh);
    583     }
     551        psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     552        return false;
     553    }
     554
     555    psString query = pxDataGet("disttool_revertcomponent.sql");
     556    if (!query) {
     557        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     558        psFree(where);
     559        return false;
     560    }
     561
     562    if (psListLength(where->list)) {
     563        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     564        psStringAppend(&query, " AND %s", whereClause);
     565        psFree(whereClause);
     566    }
     567    psFree(where);
     568
     569    if (!p_psDBRunQuery(config->dbh, query)) {
     570        psError(PS_ERR_UNKNOWN, false, "database error");
     571        psFree(query);
     572        return false;
     573    }
     574
     575    int numDeleted = psDBAffectedRows(config->dbh);
    584576
    585577    psLogMsg("disttool", PS_LOG_INFO, "Deleted %d distComponents", numDeleted);
    586578
    587     psFree(where);
    588     psFree(whereComponent);
    589 
    590     if (!psDBCommit(config->dbh)) {
    591         psError(PS_ERR_UNKNOWN, false, "database error");
    592         return false;
    593     }
    594 
    595579    return true;
    596580}
     
    600584    PS_ASSERT_PTR_NON_NULL(config, false);
    601585
     586    PXOPT_LOOKUP_STR(stage, config->args, "-stage", true, false);
     587
    602588    psMetadata *where = psMetadataAlloc();
    603589    PXOPT_COPY_S64(config->args, where, "-dist_id", "dist_id", "==");
    604     PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");
    605     pxAddLabelSearchArgs (config, where, "-label", "label", "==");
     590    pxAddLabelSearchArgs (config, where, "-label", "distRun.label", "==");
    606591
    607592    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    608593    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    609594
    610     // look for "inputs" that need to processed
    611     psString query = pxDataGet("disttool_pendingcomponent.sql");
     595    psString queryFile = NULL;
     596    psStringAppend(&queryFile, "disttool_pending_%s.sql", stage);
     597    psString query = pxDataGet(queryFile);
    612598    if (!query) {
    613         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     599        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement from %s", queryFile);
    614600        return false;
    615601    }
     
    617603    if (psListLength(where->list)) {
    618604        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    619         psStringAppend(&query, " WHERE %s", whereClause);
     605        psStringAppend(&query, " AND %s", whereClause);
    620606        psFree(whereClause);
    621607    }
     
    629615    }
    630616
    631     // the query has where hooks for each stage.
    632     // right now we aren't using them.
    633     // XXX: I think that I want to change the query from a union of selects on the various
    634     // stages to separate queries. As it is pending data at the later stages of the pipline
    635     // will get blocked by pending earlier stages
    636     psString    raw_where = "";
    637     psString    raw_clean_where = "";
    638     psString    chip_where = "";
    639     psString    camera_where = "";
    640     psString    fake_where = "";
    641     psString    warp_where = "";
    642     psString    diff_where = "";
    643     psString    stack_where = "";
    644 
    645     if (!p_psDBRunQueryF(config->dbh,
    646             query,
    647             raw_where,
    648             raw_clean_where,
    649             chip_where,
    650             camera_where,
    651             fake_where,
    652             warp_where,
    653             diff_where,
    654             stack_where)) {
     617    if (!p_psDBRunQuery(config->dbh, query)) {
    655618        psError(PS_ERR_UNKNOWN, false, "database error");
    656619        psFree(query);
     
    868831    psMetadata *where = psMetadataAlloc();
    869832    PXOPT_COPY_S64(config->args, where, "-dist_id", "dist_id", "==");
     833    PXOPT_COPY_STR(config->args, where, "-stage", "distRun.stage", "==");
    870834    pxAddLabelSearchArgs (config, where, "-label", "distRun.label", "==");
    871835
     
    939903    // required values
    940904    PXOPT_LOOKUP_S64(dist_id, config->args, "-dist_id", true, false);
    941     PXOPT_LOOKUP_S64(prod_id, config->args, "-prod_id", true, false);
     905    PXOPT_LOOKUP_S64(dest_id, config->args, "-dest_id", true, false);
    942906
    943907    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
     
    949913            0,          // fs_id
    950914            dist_id,
    951             prod_id,
     915            dest_id,
    952916            name,
    953917            "full",
     
    964928    PXOPT_COPY_S64(config->args, where, "-fs_id", "fs_id", "==");
    965929    PXOPT_COPY_S64(config->args, where, "-dist_id", "rcDSFileset.dist_id", "==");
    966     PXOPT_COPY_S64(config->args, where, "-prod_id", "prod_id", "==");
     930    PXOPT_COPY_S64(config->args, where, "-dest_id", "dest_id", "==");
    967931    PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");;
    968932    PXOPT_COPY_S64(config->args, where, "-stage_id", "stage_id", "==");
     
    10921056    PXOPT_COPY_S64(config->args, where, "-dist_id",  "dist_id", "==");
    10931057    PXOPT_COPY_S64(config->args, where, "-dest_id",  "dest_id", "==");
    1094     PXOPT_COPY_S64(config->args, where, "-prod_id",  "prod_id", "==");
    10951058    PXOPT_COPY_S64(config->args, where, "-target_id","target_id", "==");
    10961059    PXOPT_COPY_S64(config->args, where, "-fs_id",    "fs_id", "==");
     
    14331396}
    14341397
    1435 static bool definedsproductMode(pxConfig *config)
     1398static bool definedestinationMode(pxConfig *config)
    14361399{
    14371400    PS_ASSERT_PTR_NON_NULL(config, false);
    14381401
    14391402    // required
    1440     PXOPT_LOOKUP_STR(name, config->args,   "-name", true, false);
    1441     PXOPT_LOOKUP_STR(dbname, config->args, "-ds_dbname", true, false);
    1442     PXOPT_LOOKUP_STR(dbhost, config->args, "-ds_dbhost", true, false);
    1443 
    1444     // XXX: should we insure that these names do not contatin any whitespace?
    1445 
    1446     rcDSProductRow *row = rcDSProductRowAlloc(
    1447             0,          // prod_id
    1448             name,
    1449             dbname,
    1450             dbhost
    1451             );
    1452            
    1453     if (!row) {
    1454         psError(PS_ERR_UNKNOWN, false, "failed to allocate rcDSProduct object");
    1455         return false;
    1456     }
    1457    if (!rcDSProductInsertObject(config->dbh, row)) {
    1458         psError(PS_ERR_UNKNOWN, false, "database error");
    1459         psFree(row);
    1460         return false;
    1461     }
    1462 
    1463     // get the assigned target_id
    1464     row->prod_id = psDBLastInsertID(config->dbh);
    1465 
    1466     if (!rcDSProductPrintObject(stdout, row, true)) {
    1467         psError(PS_ERR_UNKNOWN, false, "failed to print object");
    1468         psFree(row);
    1469         return false;
    1470     }
    1471 
    1472     psFree(row);
    1473 
    1474     return true;
    1475 }
    1476 static bool updatedsproductMode(pxConfig *config)
    1477 {
    1478     PS_ASSERT_PTR_NON_NULL(config, false);
    1479 
    1480     psMetadata *where = psMetadataAlloc();
    1481     PXOPT_COPY_S64(config->args, where, "-prod_id", "prod_id", "==");
    1482 
    1483     PXOPT_LOOKUP_STR(dbname, config->args, "-ds_dbname", false, false);
    1484     PXOPT_LOOKUP_STR(dbhost, config->args, "-ds_dbhost", false, false);
    1485 
    1486     if (!(dbname || dbhost)) {
    1487         psError(PS_ERR_UNKNOWN, true, "one or more of dbname or dbhost is required");
    1488         psFree(where);
    1489         return false;
    1490     }
    1491     psString query = psStringCopy("UPDATE rcDSProduct SET");
    1492     psString sep = "";
    1493     if (dbname) {
    1494         psStringAppend(&query, " dbname = '%s'", dbname);
    1495         sep = ",";
    1496     }
    1497     if (dbhost) {
    1498         psStringAppend(&query, " %s dbhost = '%s'", sep, dbhost);
    1499     }
    1500 
    1501     if (psListLength(where->list)) {
    1502         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1503         psStringAppend(&query, " WHERE %s", whereClause);
    1504         psFree(whereClause);
    1505     } else {
    1506         psError(PS_ERR_UNKNOWN, true, "search parameters are required");
    1507         psFree(where);
    1508         psFree(query);
    1509         return false;
    1510     }
    1511     psFree(where);
    1512 
    1513     if (!p_psDBRunQuery(config->dbh, query)) {
    1514         psError(PS_ERR_UNKNOWN, false, "database error");
    1515         psFree(query);
    1516         return false;
    1517     }
    1518     psFree(query);
    1519 
    1520     return true;
    1521 }
    1522 
    1523 static bool definedestinationMode(pxConfig *config)
    1524 {
    1525     PS_ASSERT_PTR_NON_NULL(config, false);
    1526 
    1527     // required
    1528     PXOPT_LOOKUP_S64(prod_id, config->args,      "-prod_id", true, false);
    15291403    PXOPT_LOOKUP_STR(name, config->args,         "-name", true, false);
     1404    PXOPT_LOOKUP_STR(dbname, config->args,       "-ds_dbname", true, false);
     1405    PXOPT_LOOKUP_STR(dbhost, config->args,       "-ds_dbhost", true, false);
    15301406
    15311407    // optional
     
    15391415    rcDestinationRow *row = rcDestinationRowAlloc(
    15401416            0,          // dest_id
    1541             prod_id,
    15421417            name,
    15431418            status_uri,
    15441419            comment,
    15451420            last_fileset,
     1421            dbname,
     1422            dbhost,
    15461423            state ? state : "enabled"
    15471424            );
     
    15771454    psMetadata *where = psMetadataAlloc();
    15781455    PXOPT_COPY_S64(config->args, where, "-dest_id", "dest_id", "==");
    1579     PXOPT_COPY_S64(config->args, where, "-prod_id", "prod_id", "==");
    15801456
    15811457    PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
     
    15991475    // last_fileset normally gets set by updatercrunMode
    16001476    // Allowing it to be set here might cause problems
    1601     // especially since we are allowing selection by prod_id
     1477    // especially since we are allowing selection by dest_id
    16021478    if (last_fileset) {
    16031479        psStringAppend(&query, " %s last_fileset = '%s'", sep, last_fileset);
     
    16311507    PS_ASSERT_PTR_NON_NULL(config, false);
    16321508
    1633     // required
    1634     PXOPT_LOOKUP_S64(dest_id, config->args,      "-dest_id", true, false);
    1635     PXOPT_LOOKUP_S64(target_id, config->args,    "-target_id", true, false);
     1509    // one of these is required
     1510    PXOPT_LOOKUP_S64(dest_id, config->args,      "-dest_id", false, false);
     1511    PXOPT_LOOKUP_STR(dest_name, config->args,    "-dest_name", false, false);
     1512    if (!dest_id && !dest_name) {
     1513        psError(PS_ERR_UNKNOWN, true, "either dest_id or dest_name is required");
     1514        return false;
     1515    }
     1516
     1517    // either target_id or stage and label are required
     1518    PXOPT_LOOKUP_S64(target_id, config->args,    "-target_id", false, false);
     1519    PXOPT_LOOKUP_STR(stage, config->args,        "-stage", false, false);
     1520    PXOPT_LOOKUP_STR(label, config->args,        "-label", false, false);
     1521    PXOPT_LOOKUP_STR(filter, config->args,       "-filter", false, false);
     1522    PXOPT_LOOKUP_BOOL(clean, config->args,       "-clean", false);
     1523
     1524    if (!target_id) {
     1525        bool error = false;
     1526        if (!stage) {
     1527            psError(PS_ERR_UNKNOWN, true, "stage is required if target_id is not supplied");
     1528            error = true;
     1529        }
     1530        if (!label) {
     1531            psError(PS_ERR_UNKNOWN, !error, "label is required if target_id is not supplied");
     1532            error = true;
     1533        }
     1534        if (error) {
     1535            return false;
     1536        }
     1537    }
    16361538
    16371539    // optional
     1540    PXOPT_LOOKUP_S64(limit, config->args, "-limit", false, false);
    16381541    PXOPT_LOOKUP_STR(state, config->args,        "-set_state", false, false);
    1639 
    1640     // XXX: should we insure that these names do not contatin any whitespace?
    1641 
    1642     rcInterestRow *row = rcInterestRowAlloc(
    1643             0,          // int_id
    1644             dest_id,
    1645             target_id,
    1646             state ? state : "enabled"
    1647             );
    1648            
    1649     if (!row) {
    1650         psError(PS_ERR_UNKNOWN, false, "failed to allocate rcInterest object");
    1651         return false;
    1652     }
    1653    if (!rcInterestInsertObject(config->dbh, row)) {
    1654         psError(PS_ERR_UNKNOWN, false, "database error");
    1655         psFree(row);
    1656         return false;
    1657     }
    1658 
    1659     // get the assigned target_id
    1660     row->int_id = psDBLastInsertID(config->dbh);
    1661 
    1662     if (!rcInterestPrintObject(stdout, row, true)) {
    1663         psError(PS_ERR_UNKNOWN, false, "failed to print object");
    1664         psFree(row);
    1665         return false;
    1666     }
    1667 
    1668     psFree(row);
     1542    if (state) {
     1543        if (strcmp(state, "enabled") && strcmp(state, "disabled")) {
     1544            psError(PS_ERR_PROGRAMMING, true, "state must be enabled or disabled");
     1545            return false;
     1546        }
     1547    } else {
     1548        // default state
     1549        state = "enabled";
     1550    }
     1551
     1552    // now that we've done all of our argument checking, copy the values to where
     1553    psMetadata *where = psMetadataAlloc();
     1554    PXOPT_COPY_S64(config->args, where, "-dest_id", "dest_id", "==");
     1555    PXOPT_COPY_STR(config->args, where, "-dest_name", "rcDestination.name", "==");
     1556    PXOPT_COPY_S64(config->args, where, "-target_id", "target_id", "==");
     1557    PXOPT_COPY_STR(config->args, where, "-label", "label", "LIKE");
     1558    PXOPT_COPY_STR(config->args, where, "-filter", "filter", "LIKE");
     1559    PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");
     1560
     1561    psString query = pxDataGet("disttool_defineinterest.sql");
     1562
     1563    if (!psListLength(where->list)) {
     1564        // can't get here
     1565        psError(PS_ERR_PROGRAMMING, true, "search parameters are required");
     1566        psFree(where);
     1567        psFree(query);
     1568        return false;
     1569    }
     1570    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1571    psStringAppend(&query, " AND %s", whereClause);
     1572    psFree(whereClause);
     1573    psFree(where);
     1574    if (clean) {
     1575        psStringAppend(&query, " AND (distTarget.clean)");
     1576    } else {
     1577        psStringAppend(&query, " AND (!distTarget.clean)");
     1578    }
     1579    if (limit) {
     1580        psString limitString = psDBGenerateLimitSQL(limit);
     1581        psStringAppend(&query, " %s", limitString);
     1582        psFree(limitString);
     1583    }
     1584    {
     1585        // psStringSubstitute fails unless the input is a psString which it determines by
     1586        // comparing the memory blocks free function to an expected value.
     1587        // pxDataGet uses psSlurp which leaves a different free function on the memory block.
     1588        // To work around this make a copy of the query before doing the substitution.
     1589        psString queryCopy = psStringCopy(query);
     1590        psFree(query);
     1591        query = queryCopy;
     1592    }
     1593    // change the @STATE@ in the sql file to our state
     1594    if (!psStringSubstitute(&query, state, "@STATE@")) {
     1595        psError(PS_ERR_UNKNOWN, false, "failed to substitute state string");
     1596        return false;
     1597    }
     1598
     1599    if (!p_psDBRunQuery(config->dbh, query)) {
     1600        psError(PS_ERR_UNKNOWN, false, "database error");
     1601        psFree(query);
     1602        return false;
     1603    }
     1604    psFree(query);
     1605    int numInserted = psDBAffectedRows(config->dbh);
     1606    printf("inserted %d rows into rcInterest\n", numInserted);
    16691607
    16701608    return true;
     
    17101648    return true;
    17111649}
    1712 
     1650static bool listinterestsMode(pxConfig *config)
     1651{
     1652    PS_ASSERT_PTR_NON_NULL(config, false);
     1653
     1654    psMetadata *where = psMetadataAlloc();
     1655    PXOPT_COPY_S64(config->args, where, "-int_id", "int_id", "==");
     1656    PXOPT_COPY_S64(config->args, where, "-dest_id", "dest_id", "==");
     1657    PXOPT_COPY_STR(config->args, where, "-dest_name", "name", "==");
     1658    PXOPT_COPY_S64(config->args, where, "-target_id", "target_id", "==");
     1659    PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");
     1660    PXOPT_COPY_STR(config->args, where, "-label", "label", "LIKE");
     1661    PXOPT_COPY_STR(config->args, where, "-filter", "filter", "LIKE");
     1662    PXOPT_COPY_STR(config->args, where, "-state", "state", "==");
     1663
     1664    PXOPT_LOOKUP_BOOL(clean, config->args, "-clean", false);
     1665    PXOPT_LOOKUP_BOOL(full, config->args, "-full", false);
     1666
     1667    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1668    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1669
     1670    if (clean && full) {
     1671        psError(PS_ERR_UNKNOWN, false, "can't select both -clean and -full");
     1672        return false;
     1673    }
     1674
     1675    psString query = pxDataGet("disttool_listinterests.sql");
     1676
     1677    if (psListLength(where->list)) {
     1678        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1679        psStringAppend(&query, " WHERE %s", whereClause);
     1680        psFree(whereClause);
     1681        if (clean) {
     1682            psStringAppend(&query, " AND (clean)");
     1683        } else if (full) {
     1684            psStringAppend(&query, " AND (!clean)");
     1685        }
     1686    } else if (clean) {
     1687        psStringAppend(&query, " WHERE clean");
     1688    } else if (full) {
     1689        psStringAppend(&query, " WHERE !clean");
     1690    }
     1691    psFree(where);
     1692
     1693    // treat limit == 0 as "no limit"
     1694    if (limit) {
     1695        psString limitString = psDBGenerateLimitSQL(limit);
     1696        psStringAppend(&query, " %s", limitString);
     1697        psFree(limitString);
     1698    }
     1699
     1700    if (!p_psDBRunQuery(config->dbh, query)) {
     1701        psError(PS_ERR_UNKNOWN, false, "database error");
     1702        psFree(query);
     1703        if (!psDBRollback(config->dbh)) {
     1704            psError(PS_ERR_UNKNOWN, false, "database error");
     1705        }
     1706        return false;
     1707    }
     1708    psFree(query);
     1709
     1710    psArray *output = p_psDBFetchResult(config->dbh);
     1711    if (!output) {
     1712        psError(PS_ERR_UNKNOWN, false, "database error");
     1713        return false;
     1714    }
     1715    if (!psArrayLength(output)) {
     1716        psTrace("disttool", PS_LOG_INFO, "no rows found");
     1717        psFree(output);
     1718        return true;
     1719    }
     1720
     1721    if (!ippdbPrintMetadatas(stdout, output, "rcInterest", !simple)) {
     1722        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1723        psFree(output);
     1724        return false;
     1725    }
     1726
     1727    psFree(output);
     1728
     1729    return true;
     1730}
  • branches/eam_branches/20090820/ippTools/src/disttool.h

    r24001 r25766  
    3131    DISTTOOL_MODE_PENDINGCOMPONENT,
    3232    DISTTOOL_MODE_ADDPROCESSEDCOMPONENT,
     33    DISTTOOL_MODE_REVERTCOMPONENT,
    3334    DISTTOOL_MODE_PROCESSEDCOMPONENT,
    3435    DISTTOOL_MODE_TOADVANCE,
     
    4243    DISTTOOL_MODE_DEFINEDESTINATION,
    4344    DISTTOOL_MODE_UPDATEDESTINATION,
    44     DISTTOOL_MODE_DEFINEDSPRODUCT,
    45     DISTTOOL_MODE_UPDATEDSPRODUCT,
    4645    DISTTOOL_MODE_DEFINETARGET,
    4746    DISTTOOL_MODE_UPDATETARGET,
     
    4948    DISTTOOL_MODE_DEFINEINTEREST,
    5049    DISTTOOL_MODE_UPDATEINTEREST,
     50    DISTTOOL_MODE_LISTINTERESTS,
    5151} disttoolMode;
    5252
  • branches/eam_branches/20090820/ippTools/src/disttoolConfig.c

    r24871 r25766  
    9595    // -pendingcomponent
    9696    psMetadata *pendingcomponentArgs = psMetadataAlloc();
     97    psMetadataAddStr(pendingcomponentArgs, PS_LIST_TAIL, "-stage",    0, "limit results to runs for stage (required)", NULL);
    9798    psMetadataAddS64(pendingcomponentArgs, PS_LIST_TAIL, "-dist_id", 0, "define dist_id", 0);
    98     psMetadataAddStr(pendingcomponentArgs, PS_LIST_TAIL, "-stage",    0, "limit results to runs for stage", NULL);
    9999    psMetadataAddStr(pendingcomponentArgs, PS_LIST_TAIL, "-label",    PS_META_DUPLICATE_OK, "limit results to label", NULL);
    100100    psMetadataAddU64(pendingcomponentArgs, PS_LIST_TAIL, "-limit",  0,  "limit result set to N items", 0);
     
    111111    psMetadataAddS32(addprocessedcomponentArgs, PS_LIST_TAIL, "-fault", 0, "define fault code", 0);
    112112
     113    // -revertcomponent
     114    psMetadata *revertcomponentArgs = psMetadataAlloc();
     115    psMetadataAddS64(revertcomponentArgs, PS_LIST_TAIL, "-dist_id", 0, "define dist_id", 0);
     116    psMetadataAddStr(revertcomponentArgs, PS_LIST_TAIL, "-component", 0, "define component", NULL);
     117    psMetadataAddStr(revertcomponentArgs, PS_LIST_TAIL, "-stage",    0, "define stage", NULL);
     118    psMetadataAddS64(revertcomponentArgs, PS_LIST_TAIL, "-stage_id", 0, "define stage_id", 0);
     119    psMetadataAddStr(revertcomponentArgs, PS_LIST_TAIL, "-state",    0, "define state", NULL);
     120    psMetadataAddStr(revertcomponentArgs, PS_LIST_TAIL, "-label",    0, "define label", NULL);
     121    psMetadataAddS16(revertcomponentArgs, PS_LIST_TAIL, "-fault", 0, "define fault code", 0);
     122    psMetadataAddBool(revertcomponentArgs, PS_LIST_TAIL, "-all",    0, "revert all faulted runs", NULL);
     123
    113124    // -processedcomponent
    114125    psMetadata *processedcomponentArgs = psMetadataAlloc();
     
    135146    psMetadata *addfilesetArgs = psMetadataAlloc();
    136147    psMetadataAddS64(addfilesetArgs, PS_LIST_TAIL, "-dist_id", 0, "define dist_id", 0);
    137     psMetadataAddS64(addfilesetArgs, PS_LIST_TAIL, "-prod_id", 0, "define prod_id", 0);
     148    psMetadataAddS64(addfilesetArgs, PS_LIST_TAIL, "-dest_id", 0, "define dest_id", 0);
    138149    psMetadataAddStr(addfilesetArgs, PS_LIST_TAIL, "-name",    0, "define file name", NULL);
    139150    psMetadataAddS32(addfilesetArgs, PS_LIST_TAIL, "-fault",   0, "define fault code", 0);
     
    150161    psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-fs_id",   0, "define fs_id", 0);
    151162    psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-dist_id", 0, "define dist_id", 0);
    152     psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-prod_id", 0, "define dist_id", 0);
     163    psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-dest_id", 0, "define dist_id", 0);
    153164    psMetadataAddStr(revertfilesetArgs, PS_LIST_TAIL, "-stage",   0, "define stage", NULL);
    154165    psMetadataAddS64(revertfilesetArgs, PS_LIST_TAIL, "-stage_id",0, "define stage_id", 0);
     
    162173    psMetadataAddS64(queuercrunArgs, PS_LIST_TAIL, "-dist_id",   0, "define dist_id", 0);
    163174    psMetadataAddS64(queuercrunArgs, PS_LIST_TAIL, "-dest_id",   0, "define dest_id", 0);
    164     psMetadataAddS64(queuercrunArgs, PS_LIST_TAIL, "-prod_id",   0, "define prod_id", 0);
    165175    psMetadataAddS64(queuercrunArgs, PS_LIST_TAIL, "-target_id", 0, "define target_id", 0);
    166176    psMetadataAddS64(queuercrunArgs, PS_LIST_TAIL, "-fs_id",     0, "define fs_id", 0);
     
    189199    psMetadataAddBool(revertrcrunArgs, PS_LIST_TAIL, "-all",     0, "revert all faulted runs", NULL);
    190200
    191     // -definedsproduct
    192     psMetadata *definedsproductArgs = psMetadataAlloc();
    193     psMetadataAddStr(definedsproductArgs, PS_LIST_TAIL, "-name",  0, "define product name", NULL);
    194     psMetadataAddStr(definedsproductArgs, PS_LIST_TAIL, "-ds_dbname",0, "define data store database name", NULL);
    195     psMetadataAddStr(definedsproductArgs, PS_LIST_TAIL, "-ds_dbhost",0, "define data store database host", NULL);
    196 
    197     // -updatedsproduct
    198     // does this mode make sense?
    199     psMetadata *updatedsproductArgs = psMetadataAlloc();
    200     psMetadataAddS64(updatedsproductArgs, PS_LIST_TAIL, "-prod_id",   0, "select by prod_id", 0);
    201     // can't select by name because it isn't necssarily unique
    202     psMetadataAddStr(updatedsproductArgs, PS_LIST_TAIL, "-ds_dbname",0, "define data store database name", NULL);
    203     psMetadataAddStr(updatedsproductArgs, PS_LIST_TAIL, "-ds_dbhost",0, "define data store database host", NULL);
    204 
    205201    // -definedestination
    206202    psMetadata *definedestinationArgs = psMetadataAlloc();
    207     psMetadataAddS64(definedestinationArgs, PS_LIST_TAIL, "-prod_id",     0, "define prod_id (required)", 0);
    208203    psMetadataAddStr(definedestinationArgs, PS_LIST_TAIL, "-name",        0, "define destination name (required)", NULL);
     204    psMetadataAddStr(definedestinationArgs, PS_LIST_TAIL, "-ds_dbname",0, "define data store database name (required)", NULL);
     205    psMetadataAddStr(definedestinationArgs, PS_LIST_TAIL, "-ds_dbhost",0, "define data store database host (required)", NULL);
    209206    psMetadataAddStr(definedestinationArgs, PS_LIST_TAIL, "-status_uri",  0, "define status_uri", NULL);
    210207    psMetadataAddStr(definedestinationArgs, PS_LIST_TAIL, "-comment",     0, "define comment", NULL);
     
    215212    psMetadata *updatedestinationArgs = psMetadataAlloc();
    216213    psMetadataAddS64(updatedestinationArgs, PS_LIST_TAIL, "-dest_id",     0, "define dest_id", 0);
    217     psMetadataAddS64(updatedestinationArgs, PS_LIST_TAIL, "-prod_id",     0, "define prod_id", 0);
    218214    psMetadataAddStr(updatedestinationArgs, PS_LIST_TAIL, "-name",        0, "define destination name", NULL);
    219215    psMetadataAddStr(updatedestinationArgs, PS_LIST_TAIL, "-status_uri",  0, "define status_uri", NULL);
    220216    psMetadataAddStr(updatedestinationArgs, PS_LIST_TAIL, "-comment",     0, "define comment", NULL);
    221 //  last_fileset gets updated by -updatercrun
    222 //  psMetadataAddStr(updatedestinationArgs, PS_LIST_TAIL, "-set_last_fileset",0, "define last_fileset", NULL);
    223217    psMetadataAddStr(updatedestinationArgs, PS_LIST_TAIL, "-set_state",   0, "define state", NULL);
    224218
     
    254248    // -defineinterest
    255249    psMetadata *defineinterestArgs = psMetadataAlloc();
    256     psMetadataAddS64(defineinterestArgs, PS_LIST_TAIL, "-dest_id",   0, "define dest_id (required)", 0);
    257     psMetadataAddS64(defineinterestArgs, PS_LIST_TAIL, "-target_id", 0, "define target_id (required)", 0);
     250    psMetadataAddS64(defineinterestArgs, PS_LIST_TAIL, "-dest_id",   0, "define dest_id", 0);
     251    psMetadataAddStr(defineinterestArgs, PS_LIST_TAIL, "-dest_name", 0, "define destination name (LIKE comparison)", NULL);
     252    psMetadataAddS64(defineinterestArgs, PS_LIST_TAIL, "-target_id", 0, "define target_id", 0);
     253    psMetadataAddStr(defineinterestArgs, PS_LIST_TAIL, "-stage",     0, "define stage", NULL);
     254    psMetadataAddStr(defineinterestArgs, PS_LIST_TAIL, "-label",     0, "define label", NULL);
     255    psMetadataAddStr(defineinterestArgs, PS_LIST_TAIL, "-filter",    0, "define filter (LIKE comparison)", NULL);
     256    psMetadataAddBool(defineinterestArgs, PS_LIST_TAIL,"-clean",     0, "list clean targets", false);
    258257    psMetadataAddStr(defineinterestArgs, PS_LIST_TAIL, "-set_state", 0, "define state", NULL);
     258    psMetadataAddU64(defineinterestArgs, PS_LIST_TAIL, "-limit",     0, "limit number of targets listed to N", 0);
    259259
    260260    // -updateinterest
     
    265265    psMetadataAddStr(updateinterestArgs, PS_LIST_TAIL, "-set_state", 0, "define state (required)", NULL);
    266266
     267    // -listinterests
     268    psMetadata *listinterestsArgs = psMetadataAlloc();
     269    psMetadataAddS64(listinterestsArgs, PS_LIST_TAIL, "-target_id", 0, "list interests with target_id", 0);
     270    psMetadataAddS64(listinterestsArgs, PS_LIST_TAIL, "-dest_id", 0, "list interests with dest_id", 0);
     271    psMetadataAddS64(listinterestsArgs, PS_LIST_TAIL, "-int_id", 0, "list interests with int_id", 0);
     272    psMetadataAddStr(listinterestsArgs, PS_LIST_TAIL, "-dest_name",  0, "list interests for destinationn name)", NULL);
     273    psMetadataAddStr(listinterestsArgs, PS_LIST_TAIL, "-label",  0, "list interests for label (LIKE comparison)", NULL);
     274    psMetadataAddStr(listinterestsArgs, PS_LIST_TAIL, "-filter",    0, "list interests by filter (LIKE comparison)", NULL);
     275    psMetadataAddStr(listinterestsArgs, PS_LIST_TAIL, "-stage",     0, "list interests for stage", NULL);
     276    psMetadataAddBool(listinterestsArgs, PS_LIST_TAIL,"-clean",     0, "list clean interests", false);
     277    psMetadataAddBool(listinterestsArgs, PS_LIST_TAIL,"-full",      0, "list full interests", false);
     278    psMetadataAddStr(listinterestsArgs, PS_LIST_TAIL, "-state",     0, "list interests in state", NULL);
     279    psMetadataAddU64(listinterestsArgs, PS_LIST_TAIL, "-limit",     0, "limit number of interests listed to N", 0);
     280    psMetadataAddBool(listinterestsArgs, PS_LIST_TAIL, "-simple",  0, "use the simple output format", false);
     281
    267282    psMetadata *argSets = psMetadataAlloc();
    268283    psMetadata *modes = psMetadataAlloc();
     
    272287    PXOPT_ADD_MODE("-updaterun",    "", DISTTOOL_MODE_UPDATERUN, updaterunArgs);
    273288    PXOPT_ADD_MODE("-revertrun",    "", DISTTOOL_MODE_REVERTRUN, revertrunArgs);
    274     PXOPT_ADD_MODE("-pendingcomponent",       "", DISTTOOL_MODE_PENDINGCOMPONENT,    pendingcomponentArgs);
    275     PXOPT_ADD_MODE("-addprocessedcomponent",      "", DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, addprocessedcomponentArgs);
     289    PXOPT_ADD_MODE("-pendingcomponent",   "", DISTTOOL_MODE_PENDINGCOMPONENT,    pendingcomponentArgs);
     290    PXOPT_ADD_MODE("-addprocessedcomponent", "", DISTTOOL_MODE_ADDPROCESSEDCOMPONENT, addprocessedcomponentArgs);
     291    PXOPT_ADD_MODE("-revertcomponent",    "", DISTTOOL_MODE_REVERTCOMPONENT, revertcomponentArgs);
    276292    PXOPT_ADD_MODE("-processedcomponent", "", DISTTOOL_MODE_PROCESSEDCOMPONENT, processedcomponentArgs);
    277293    PXOPT_ADD_MODE("-toadvance",          "", DISTTOOL_MODE_TOADVANCE, toadvanceArgs);
     
    284300    PXOPT_ADD_MODE("-pendingdest",        "", DISTTOOL_MODE_PENDINGDEST, pendingdestArgs);
    285301
    286     PXOPT_ADD_MODE("-definedsproduct",    "", DISTTOOL_MODE_DEFINEDSPRODUCT, definedsproductArgs);
    287     PXOPT_ADD_MODE("-updatedsproduct",    "", DISTTOOL_MODE_UPDATEDSPRODUCT, updatedsproductArgs);
    288 //  PXOPT_ADD_MODE("-listdsproduct",      "", DISTTOOL_MODE_LISTDSPRODUCT, updatedsproductArgs);
    289 
    290302    PXOPT_ADD_MODE("-definedestination",  "", DISTTOOL_MODE_DEFINEDESTINATION, definedestinationArgs);
    291303    PXOPT_ADD_MODE("-updatedestination",  "", DISTTOOL_MODE_UPDATEDESTINATION, updatedestinationArgs);
     
    298310    PXOPT_ADD_MODE("-defineinterest",     "", DISTTOOL_MODE_DEFINEINTEREST, defineinterestArgs);
    299311    PXOPT_ADD_MODE("-updateinterest",     "", DISTTOOL_MODE_UPDATEINTEREST, updateinterestArgs);
    300 //  PXOPT_ADD_MODE("-listinterest",       "", DISTTOOL_MODE_LISTINTEREST, listinterestArgs);
     312    PXOPT_ADD_MODE("-listinterests",       "", DISTTOOL_MODE_LISTINTERESTS, listinterestsArgs);
    301313
    302314    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • branches/eam_branches/20090820/ippTools/src/faketool.c

    r24866 r25766  
    5252static bool tofullimfileMode(pxConfig *config);
    5353static bool topurgedimfileMode(pxConfig *config);
     54static bool toscrubbedimfileMode(pxConfig *config);
    5455static bool exportrunMode(pxConfig *config);
    5556static bool importrunMode(pxConfig *config);
     
    9192        MODECASE(FAKETOOL_MODE_TOFULLIMFILE,            tofullimfileMode);
    9293        MODECASE(FAKETOOL_MODE_TOPURGEDIMFILE,          topurgedimfileMode);
     94        MODECASE(FAKETOOL_MODE_TOSCRUBBEDIMFILE,        toscrubbedimfileMode);
    9395        MODECASE(FAKETOOL_MODE_EXPORTRUN,               exportrunMode);
    9496        MODECASE(FAKETOOL_MODE_IMPORTRUN,               importrunMode);
     
    12511253    return change_imfile_data_state(config, "purged", "goto_purged");
    12521254}
     1255static bool toscrubbedimfileMode(pxConfig *config)
     1256{
     1257     return change_imfile_data_state(config, "scrubbed", "goto_scrubbed");
     1258}
    12531259
    12541260bool exportrunMode(pxConfig *config)
  • branches/eam_branches/20090820/ippTools/src/faketool.h

    r23339 r25766  
    4545    FAKETOOL_MODE_TOFULLIMFILE,
    4646    FAKETOOL_MODE_TOPURGEDIMFILE,
     47    FAKETOOL_MODE_TOSCRUBBEDIMFILE,
    4748    FAKETOOL_MODE_EXPORTRUN,
    4849    FAKETOOL_MODE_IMPORTRUN
  • branches/eam_branches/20090820/ippTools/src/faketoolConfig.c

    r24866 r25766  
    301301    psMetadataAddStr(topurgedimfileArgs, PS_LIST_TAIL, "-class_id",  0,        "class ID to update", NULL);
    302302
     303    // -toscrubbedimfile
     304    psMetadata *toscrubbedimfileArgs = psMetadataAlloc();
     305    psMetadataAddS64(toscrubbedimfileArgs, PS_LIST_TAIL, "-fake_id", 0,         "fake ID to update", 0);
     306    psMetadataAddStr(toscrubbedimfileArgs, PS_LIST_TAIL, "-class_id", 0,        "class ID to update", NULL);
     307
    303308    // -exportrun
    304309    psMetadata *exportrunArgs = psMetadataAlloc();
     
    337342    PXOPT_ADD_MODE("-tofullimfile",        "set imfile state to full",               FAKETOOL_MODE_TOFULLIMFILE,         tofullimfileArgs);
    338343    PXOPT_ADD_MODE("-topurgedimfile",      "set imfile state to purged",             FAKETOOL_MODE_TOPURGEDIMFILE,       topurgedimfileArgs);
     344    PXOPT_ADD_MODE("-toscrubbedimfile",    "set imfile state to scrubbed",           FAKETOOL_MODE_TOSCRUBBEDIMFILE,     toscrubbedimfileArgs);
    339345    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", FAKETOOL_MODE_EXPORTRUN, exportrunArgs);
    340346    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           FAKETOOL_MODE_IMPORTRUN, importrunArgs);
  • branches/eam_branches/20090820/ippTools/src/magicdstool.c

    r25015 r25766  
    3737static bool todestreakMode(pxConfig *config);
    3838static bool adddestreakedfileMode(pxConfig *config);
     39static bool advancerunMode(pxConfig *config);
    3940static bool revertdestreakedfileMode(pxConfig *config);
    4041static bool getskycellsMode(pxConfig *config);
    4142static bool toremoveMode(pxConfig *config);
    42 static bool torestoreMode(pxConfig *config);
    4343static bool torevertMode(pxConfig *config);
     44static bool completedrevertMode(pxConfig *config);
    4445
    4546static bool setmagicDSRunState(pxConfig *config, psS64 magic_id, const char *state);
    46 static bool magicDSRunComplete(pxConfig *config, bool setmagicked);
    4747static bool magicDSGetIDs(pxConfig *config, psString stage, psS64 magic_id, psS64 *stage_id, psS64 *cam_id);
    4848
     
    7070        MODECASE(MAGICDSTOOL_MODE_TODESTREAK,          todestreakMode);
    7171        MODECASE(MAGICDSTOOL_MODE_ADDDESTREAKEDFILE,   adddestreakedfileMode);
     72        MODECASE(MAGICDSTOOL_MODE_ADVANCERUN,          advancerunMode);
    7273        MODECASE(MAGICDSTOOL_MODE_REVERTDESTREAKEDFILE,revertdestreakedfileMode);
    7374        MODECASE(MAGICDSTOOL_MODE_GETSKYCELLS,         getskycellsMode);
    7475        MODECASE(MAGICDSTOOL_MODE_TOREMOVE,            toremoveMode);
    75         MODECASE(MAGICDSTOOL_MODE_TORESTORE,           torestoreMode);
    7676        MODECASE(MAGICDSTOOL_MODE_TOREVERT,            torevertMode);
     77        MODECASE(MAGICDSTOOL_MODE_COMPLETEDREVERT,     completedrevertMode);
    7778        default:
    7879            psAbort("invalid option (this should not happen)");
     
    105106    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", false, false);
    106107    PXOPT_LOOKUP_STR(recoveryroot, config->args, "-recoveryroot", false, false);
    107     PXOPT_LOOKUP_BOOL(re_place, config->args, "-replace", false);
     108    PXOPT_LOOKUP_BOOL(noreplace, config->args, "-noreplace", false);
    108109    PXOPT_LOOKUP_STR(set_label, config->args, "-set_label", false, false);
    109110    PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false);
     
    119120    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
    120121    PXOPT_COPY_S64(config->args, where, "-diff_id", "diff_id", "==");
    121     PXOPT_COPY_S64(config->args, where, "-magic_id","magic_id", "==");
     122    PXOPT_COPY_S64(config->args, where, "-magic_id","magicRun.magic_id", "==");
    122123    PXOPT_COPY_S32(config->args, where, "-streaks_max","streaks", "<=");
    123124
     
    268269                outroot,
    269270                recoveryroot,
    270                 re_place,
     271                noreplace ? 0 :1,   // re_place
    271272                0); // remove
    272273
     
    396397    PS_ASSERT_PTR_NON_NULL(config, false);
    397398
     399    PXOPT_LOOKUP_STR(stage, config->args, "-stage", true, false);
     400
    398401    psMetadata *where = psMetadataAlloc();
    399     PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magic_ds_id", "==");
     402    PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magicDSRun.magic_ds_id", "==");
    400403    PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "==");
    401     pxAddLabelSearchArgs (config, where, "-label", "label", "==");
    402     PXOPT_COPY_STR(config->args, where, "-stage", "stage", "==");
     404    pxAddLabelSearchArgs (config, where, "-label", "magicDSRun.label", "==");
    403405
    404406    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    405407    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    406408
    407     // look for "inputs" that need to processed
    408     psString query = pxDataGet("magicdstool_todestreak.sql");
     409    psString sql_file = NULL;
     410    psStringAppend(&sql_file, "magicdstool_todestreak_%s.sql", stage);
     411
     412    psString query = pxDataGet(sql_file);
    409413    if (!query) {
    410         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    411         return false;
    412     }
     414        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement from %s", sql_file);
     415        psFree(sql_file);
     416        return false;
     417    }
     418    psFree(sql_file);
    413419
    414420    if (psListLength(where->list)) {
    415421        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    416         psStringAppend(&query, " WHERE %s", whereClause);
     422        psStringAppend(&query, " AND %s", whereClause);
    417423        psFree(whereClause);
    418424    }
     
    656662    }
    657663
    658     if (!magicDSRunComplete(config, setmagicked)) {
    659             // rollback
    660         if (!psDBRollback(config->dbh)) {
    661             psError(PS_ERR_UNKNOWN, false, "database error");
    662         }
    663         psError(PS_ERR_UNKNOWN, false, "database error");
    664         return false;
    665     }
    666 
    667664    if (!psDBCommit(config->dbh)) {
    668665        psError(PS_ERR_UNKNOWN, false, "database error");
     
    738735}
    739736
    740 static bool magicDSRunComplete(pxConfig *config, bool setmagicked)
     737static bool advancerunMode(pxConfig *config)
    741738{
    742739    PS_ASSERT_PTR_NON_NULL(config, false);
     740
     741    psMetadata *where = psMetadataAlloc();
     742    PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magicDSRun.magic_ds_id", "==");
     743    pxAddLabelSearchArgs (config, where, "-label", "magicDSRun.label", "==");
     744
     745    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    743746
    744747    // look for completed magicDSRuns
     
    749752    }
    750753
     754    if (psListLength(where->list)) {
     755        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     756        psStringAppend(&query, " WHERE %s", whereClause);
     757        psFree(whereClause);
     758    }
     759
    751760    if (!p_psDBRunQuery(config->dbh, query)) {
    752761        psError(PS_ERR_UNKNOWN, false, "database error");
     
    766775        return true;
    767776    }
     777    if (!psDBTransaction(config->dbh)) {
     778        psError(PS_ERR_UNKNOWN, false, "database error");
     779        return false;
     780    }
    768781    for (long i = 0; i < psArrayLength(output); i++) {
    769782        psMetadata *row = output->data[i];
     
    771784        psS64 magic_ds_id = psMetadataLookupS64(NULL, row, "magic_ds_id");
    772785
    773         // if requested, set stageRun.magicked
     786        // if re_place, set stageRun.magicked
     787        bool setmagicked = psMetadataLookupBool(NULL, row, "re_place");
    774788        if (setmagicked && !setRunMagicked(config, magic_ds_id)) {
    775789            psError(PS_ERR_UNKNOWN, false, "failed to change stageRun.magicked for magic_ds_id: %" PRId64,
    776790                magic_ds_id);
     791            if (!psDBRollback(config->dbh)) {
     792                psError(PS_ERR_UNKNOWN, false, "database error");
     793            }
    777794            return false;
    778795        }
     
    783800                magic_ds_id);
    784801            psFree(output);
     802            if (!psDBRollback(config->dbh)) {
     803                psError(PS_ERR_UNKNOWN, false, "database error");
     804            }
    785805            return false;
    786806        }
    787807    }
    788 
     808    if (!psDBCommit(config->dbh)) {
     809        psError(PS_ERR_UNKNOWN, false, "database error");
     810        return false;
     811    }
    789812
    790813    return true;
     
    795818{
    796819    PS_ASSERT_PTR_NON_NULL(config, false);
     820
     821    PXOPT_LOOKUP_BOOL(i_am_sure, config->args, "-i_am_sure", true);
     822    if (!i_am_sure) {
     823        psError(PS_ERR_UNKNOWN, true, "Reverting destreaked files must be done carefully. -i_am_sure is required.");
     824        return false;
     825    }
    797826
    798827    psMetadata *where = psMetadataAlloc();
     
    802831    pxAddLabelSearchArgs (config, where, "-label", "label", "==");
    803832
    804     psString query = psStringCopy("DELETE FROM magicDSFile USING magicDSFile, magicDSRun  WHERE (magicDSRun.magic_ds_id = magicDSFile.magic_ds_id) AND magicDSFile.fault != 0");
     833    psString query = pxDataGet("magicdstool_revertdestreakedfile.sql");
    805834
    806835    if (psListLength(where->list)) {
     
    808837        psStringAppend(&query, " AND %s", whereClause);
    809838        psFree(whereClause);
     839    } else {
     840        psError(PS_ERR_UNKNOWN, true, "search arguments are required");
     841        return false;
    810842    }
    811843    psFree(where);
     
    813845    if (!p_psDBRunQuery(config->dbh, query)) {
    814846        psError(PS_ERR_UNKNOWN, false, "failed to revert");
    815         return false;
    816     }
    817     return true;
    818 }
    819 
    820 static bool getskycellsMode(pxConfig *config)
    821 {
    822     // required
    823     PXOPT_LOOKUP_S64(magic_ds_id, config->args, "-magic_ds_id", true, false);
     847        psFree(query);
     848        return false;
     849    }
     850    psFree(query);
     851    return true;
     852}
     853
     854static bool completedrevertMode(pxConfig *config)
     855{
     856    PS_ASSERT_PTR_NON_NULL(config, false);
    824857
    825858    psMetadata *where = psMetadataAlloc();
    826     PXOPT_COPY_STR(config->args, where, "-class_id",    "warpSkyCellMap.class_id", "==");
    827     PXOPT_COPY_STR(config->args, where, "-skycell_id",  "warpSkyCellMap.skycell_id", "==");
    828 
    829     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    830 
    831     psString query = pxDataGet("magicdstool_getskycells.sql");
    832     if (!query) {
    833         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    834         return false;
    835     }
    836 
     859    PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magicDSRun.magic_ds_id", "==");
     860    pxAddLabelSearchArgs (config, where, "-label", "label", "==");
     861
     862    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     863
     864    psString query = pxDataGet("magicdstool_completedrevert.sql");
     865    // treat limit == 0 as "no limit"
     866    if (limit) {
     867        psString limitString = psDBGenerateLimitSQL(limit);
     868        psStringAppend(&query, " %s", limitString);
     869        psFree(limitString);
     870    }
     871
     872    psString whereString = NULL;
    837873    if (psListLength(where->list)) {
    838874        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    839         psStringAppend(&query, " AND %s", whereClause);
     875        psStringAppend(&whereString, "\nAND %s", whereClause);
    840876        psFree(whereClause);
    841877    }
    842878    psFree(where);
    843879
    844     if (!p_psDBRunQueryF(config->dbh, query, magic_ds_id)) {
    845         psError(PS_ERR_UNKNOWN, false, "database error");
    846         psFree(query);
    847         return false;
    848     }
     880    if (!p_psDBRunQueryF(config->dbh, query, whereString ? whereString : "")) {
     881        psFree(whereString);
     882        psError(PS_ERR_UNKNOWN, false, "failed to revert");
     883        return false;
     884    }
     885    psFree(whereString);
    849886    psFree(query);
    850 
    851887    psArray *output = p_psDBFetchResult(config->dbh);
    852888    if (!output) {
     
    868904        return true;
    869905    }
    870 
    871     if (psArrayLength(output)) {
    872         // negative simple so the default is true
    873         if (!ippdbPrintMetadatas(stdout, output, "magicDiffSkyfile", !simple)) {
    874             psError(PS_ERR_UNKNOWN, false, "failed to print array");
     906    for (int i=0; i<psArrayLength(output); i++) {
     907        psMetadata *row = output->data[i];
     908        psS64 magic_ds_id = psMetadataLookupS64(NULL, row, "magic_ds_id");
     909        psString old_state = psMetadataLookupStr(NULL, row, "state");
     910        psString new_state;
     911        if (!strcmp(old_state, "goto_censored")) {
     912            new_state = "censored";
     913        } else if (!strcmp(old_state, "goto_restored")) {
     914            new_state = "restored";
     915        } else {
     916            psError(PXTOOLS_ERR_PROG, true, "unexpected state found: %s", old_state);
    875917            psFree(output);
    876918            return false;
    877919        }
    878     }
    879 
     920        char *query2 = "UPDATE magicDSRun SET state = '%s' WHERE magic_ds_id = %" PRId64;
     921        if (!p_psDBRunQueryF(config->dbh, query2, new_state, magic_ds_id)) {
     922            psError(PS_ERR_UNKNOWN, false, "failed to set run magicDSRun.state to %s", new_state);
     923            return false;
     924        }
     925    }
    880926    psFree(output);
    881927
     
    883929}
    884930
    885 static bool setmagicDSRunState(pxConfig *config, psS64 magic_ds_id, const char *state)
    886 {
    887     PS_ASSERT_PTR_NON_NULL(state, false);
    888 
    889     // check that state is a valid string value
    890     if (!(
    891             (strncmp(state, "new", 4) == 0)
    892             || (strncmp(state, "full", 5) == 0)
    893         )
    894     ) {
    895         psError(PS_ERR_UNKNOWN, false,
    896                 "invalid magicDSRun state: %s", state);
    897         return false;
    898     }
    899 
    900     char *query = "UPDATE magicDSRun SET state = '%s' WHERE magic_ds_id = %" PRId64;
    901     if (!p_psDBRunQueryF(config->dbh, query, state, magic_ds_id)) {
    902         psError(PS_ERR_UNKNOWN, false,
    903                 "failed to change state for magic_id %" PRId64, magic_ds_id);
    904         return false;
    905     }
    906 
    907     return true;
    908 }
    909 
    910 static bool toremoveMode(pxConfig *config)
    911 {
    912     PS_ASSERT_PTR_NON_NULL(config, false);
     931static bool getskycellsMode(pxConfig *config)
     932{
     933    // required
     934    PXOPT_LOOKUP_S64(magic_ds_id, config->args, "-magic_ds_id", true, false);
    913935
    914936    psMetadata *where = psMetadataAlloc();
    915     PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magic_ds_id", "==");
    916     PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "==");
    917     pxAddLabelSearchArgs (config, where, "-label", "label", "==");
    918 
    919     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     937    PXOPT_COPY_STR(config->args, where, "-class_id",    "warpSkyCellMap.class_id", "==");
     938    PXOPT_COPY_STR(config->args, where, "-skycell_id",  "warpSkyCellMap.skycell_id", "==");
     939
    920940    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    921941
    922     // look for "inputs" that need to processed
    923     psString query = pxDataGet("magicdstool_toremove.sql");
     942    psString query = pxDataGet("magicdstool_getskycells.sql");
    924943    if (!query) {
    925944        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     
    929948    if (psListLength(where->list)) {
    930949        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    931         psStringAppend(&query, " WHERE %s", whereClause);
     950        psStringAppend(&query, " AND %s", whereClause);
    932951        psFree(whereClause);
    933952    }
    934953    psFree(where);
    935954
    936     // treat limit == 0 as "no limit"
    937     if (limit) {
    938         psString limitString = psDBGenerateLimitSQL(limit);
    939         psStringAppend(&query, " %s", limitString);
    940         psFree(limitString);
    941     }
    942 
    943     if (!p_psDBRunQuery(config->dbh, query)) {
     955    if (!p_psDBRunQueryF(config->dbh, query, magic_ds_id)) {
    944956        psError(PS_ERR_UNKNOWN, false, "database error");
    945957        psFree(query);
     
    970982    if (psArrayLength(output)) {
    971983        // negative simple so the default is true
    972         if (!ippdbPrintMetadatas(stdout, output, "toremove", !simple)) {
     984        if (!ippdbPrintMetadatas(stdout, output, "magicDiffSkyfile", !simple)) {
    973985            psError(PS_ERR_UNKNOWN, false, "failed to print array");
    974986            psFree(output);
     
    981993    return true;
    982994}
    983 static bool torestoreMode(pxConfig *config)
     995
     996static bool setmagicDSRunState(pxConfig *config, psS64 magic_ds_id, const char *state)
     997{
     998    PS_ASSERT_PTR_NON_NULL(state, false);
     999
     1000    // check that state is a valid string value
     1001    if (!((strcmp(state, "new") == 0) ||
     1002          (strcmp(state, "full") == 0) ||
     1003          (strcmp(state, "restored") == 0) ||
     1004          (strcmp(state, "censored") == 0) ||
     1005          (strcmp(state, "purged") == 0) ||
     1006          (strcmp(state, "goto_restored") == 0) ||
     1007          (strcmp(state, "goto_censored") == 0) ||
     1008          (strcmp(state, "goto_purged") == 0))
     1009        ) {
     1010        psError(PS_ERR_UNKNOWN, false,
     1011                "invalid magicDSRun state: %s", state);
     1012        return false;
     1013    }
     1014
     1015    char *query = "UPDATE magicDSRun SET state = '%s' WHERE magic_ds_id = %" PRId64;
     1016    if (!p_psDBRunQueryF(config->dbh, query, state, magic_ds_id)) {
     1017        psError(PS_ERR_UNKNOWN, false,
     1018                "failed to change state for magic_id %" PRId64, magic_ds_id);
     1019        return false;
     1020    }
     1021
     1022    return true;
     1023}
     1024
     1025static bool toremoveMode(pxConfig *config)
    9841026{
    9851027    PS_ASSERT_PTR_NON_NULL(config, false);
     
    9941036
    9951037    // look for "inputs" that need to processed
    996     psString query = pxDataGet("magicdstool_torestore.sql");
     1038    psString query = pxDataGet("magicdstool_toremove.sql");
    9971039    if (!query) {
    9981040        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     
    10431085    if (psArrayLength(output)) {
    10441086        // negative simple so the default is true
    1045         if (!ippdbPrintMetadatas(stdout, output, "torestore", !simple)) {
     1087        if (!ippdbPrintMetadatas(stdout, output, "toremove", !simple)) {
    10461088            psError(PS_ERR_UNKNOWN, false, "failed to print array");
    10471089            psFree(output);
     
    10541096    return true;
    10551097}
    1056 
    10571098
    10581099static bool torevertMode(pxConfig *config)
  • branches/eam_branches/20090820/ippTools/src/magicdstool.h

    r24683 r25766  
    3030    MAGICDSTOOL_MODE_TODESTREAK,
    3131    MAGICDSTOOL_MODE_ADDDESTREAKEDFILE,
     32    MAGICDSTOOL_MODE_ADVANCERUN,
    3233    MAGICDSTOOL_MODE_REVERTDESTREAKEDFILE,
    3334    MAGICDSTOOL_MODE_GETSKYCELLS,
    3435    MAGICDSTOOL_MODE_TOREMOVE,
    35     MAGICDSTOOL_MODE_TORESTORE,
    3636    MAGICDSTOOL_MODE_TOREVERT,
     37    MAGICDSTOOL_MODE_COMPLETEDREVERT,
    3738} MAGICDStoolMode;
    3839
  • branches/eam_branches/20090820/ippTools/src/magicdstoolConfig.c

    r24937 r25766  
    5252    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-workdir",     0, "define workdir", NULL);
    5353    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-recoveryroot", 0, "define recovery directory", NULL);
    54     psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-replace", 0, "replace input files with the destreaked versions", false);
     54    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-noreplace", 0, "do not replace input files with the destreaked versions", false);
    5555    psMetadataAddStr(definebyqueryArgs, PS_LIST_TAIL, "-set_label",    0, "define label", NULL);
    5656
     
    7575    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-outroot", 0, "define output directory (required)", NULL);
    7676    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-recoveryroot", 0, "define recovery directory", NULL);
    77     psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-replace", 0, "use the simple output format", false);
    78     psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-remove", 0, "use the simple output format", false);
     77    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-noreplace", 0, "do not replace the input wit with the destreaked versions", false);
     78//    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-remove", 0, "use the simple output format", false);
    7979    psMetadataAddStr(definerunArgs, PS_LIST_TAIL, "-label", 0, "define label", NULL);
    8080    psMetadataAddBool(definerunArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     
    9393    // -todestreak
    9494    psMetadata *todestreakArgs = psMetadataAlloc();
     95    psMetadataAddStr(todestreakArgs, PS_LIST_TAIL, "-stage", 0, "limit query to stage (required)", NULL);
    9596    psMetadataAddS64(todestreakArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0);
    9697    psMetadataAddS64(todestreakArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0);
    9798    psMetadataAddStr(todestreakArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
    98     psMetadataAddStr(todestreakArgs, PS_LIST_TAIL, "-stage", 0, "limit query to stage", NULL);
    9999    psMetadataAddU64(todestreakArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    100100    psMetadataAddBool(todestreakArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     
    114114    psMetadataAddStr(revertdestreakedfileArgs, PS_LIST_TAIL, "-component", 0, "search by component", NULL);
    115115    psMetadataAddS16(revertdestreakedfileArgs, PS_LIST_TAIL, "-fault", 0, "search by fault code", 0);
     116    psMetadataAddBool(revertdestreakedfileArgs, PS_LIST_TAIL, "-i_am_sure", 0, "confirm that you know what you are doing", false);
    116117    psMetadataAddStr(revertdestreakedfileArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
    117118
    118119    // -getskycells
    119120    psMetadata *getskycellsArgs = psMetadataAlloc();
    120     psMetadataAddS64(getskycellsArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "define magic de-streak ID (required)", 0);
     121    psMetadataAddS64(getskycellsArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "define magic de-streak ID", 0);
    121122    psMetadataAddStr(getskycellsArgs, PS_LIST_TAIL, "-class_id", 0, "define class identifier", NULL);
    122123    psMetadataAddStr(getskycellsArgs, PS_LIST_TAIL, "-skycell_id", 0, "define skycell identifier", NULL);
     
    130131    psMetadataAddU64(toremoveArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    131132    psMetadataAddBool(toremoveArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
    132 
    133     // -torestore
    134     psMetadata *torestoreArgs = psMetadataAlloc();
    135     psMetadataAddS64(torestoreArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0);
    136     psMetadataAddS64(torestoreArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0);
    137     psMetadataAddStr(torestoreArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
    138     psMetadataAddU64(torestoreArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    139     psMetadataAddBool(torestoreArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
    140133
    141134    // -torevert
     
    147140    psMetadataAddU64(torevertArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    148141    psMetadataAddBool(torevertArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false);
     142
     143    // -completedrevert
     144    psMetadata *completedrevertArgs = psMetadataAlloc();
     145    psMetadataAddS64(completedrevertArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0);
     146    psMetadataAddStr(completedrevertArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
     147    psMetadataAddU64(completedrevertArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
     148
     149    // -advancerun
     150    psMetadata *advancerunArgs = psMetadataAlloc();
     151    psMetadataAddS64(advancerunArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0);
     152    psMetadataAddStr(advancerunArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL);
     153    psMetadataAddU64(advancerunArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0);
    149154
    150155    psFree(now);
     
    163168    PXOPT_ADD_MODE("-adddestreakedfile",   "add a de-streaked file",
    164169                    MAGICDSTOOL_MODE_ADDDESTREAKEDFILE, adddestreakedfileArgs);
     170    PXOPT_ADD_MODE("-advancerun", "change state for runs that have finished destrreaking",
     171                    MAGICDSTOOL_MODE_ADVANCERUN, advancerunArgs);
    165172    PXOPT_ADD_MODE("-revertdestreakedfile", " revert a faulted de-streaked file",
    166173                    MAGICDSTOOL_MODE_REVERTDESTREAKEDFILE, revertdestreakedfileArgs);
     
    169176    PXOPT_ADD_MODE("-toremove", "backup images pending removal",
    170177                    MAGICDSTOOL_MODE_TOREMOVE, toremoveArgs);
    171     PXOPT_ADD_MODE("-torestore", "images pending restore of exicsed streak pixels",
    172                     MAGICDSTOOL_MODE_TORESTORE, torestoreArgs);
    173     PXOPT_ADD_MODE("-torevert", "faulted images to revert",
     178    PXOPT_ADD_MODE("-torevert", "images to restore or revert",
    174179                    MAGICDSTOOL_MODE_TOREVERT, torevertArgs);
     180
     181    PXOPT_ADD_MODE("-completedrevert", "change state for runs that have finished reverting",
     182                    MAGICDSTOOL_MODE_COMPLETEDREVERT, completedrevertArgs);
     183
    175184
    176185    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
  • branches/eam_branches/20090820/ippTools/src/magictool.c

    r24949 r25766  
    13931393}
    13941394
    1395 static bool censorStage(pxConfig *config, psString stage, psString whereClause)
    1396 {
    1397     psString queryFile = NULL;
    1398     psStringAppend(&queryFile, "magictool_censor_%s.sql", stage);
    1399     psString query = pxDataGet(queryFile);
    1400     if (!query) {
    1401         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement from %s", queryFile);
    1402         psFree(queryFile);
    1403         if (!psDBRollback(config->dbh)) {
    1404             psError(PS_ERR_UNKNOWN, false, "database error");
    1405         }
    1406         return false;
    1407     }
    1408     psFree(queryFile);
    1409 
    1410     psStringAppend(&query, " WHERE %s",  whereClause);
    1411 
    1412     if (!p_psDBRunQuery(config->dbh, query)) {
    1413         psError(PS_ERR_UNKNOWN, false, "database error");
    1414         psFree(query);
    1415         if (!psDBRollback(config->dbh)) {
    1416             psError(PS_ERR_UNKNOWN, false, "database error");
    1417         }
    1418         return false;
    1419     }
    1420     psFree(query);
    1421 
    1422     return true;
    1423 }
    1424 
    14251395static bool censorrunMode(pxConfig *config)
    14261396{
    14271397    PS_ASSERT_PTR_NON_NULL(config, false);
    14281398
    1429     psError(PS_ERR_PROGRAMMING, true, "-censorrun mode not ready yet");
    1430     return false;
    1431 
    14321399    psMetadata *where = psMetadataAlloc();
     1400
     1401    PXOPT_LOOKUP_S64(magic_id, config->args, "-magic_id", false, false);
     1402    PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", false, false);
     1403    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
     1404
     1405    if (!magic_id) {
     1406        if (!exp_id && !label) {
     1407            psError(PS_ERR_UNKNOWN, true, "either -magic_id or exp_id and label is required");
     1408            return false;
     1409        }
     1410    }
    14331411
    14341412    // at least one of these required
    14351413    PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "==");
    14361414    PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
     1415    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
    14371416
    14381417    if (!psListLength(where->list)) {
     
    14701449    // Now queue any destreaked files to be re-verted
    14711450
    1472     // note: on failure censorStage issues the rollback
    1473     if (!censorStage(config, "raw", whereClause)) {
     1451    // note: on failure magicRestoreStage issues the rollback
     1452    if (!magicRestoreStage(config, "raw", whereClause, "goto_censored")) {
    14741453        psFree(whereClause);
    14751454        return false;
    14761455    }
    1477     if (!censorStage(config, "chip", whereClause)) {
     1456    if (!magicRestoreStage(config, "chip", whereClause, "goto_censored")) {
    14781457        psFree(whereClause);
    14791458        return false;
    14801459    }
    1481     if (!censorStage(config, "camera", whereClause)) {
     1460    if (!magicRestoreStage(config, "camera", whereClause, "goto_censored")) {
    14821461        psFree(whereClause);
    14831462        return false;
    14841463    }
    1485     if (!censorStage(config, "warp", whereClause)) {
     1464    if (!magicRestoreStage(config, "warp", whereClause, "goto_censored")) {
    14861465        psFree(whereClause);
    14871466        return false;
    14881467    }
    1489     if (!censorStage(config, "diff", whereClause)) {
     1468    if (!magicRestoreStage(config, "diff", whereClause, "goto_censored")) {
    14901469        psFree(whereClause);
    14911470        return false;
  • branches/eam_branches/20090820/ippTools/src/magictoolConfig.c

    r24946 r25766  
    165165    psMetadataAddS64(censorrunArgs, PS_LIST_TAIL, "-magic_id", 0, "define magictool ID", 0);
    166166    psMetadataAddS64(censorrunArgs, PS_LIST_TAIL, "-exp_id", 0, "define exposure ID", 0);
     167    psMetadataAddStr(censorrunArgs, PS_LIST_TAIL, "-label",       0, "define label", NULL);
    167168
    168169    psFree(now);
  • branches/eam_branches/20090820/ippTools/src/pstamptool.c

    r25109 r25766  
    4444static bool pendingjobMode(pxConfig *config);
    4545static bool updatejobMode(pxConfig *config);
     46static bool revertjobMode(pxConfig *config);
    4647static bool addprojectMode(pxConfig *config);
    4748static bool projectMode(pxConfig *config);
     
    8081        MODECASE(PSTAMPTOOL_MODE_PENDINGJOB, pendingjobMode);
    8182        MODECASE(PSTAMPTOOL_MODE_UPDATEJOB, updatejobMode);
     83        MODECASE(PSTAMPTOOL_MODE_REVERTJOB, revertjobMode);
    8284        MODECASE(PSTAMPTOOL_MODE_ADDPROJECT, addprojectMode);
    8385        MODECASE(PSTAMPTOOL_MODE_MODPROJECT, modprojectMode);
     
    224226    PS_ASSERT_PTR_NON_NULL(config, false);
    225227
    226     PXOPT_LOOKUP_STR(uri,         config->args, "-uri",           true, false);
    227     // PXOPT_LOOKUP_STR(outFileset,  config->args, "-out_fileset",   true, false);
    228     PXOPT_LOOKUP_S64(ds_id,       config->args, "-ds_id",         false, false);
    229 
    230     char *query ="INSERT INTO pstampRequest"
    231                      " (state, uri, ds_id, fault)"
    232                      " VALUES( 'new', '%s', %" PRId64 ", 0 )";
    233     if (!p_psDBRunQueryF(config->dbh, query, uri, ds_id)) {
    234         psError(PS_ERR_UNKNOWN, false, "database error");
    235         return false;
    236     }
    237 
    238     psU64 affected = psDBAffectedRows(config->dbh);
    239     if (affected != 1) {
    240         psError(PS_ERR_UNKNOWN, false,
    241             "should have affected one row but %" PRIu64 " rows were modified",
    242             affected);
     228    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",   true, false);
     229    PXOPT_LOOKUP_STR(name,        config->args, "-name",  false, false);
     230    PXOPT_LOOKUP_STR(label,       config->args, "-label",  false, false);
     231    PXOPT_LOOKUP_S64(ds_id,       config->args, "-ds_id", false, false);
     232
     233    if (!pstampRequestInsert(config->dbh,
     234        0,      // req_id
     235        ds_id,
     236        "new",  //state
     237        name,
     238        NULL,   // reqType
     239        label,
     240        NULL,   // outProduct
     241        uri,   
     242        0       // fault
     243        )) {
     244        psError(PS_ERR_UNKNOWN, false, "failed to insert request");
    243245        return false;
    244246    }
     
    317319    psMetadata *where = psMetadataAlloc();
    318320    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     321    PXOPT_COPY_S64(config->args, where, "-not_req_id", "req_id", "!=");
    319322    PXOPT_COPY_STR(config->args, where, "-name", "name", "==");
    320323
     
    381384    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    382385
    383     psString query =
    384         "SELECT * FROM pstampRequest WHERE state = 'run' AND "
    385             "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id "
    386             " AND pstampJob.state != 'stop') = 0" ;
     386    psString query = pxDataGet("pstamptool_completedreq.sql");
    387387
    388388    // treat limit == 0 as "no limit"
     
    491491    PS_ASSERT_PTR_NON_NULL(config, false);
    492492
    493     PXOPT_LOOKUP_S64(req_id,     config->args, "-req_id",     true, false);
    494 
    495     // printf("Revert request %" PRId64 "\n", req_id);
     493    psMetadata *where = psMetadataAlloc();
     494
     495    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     496    PXOPT_COPY_S64(config->args, where, "-fault", "req_id", "==");
     497    PXOPT_COPY_STR(config->args, where, "-state", "pstampRequest.state", "==");
     498
     499    if (!psListLength(where->list)) {
     500        psFree(where);
     501        psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     502        return false;
     503    }
     504
     505    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     506    psFree(where);
     507
     508    // delete any jobs that were queued by requests that didn't complete parsing (pstampRequest.state = 'new'
     509    // If state =  'run' was supplied this will be a no-op
     510    psString query = pxDataGet("pstamptool_revertreq_deletejobs.sql");
     511    psStringAppend(&query, " AND %s", whereClause);
     512    if (!p_psDBRunQuery(config->dbh, query)) {
     513        psError(PS_ERR_UNKNOWN, false, "database error");
     514        return false;
     515    }
     516    psFree(query);
     517
     518    // clear fault for requests
     519    query = pxDataGet("pstamptool_revertreq.sql");
     520    psStringAppend(&query, " AND %s", whereClause);
    496521   
    497     if (!p_psDBRunQueryF(config->dbh, "DELETE FROM pstampJob where req_id = %" PRId64, req_id)) {
    498         psError(PS_ERR_UNKNOWN, false, "database error");
    499         return false;
    500     }
    501     if (!p_psDBRunQueryF(config->dbh,
    502         "UPDATE pstampRequest set state ='new', name=NULL, reqType=NULL, fault=0 where req_id = %" PRId64, req_id)) {
    503         psError(PS_ERR_UNKNOWN, false, "database error");
    504         return false;
    505     }
     522    psFree(whereClause);
     523
     524    if (!p_psDBRunQuery(config->dbh, query)) {
     525        psError(PS_ERR_UNKNOWN, false, "database error");
     526        return false;
     527    }
     528    psFree(query);
    506529
    507530    return true;
     
    521544    PXOPT_LOOKUP_S16(fault,       config->args, "-fault",      false, false);
    522545    PXOPT_LOOKUP_S64(exp_id,      config->args, "-exp_id",     false, false);
     546    PXOPT_LOOKUP_S64(options,     config->args, "-options",     false, false);
    523547
    524548    // unless the job is being inserted with stop state require outputBase
     
    545569            fault,
    546570            exp_id,
    547             outputBase
     571            outputBase,
     572            options
    548573            )) {
    549574        psError(PS_ERR_UNKNOWN, false, "database error");
     
    569594    PS_ASSERT_PTR_NON_NULL(config, false);
    570595
    571     PXOPT_LOOKUP_S64(req_id, config->args, "-req_id", false, false);
    572     PXOPT_LOOKUP_S64(job_id, config->args, "-job_id", false, false);
     596    psMetadata *where = psMetadataAlloc();
     597    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     598    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     599    PXOPT_COPY_S64(config->args, where, "-fault",  "fault", "==");
    573600
    574601    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    575602    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    576603
    577     psString query = NULL;
    578 
    579     if (!req_id && !job_id) {
    580         fprintf(stderr, "either req_id or job_id must be specified\n");
     604    if (!psListLength(where->list)) {
     605        fprintf(stderr, "search arguments are required\n");
    581606        exit (1);
    582607    }
    583608
    584     if (req_id) {
    585         psStringAppend(&query,
    586                 "SELECT"
    587                 " pstampJob.*, pstampRequest.name, pstampRequest.outProduct"
    588                 " FROM pstampJob"
    589                 " JOIN pstampRequest USING(req_id)"
    590                 " WHERE req_id = %" PRId64, req_id
    591             );
    592     } else {
    593         psStringAppend(&query,
    594                 "SELECT"
    595                 " pstampJob.*, pstampRequest.name, pstampRequest.outProduct"
    596                 " FROM pstampJob"
    597                 " JOIN pstampRequest USING(req_id)"
    598                 " WHERE job_id = %" PRId64, job_id
    599             );
    600     }
     609    psString query = pxDataGet("pstamptool_listjob.sql");
     610    if (!query) {
     611        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     612        return false;
     613    }
     614
     615    // use psDBGenerateWhereSQL because the SQL yields an intermediate table
     616    if (psListLength(where->list)) {
     617        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
     618        psStringAppend(&query, " WHERE %s", whereClause);
     619        psFree(whereClause);
     620    }
     621    psFree(where);
    601622
    602623    // treat limit == 0 as "no limit"
     
    729750        psError(PS_ERR_UNKNOWN, false, "should have affected one row but %"
    730751                                        PRIu64 " rows were modified", affected);
     752        return false;
     753    }
     754
     755    return true;
     756}
     757
     758static bool revertjobMode(pxConfig *config)
     759{
     760    PS_ASSERT_PTR_NON_NULL(config, false);
     761
     762    psMetadata *where = psMetadataAlloc();
     763
     764    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     765    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     766    PXOPT_COPY_S64(config->args, where, "-fault",  "fault", "==");
     767    PXOPT_COPY_S64(config->args, where, "-req_id_min",  "req_id", ">=");
     768    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     769    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     770
     771    psString query = pxDataGet("pstamptool_revertjob.sql");
     772    if (!psListLength(where->list) && !all) {
     773        psFree(where);
     774        psError(PXTOOLS_ERR_DATA, false, "search parameters or -all are required");
     775        return false;
     776    }
     777    if (psListLength(where->list)) {
     778        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
     779        psStringAppend(&query, " AND %s", whereClause);
     780        psFree(whereClause);
     781    }
     782    psFree(where);
     783   
     784    if (!p_psDBRunQuery(config->dbh, query)) {
     785        psError(PS_ERR_UNKNOWN, false, "database error");
    731786        return false;
    732787    }
  • branches/eam_branches/20090820/ippTools/src/pstamptool.h

    r19760 r25766  
    3939    PSTAMPTOOL_MODE_JOBRESULT,
    4040    PSTAMPTOOL_MODE_UPDATEJOB,
     41    PSTAMPTOOL_MODE_REVERTJOB,
    4142    PSTAMPTOOL_MODE_ADDPROJECT,
    4243    PSTAMPTOOL_MODE_MODPROJECT,
  • branches/eam_branches/20090820/ippTools/src/pstamptoolConfig.c

    r25075 r25766  
    6363    // -addreq
    6464    psMetadata *addreqArgs = psMetadataAlloc();
    65     psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-uri", 0,            "define request file uri (required)", NULL);
    66     psMetadataAddS64(addreqArgs, PS_LIST_TAIL, "-ds_id", 0,            "define request ds_id", 0);
    67     // psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-out_fileset", 0,            "define request output_fileset", NULL);
     65    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-uri", 0,    "define request file uri (required)", NULL);
     66    psMetadataAddS64(addreqArgs, PS_LIST_TAIL, "-ds_id", 0,  "define request ds_id", 0);
     67    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-name", 0,   "define request name", NULL);
     68    psMetadataAddStr(addreqArgs, PS_LIST_TAIL, "-label", 0,  "define request label", NULL);
    6869
    6970    // -pendingreq
     
    7778    psMetadataAddS64(listreqArgs, PS_LIST_TAIL, "-req_id", 0,            "list by req_id", 0);
    7879    psMetadataAddStr(listreqArgs, PS_LIST_TAIL, "-name", 0,              "list by name", NULL);
     80    psMetadataAddS64(listreqArgs, PS_LIST_TAIL, "-not_req_id", 0,        "req_id to not list", 0);
    7981    psMetadataAddU64(listreqArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    80     psMetadataAddBool(listreqArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
     82    psMetadataAddBool(listreqArgs, PS_LIST_TAIL, "-simple", 0,           "use the simple output format", false);
    8183
    8284    // -completedreq
     
    9799    // -revertreq
    98100    psMetadata *revertreqArgs = psMetadataAlloc();
    99     psMetadataAddS64(revertreqArgs, PS_LIST_TAIL, "-req_id", 0,            "req_id for which to revert", 0);
     101    psMetadataAddS64(revertreqArgs, PS_LIST_TAIL, "-req_id", 0,     "req_id to revert", 0);
     102    psMetadataAddS16(revertreqArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
     103    psMetadataAddStr(revertreqArgs, PS_LIST_TAIL, "-state", 0,      "state to revert", NULL);
    100104
    101105    // -addjob
    102106    psMetadata *addjobArgs = psMetadataAlloc();
    103     psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-req_id", 0,            "define job req_id", 0);
    104     psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-rownum", 0,            "define job rownum", NULL);
    105     psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0,            "define job job_type", "stamp");
    106     psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-outputBase", 0,            "define job outputBase", NULL);
    107     psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0,            "new state", "run");
    108     psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-exp_id", 0,           "exposure id", 0);
    109     psMetadataAddS16(addjobArgs, PS_LIST_TAIL, "-fault", 0,            "new result", 0);
     107    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-req_id", 0,           "define job req_id", 0);
     108    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-rownum", 0,           "define job rownum", NULL);
     109    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-job_type", 0,         "define job job_type", "stamp");
     110    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-outputBase", 0,       "define job outputBase", NULL);
     111    psMetadataAddStr(addjobArgs, PS_LIST_TAIL, "-state", 0,            "define state", "run");
     112    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-exp_id", 0,           "define exposure id", 0);
     113    psMetadataAddS64(addjobArgs, PS_LIST_TAIL, "-options", 0,          "define options", 0);
     114    psMetadataAddS16(addjobArgs, PS_LIST_TAIL, "-fault", 0,            "define job result", 0);
    110115
    111116    // -listjob
    112117    psMetadata *listjobArgs = psMetadataAlloc();
    113     psMetadataAddS64(listjobArgs, PS_LIST_TAIL, "-req_id", 0,            "define request", 0);
    114     psMetadataAddS64(listjobArgs, PS_LIST_TAIL, "-job_id", 0,            "define job", 0);
    115     psMetadataAddU64(listjobArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    116     psMetadataAddBool(listjobArgs, PS_LIST_TAIL, "-simple", 0,            "use the simple output format", false);
     118    psMetadataAddS64(listjobArgs, PS_LIST_TAIL, "-req_id", 0,          "select by request ID", 0);
     119    psMetadataAddS64(listjobArgs, PS_LIST_TAIL, "-job_id", 0,          "select by job ID", 0);
     120    psMetadataAddS16(listjobArgs, PS_LIST_TAIL, "-fault", 0,           "select by fault", 0);
     121    psMetadataAddU64(listjobArgs, PS_LIST_TAIL, "-limit",  0,          "limit result set to N items", 0);
     122    psMetadataAddBool(listjobArgs, PS_LIST_TAIL, "-simple", 0,         "use the simple output format", false);
    117123
    118124    // -pendingjob
     
    128134    psMetadataAddStr(updatejobArgs, PS_LIST_TAIL, "-state", 0,            "new state", NULL);
    129135    psMetadataAddStr(updatejobArgs, PS_LIST_TAIL, "-fault", 0,            "new result", NULL);
     136
     137    // -revertjob
     138    psMetadata *revertjobArgs = psMetadataAlloc();
     139    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-req_id", 0,     "req_id to revert", 0);
     140    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-req_id_min", 0, "minimum req_id to revert", 0);
     141    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-job_id", 0,     "job_id to revert", 0);
     142    psMetadataAddS16(revertjobArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
     143    psMetadataAddBool(revertjobArgs, PS_LIST_TAIL, "-all", 0,       "revert all faulted jobs", false);
     144    psMetadataAddU64(revertjobArgs, PS_LIST_TAIL, "-limit", 0,      "limit result set to N items", 0);
    130145
    131146    // -addproject
     
    159174    PXOPT_ADD_MODE("-addreq",          "", PSTAMPTOOL_MODE_ADDREQ,       addreqArgs);
    160175    PXOPT_ADD_MODE("-pendingreq",      "", PSTAMPTOOL_MODE_PENDINGREQ,   pendingreqArgs);
    161     PXOPT_ADD_MODE("-updatereq",    "", PSTAMPTOOL_MODE_UPDATEREQ, updatereqArgs);
     176    PXOPT_ADD_MODE("-updatereq",       "", PSTAMPTOOL_MODE_UPDATEREQ, updatereqArgs);
    162177    PXOPT_ADD_MODE("-listreq",         "", PSTAMPTOOL_MODE_LISTREQ,      listreqArgs);
    163178    PXOPT_ADD_MODE("-completedreq",    "", PSTAMPTOOL_MODE_COMPLETEDREQ, completedreqArgs);
     
    167182    PXOPT_ADD_MODE("-listjob",         "", PSTAMPTOOL_MODE_LISTJOB,      listjobArgs);
    168183    PXOPT_ADD_MODE("-pendingjob",      "", PSTAMPTOOL_MODE_PENDINGJOB,   pendingjobArgs);
    169     PXOPT_ADD_MODE("-updatejob",    "", PSTAMPTOOL_MODE_UPDATEJOB, updatejobArgs);
     184    PXOPT_ADD_MODE("-updatejob",       "", PSTAMPTOOL_MODE_UPDATEJOB,    updatejobArgs);
     185    PXOPT_ADD_MODE("-revertjob",       "", PSTAMPTOOL_MODE_REVERTJOB,    revertjobArgs);
    170186
    171187    PXOPT_ADD_MODE("-adddatastore",    "", PSTAMPTOOL_MODE_ADDDATASTORE, adddatastoreArgs);
  • branches/eam_branches/20090820/ippTools/src/pubtool.c

    r25098 r25766  
    259259    // required
    260260    PXOPT_LOOKUP_S64(pub_id, config->args, "-pub_id", true, false);
    261     PXOPT_LOOKUP_STR(path_base, config->args, "-path_base",  true, false);
     261    PXOPT_LOOKUP_STR(path_base, config->args, "-path_base", true, false);
    262262
    263263    // optional
     264    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
     265    PXOPT_LOOKUP_F32(dtime_script, config->args, "-dtime_script", false, false);
    264266    PXOPT_LOOKUP_S32(fault, config->args, "-fault", false, false);
    265267
     
    269271    }
    270272
    271     if (!publishDoneInsert(config->dbh, pub_id, path_base, fault)) {
     273    if (!publishDoneInsert(config->dbh, pub_id, path_base, hostname, dtime_script, fault)) {
    272274        psError(PS_ERR_UNKNOWN, false, "Unable to add file");
    273275        if (!psDBRollback(config->dbh)) {
  • branches/eam_branches/20090820/ippTools/src/pubtoolConfig.c

    r24512 r25766  
    6868    psMetadataAddS64(addArgs, PS_LIST_TAIL, "-pub_id", 0, "define pub_id (required)", 0);
    6969    psMetadataAddStr(addArgs, PS_LIST_TAIL, "-path_base", 0, "define path_base (required)", NULL);
     70    psMetadataAddStr(addArgs, PS_LIST_TAIL, "-hostname", 0, "define hostname", NULL);
     71    psMetadataAddF32(addArgs, PS_LIST_TAIL, "-dtime_script", 0, "define time for script", NAN);
    7072    psMetadataAddS32(addArgs, PS_LIST_TAIL, "-fault", 0, "define fault code", 0);
    7173
  • branches/eam_branches/20090820/ippTools/src/pxinject.c

    r18336 r25766  
    137137    PXOPT_LOOKUP_STR(tmp_class_id, config->args, "-tmp_class_id", true, false);
    138138    PXOPT_LOOKUP_STR(uri, config->args, "-uri", true, false);
     139    PXOPT_LOOKUP_S32(bytes, config->args, "-bytes", false, false);
     140    PXOPT_LOOKUP_STR(md5sum, config->args, "-md5sum", false, false);
    139141
    140142    // insert with error flag state set to 0 (no errors)
    141     if (!newImfileInsert(config->dbh, exp_id, tmp_class_id, uri, NULL)) {
     143    if (!newImfileInsert(config->dbh, exp_id, tmp_class_id, uri, NULL, bytes, md5sum)) {
    142144        psError(PS_ERR_UNKNOWN, false, "database error");
    143145        return false;
  • branches/eam_branches/20090820/ippTools/src/pxinjectConfig.c

    r18561 r25766  
    6161    psMetadataAddStr(newImfileArgs, PS_LIST_TAIL, "-tmp_class_id",  0,            "define the class ID (required)", NULL);
    6262    psMetadataAddStr(newImfileArgs, PS_LIST_TAIL, "-uri",  0,            "define the URI (required)", NULL);
     63    psMetadataAddS32(newImfileArgs, PS_LIST_TAIL, "-bytes",  0,            "define the size of the file", 0);
     64    psMetadataAddStr(newImfileArgs, PS_LIST_TAIL, "-md5sum",  0,            "define the size of the file", NULL);
    6365
    6466    // -updatenewExp
  • branches/eam_branches/20090820/ippTools/src/pxtools.c

    r23918 r25766  
    3737    if (!strcmp(state, "goto_cleaned")) return true;
    3838    if (!strcmp(state, "error_cleaned")) return true;
     39    if (!strcmp(state, "goto_purged")) return true;
     40    if (!strcmp(state, "error_purged")) return true;
    3941    if (!strcmp(state, "goto_scrubbed")) return true;
    4042    if (!strcmp(state, "error_scrubbed")) return true;
     
    4244    if (!strcmp(state, "update")) return true;
    4345    if (!strcmp(state, "purged")) return true;
    44     if (!strcmp(state, "goto_purged")) return true;
    45     if (!strcmp(state, "error_purged")) return true;
    46 
     46    if (!strcmp(state, "scrubbed")) return true;
    4747    return false;
    4848}
    4949
    50 // 'scrubbed' is a virtual state equivalent to cleaned, but allows files to be removed
    51 // even if the config files is missing
     50// 'scrubbed' is no longer a virtual state equivalent to cleaned, but allows files to be removed
     51// even if the config files is missing.  This change was prompted as files that are cleaned can
     52// be regenerated, but that is not certain after being scrubbed.
    5253
    5354
  • branches/eam_branches/20090820/ippTools/src/pxtools.h

    r24733 r25766  
    3737#include "pxtoolsErrorCodes.h"
    3838
     39#include "pxadd.h"
    3940#include "pxcam.h"
    4041#include "pxchip.h"
     
    4546#include "pxtag.h"
    4647#include "pxtree.h"
     48#include "pxmagic.h"
    4749
    4850# define MAX_ROWS 10e9
  • branches/eam_branches/20090820/ippTools/src/pztool.c

    r23688 r25766  
    401401    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
    402402    PXOPT_LOOKUP_BOOL(row_lock, config->args, "-row_lock", false);
     403    PXOPT_LOOKUP_S32(bytes, config->args, "-bytes", false, false);
     404    PXOPT_LOOKUP_STR(md5sum, config->args, "-md5sum", false, false);
    403405
    404406    // default values
     
    457459            fault,
    458460            NULL,    // epoch
    459             hostname
     461            hostname,
     462            bytes,
     463            md5sum
    460464    )) {
    461465        psError(PS_ERR_UNKNOWN, false, "database error");
     
    595599                "       pzDownloadImfile.class_id," // tmp_class_id
    596600                "       pzDownloadImfile.uri,"      // uri
    597                 "       NULL"                       // epoch
     601                "       NULL,"                       // epoch
     602                "       pzDownloadImfile.bytes,"    // bytes
     603                "       pzDownloadImfile.md5sum"    // md5sum
    598604                "   FROM pzDownloadImfile"
    599605                "   WHERE"
  • branches/eam_branches/20090820/ippTools/src/pztoolConfig.c

    r23688 r25766  
    9595    psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-label",  0,        "define the label for the chip stage", NULL);
    9696    psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-hostname",  0,     "define the host that copied the image", NULL);
     97    psMetadataAddS32(copydoneArgs, PS_LIST_TAIL, "-bytes",  0,     "define the size in bytes for the copied image", 0);
     98    psMetadataAddStr(copydoneArgs, PS_LIST_TAIL, "-md5sum",  0,     "define the md5 sum for the copied image", NULL);
    9799    psMetadataAddS16(copydoneArgs, PS_LIST_TAIL, "-fault",  0,            "set fault code", 0);
    98100    psMetadataAddBool(copydoneArgs, PS_LIST_TAIL, "-row_lock", 0,     "lock pzDownImfile rows while advancing an exposure", false);
  • branches/eam_branches/20090820/ippTools/src/regtool.c

    r24866 r25766  
    224224    PXOPT_LOOKUP_F32(teltemp_extra, config->args, "-teltemp_extra", false, false);
    225225    PXOPT_LOOKUP_F32(pon_time, config->args, "-pon_time", false, false);
     226    PXOPT_LOOKUP_S16(burntool_state, config->args, "-burntool_state", false, false);
    226227    PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false);
    227228    PXOPT_LOOKUP_F64(user_2, config->args, "-user_2", false, false);
     
    238239    PXOPT_LOOKUP_TIME(dateobs, config->args, "-dateobs", false, false);
    239240    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
     241    PXOPT_LOOKUP_S32(bytes, config->args,  "-bytes", false, false);
     242    PXOPT_LOOKUP_STR(md5sum, config->args, "-md5sum", false, false);
    240243
    241244    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
     
    307310        quality,
    308311        NULL,
    309         0
     312        0,
     313        bytes,
     314        md5sum,
     315        0   // burntool_state
    310316    )) {
    311317        psError(PS_ERR_UNKNOWN, false, "database error");
     
    327333    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "dateobs",  ">=");
    328334    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "dateobs",  "<=");
     335    PXOPT_COPY_STR(config->args, where,  "-filter",        "filter", "==");
     336    PXOPT_COPY_S64(config->args, where,  "-magicked",      "magicked", "==");
     337
     338    PXOPT_LOOKUP_S64(magicked, config->args, "-magicked", false, false);
     339    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
     340    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
    329341
    330342    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    331343    PXOPT_LOOKUP_BOOL(faulted, config->args, "-faulted", false);
    332344    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     345    PXOPT_LOOKUP_BOOL(ordered_by_date, config->args, "-ordered_by_date", false);
    333346
    334347    psString query = pxDataGet("regtool_processedimfile.sql");
     
    352365        // don't list faulted rows
    353366        psStringAppend(&query, " %s", "AND rawImfile.fault = 0");
     367    }
     368
     369    if (not_destreaked) {
     370        if (destreaked) {
     371            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
     372            return false;
     373        }
     374        if (magicked) {
     375            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
     376            return false;
     377        }
     378        psStringAppend(&query, " AND rawImfile.magicked = 0");
     379    }
     380    if (destreaked) {
     381        psStringAppend(&query, " AND rawImfile.magicked != 0");
     382    }
     383
     384
     385    // add the ORDER BY statement if desired
     386    if (ordered_by_date) {
     387        psStringAppend(&query, " ORDER BY dateobs");
    354388    }
    355389
     
    456490
    457491    PXOPT_LOOKUP_S16(fault, config->args, "-fault",   false, false);
    458     PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false);
    459 
    460     if ((fault == INT16_MAX) && !isfinite(user_1)) {
    461         psError(PS_ERR_UNKNOWN, false, "one of -fault or -user_1 must be selected");
    462         return false;
    463     }
    464     if ((fault != INT16_MAX) && isfinite(user_1)) {
    465         psError(PS_ERR_UNKNOWN, false, "only one of -fault or -user_1 must be selected");
     492/*     PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false); */
     493    PXOPT_LOOKUP_S16(burntool_state, config->args, "-burntool_state", false, false);
     494   
     495    if ((fault == INT16_MAX) && !isfinite(burntool_state)) {
     496        psError(PS_ERR_UNKNOWN, false, "one of -fault or -burntool_state must be selected");
     497        return false;
     498    }
     499    if ((fault != INT16_MAX) && isfinite(burntool_state)) {
     500        psError(PS_ERR_UNKNOWN, false, "only one of -fault or -burntool_state must be selected");
    466501        return false;
    467502    }
     
    480515    }
    481516
    482     if (isfinite(user_1)) {
     517    if (isfinite(burntool_state)) {
    483518        psString query = pxDataGet("regtool_updateprocessedimfile.sql");
    484519        if (!query) {
     
    487522        }
    488523
    489         if (!p_psDBRunQueryF(config->dbh, query, user_1, exp_id, class_id)) {
     524        if (!p_psDBRunQueryF(config->dbh, query, burntool_state, exp_id, class_id)) {
    490525            psError(PS_ERR_UNKNOWN, false, "database error");
    491526            psFree(query);
  • branches/eam_branches/20090820/ippTools/src/regtoolConfig.c

    r24922 r25766  
    125125    ADD_OPT(Time, addprocessedimfileArgs, "-dateobs",        "define observation time",         NULL);
    126126    ADD_OPT(Str,  addprocessedimfileArgs, "-hostname",       "define host name",                NULL);
     127    ADD_OPT(Str,  addprocessedimfileArgs, "-md5sum",         "define md5sum",                NULL);
     128    ADD_OPT(S32,  addprocessedimfileArgs, "-bytes",          "define bytes",                0);
     129    ADD_OPT(S16,  addprocessedimfileArgs, "-burntool_state",        "set burntool state", 0);
    127130    ADD_OPT(S16,  addprocessedimfileArgs, "-fault",           "set fault code",                  0);
    128131    ADD_OPT(S16,  addprocessedimfileArgs, "-quality",        "set quality flag", 0);
     
    133136    ADD_OPT(Str,  processedimfileArgs, "-exp_name",  "search by exposure name",               NULL);
    134137    ADD_OPT(Str,  processedimfileArgs, "-class_id",  "search by class ID",                    NULL);
     138    ADD_OPT(Str,  processedimfileArgs, "-filter",  "search by filter",                        NULL);
    135139    ADD_OPT(Time, processedimfileArgs, "-dateobs_begin", "search for exposures by time (>=)", NULL);
    136140    ADD_OPT(Time, processedimfileArgs, "-dateobs_end", "search for exposures by time (<)", NULL);
     141    ADD_OPT(S64,  processedimfileArgs, "-magicked",    "search by magicked value",            0);
     142    ADD_OPT(Bool, processedimfileArgs, "-destreaked",   "only return imfiles that have been destreaked", false);
     143    ADD_OPT(Bool, processedimfileArgs, "-not_destreaked", "only return imfiles that have not been destreaked", false);
    137144    ADD_OPT(U64,  processedimfileArgs, "-limit",     "limit result set to N items",           0);
    138145    ADD_OPT(Bool, processedimfileArgs, "-faulted",   "only return imfiles with a fault status set", false);
     
    153160    ADD_OPT(S64, updateprocessedimfileArgs, "-exp_id",        "search by exposure ID", 0);
    154161    ADD_OPT(Str, updateprocessedimfileArgs, "-class_id",      "search by class ID", NULL);
    155     ADD_OPT(F64, updateprocessedimfileArgs, "-user_1",        "set user stat (1)", NAN);
     162    ADD_OPT(S16, updateprocessedimfileArgs, "-burntool_state",        "set burntool state", 0);
    156163    ADD_OPT(S16, updateprocessedimfileArgs, "-fault",          "set fault code", INT16_MAX);
    157164
  • branches/eam_branches/20090820/ippTools/src/stacktool.c

    r24954 r25766  
    139139    PXOPT_COPY_F32(config->args,  where, "-select_fwhm_minor_min",     "camProcessedExp.fwhm_minor", ">=");
    140140    PXOPT_COPY_F32(config->args,  where, "-select_fwhm_minor_max",     "camProcessedExp.fwhm_minor", "<=");
     141    PXOPT_COPY_F32(config->args,  where, "-select_iq_m2_max",     "camProcessedExp.iq_m2", "<=");
     142    PXOPT_COPY_F32(config->args,  where, "-select_iq_m2_min",     "camProcessedExp.iq_m2", ">=");
     143    PXOPT_COPY_F32(config->args,  where, "-select_iq_m3_max",     "camProcessedExp.iq_m3", "<=");
     144    PXOPT_COPY_F32(config->args,  where, "-select_iq_m4_min",     "camProcessedExp.iq_m4", ">=");
     145    PXOPT_COPY_F32(config->args,  where, "-select_iq_m4_max",     "camProcessedExp.iq_m4", "<=");
     146   
    141147    PXOPT_COPY_STR(config->args,  where, "-select_exp_type",           "rawExp.exp_type", "==");
    142148    PXOPT_COPY_F32(config->args,  where, "-select_good_frac_min",      "warpSkyfile.good_frac", ">=");
     
    853859
    854860    psMetadata *where = psMetadataAlloc();
    855     PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "==");
    856861    PXOPT_COPY_S64(config->args, where, "-stack_id", "stackSumSkyfile.stack_id", "==");
    857     PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "==");
    858     PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
    859862    PXOPT_COPY_STR(config->args, where, "-tess_id", "stackRun.tess_id", "==");
    860863    PXOPT_COPY_STR(config->args, where, "-skycell_id", "stackRun.skycell_id", "==");
     864    PXOPT_COPY_STR(config->args, where, "-filter", "stackRun.filter", "LIKE");
     865    PXOPT_COPY_STR(config->args, where, "-label", "stackRun.label", "==");
     866    PXOPT_COPY_S16(config->args, where, "-fault", "stackSumSkyfile.fault", "==");
     867
     868//  The following three selectors are incompatible with the sql so omit them
     869//    PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "==");
     870//     PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "==");
     871//    PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
     872
     873    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
    861874
    862875    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     
    873886        psStringAppend(&query, " WHERE %s", whereClause);
    874887        psFree(whereClause);
    875     }
     888    } else if (!all) {
     889        psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
     890        return false;
     891    }
     892
    876893    psFree(where);
    877894
  • branches/eam_branches/20090820/ippTools/src/stacktoolConfig.c

    r24954 r25766  
    7777    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_fwhm_minor_min", 0, "define min fwhm (minor axis)", NAN);
    7878    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_fwhm_minor_max", 0, "define max fwhm (minor axis)", NAN);
     79    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m2_min", 0, "define min iq_m2", NAN);
     80    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m2_max", 0, "define max iq_m2", NAN);
     81    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m3_min", 0, "define min iq_m3", NAN);
     82    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m3_max", 0, "define max iq_m3", NAN);
     83    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m4_min", 0, "define min iq_m4", NAN);
     84    psMetadataAddF64(definebyqueryArgs, PS_LIST_TAIL, "-select_iq_m4_max", 0, "define max iq_m4", NAN);
    7985    psMetadataAddS32(definebyqueryArgs, PS_LIST_TAIL, "-random", 0, "use this number of random elements", 0);
    8086    psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-all", 0, "allow everything to be queued without search terms", false);
     
    158164    psMetadata *sumskyfileArgs= psMetadataAlloc();
    159165    psMetadataAddS64(sumskyfileArgs, PS_LIST_TAIL, "-stack_id", 0,            "search by stack ID", 0);
    160     psMetadataAddS64(sumskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,            "search by warp ID", 0);
    161166    psMetadataAddStr(sumskyfileArgs, PS_LIST_TAIL, "-tess_id", 0,            "search by tess ID", 0);
    162167    psMetadataAddStr(sumskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0,         "search by skycell ID", 0);
     168#ifdef notdef
     169    // These don't work so omit (for now) We probably should create a different mode for this type of search.
     170    psMetadataAddS64(sumskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,            "search by warp ID", 0);
    163171    psMetadataAddS64(sumskyfileArgs, PS_LIST_TAIL, "-exp_id", 0,            "search by exposure ID", 0);
    164172    psMetadataAddStr(sumskyfileArgs, PS_LIST_TAIL, "-exp_name", 0,          "search by exposure name", NULL);
     173#endif
     174    psMetadataAddStr(sumskyfileArgs, PS_LIST_TAIL, "-label", 0,             "search by stackRun.label", NULL);
     175    psMetadataAddStr(sumskyfileArgs, PS_LIST_TAIL, "-filter", 0,            "search by filter (LIKE comparison)", NULL);
     176    psMetadataAddS16(sumskyfileArgs, PS_LIST_TAIL, "-fault",  0,            "search by fault code", 0);
    165177    psMetadataAddU64(sumskyfileArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    166178    psMetadataAddBool(sumskyfileArgs, PS_LIST_TAIL, "-simple",  0,            "use the simple output format", false);
     179    psMetadataAddBool(sumskyfileArgs, PS_LIST_TAIL, "-all",  0,            "enable search without arguments", false);
    167180
    168181    // -revertsumskyfile
  • branches/eam_branches/20090820/ippTools/src/warptool.c

    r24956 r25766  
    5353static bool tocleanedskyfileMode(pxConfig *config);
    5454static bool topurgedskyfileMode(pxConfig *config);
     55static bool toscrubbedskyfileMode(pxConfig *config);
    5556static bool tofullskyfileMode(pxConfig *config);
    5657static bool updateskyfileMode(pxConfig *config);
     
    102103        MODECASE(WARPTOOL_MODE_TOCLEANEDSKYFILE,   tocleanedskyfileMode);
    103104        MODECASE(WARPTOOL_MODE_TOPURGEDSKYFILE,    topurgedskyfileMode);
     105        MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE,  toscrubbedskyfileMode);
    104106        MODECASE(WARPTOOL_MODE_TOFULLSKYFILE,      tofullskyfileMode);
    105107        MODECASE(WARPTOOL_MODE_UPDATESKYFILE,      updateskyfileMode);
     
    11961198    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
    11971199    PXOPT_COPY_S64(config->args, where, "-fake_id",    "fakeRun.fake_id", "==");
     1200    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs",  ">=");
     1201    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawExp.dateobs",  "<=");
     1202    PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "==");
     1203    PXOPT_COPY_S64(config->args, where, "-magicked", "warpSkyfile.magicked", "==");
     1204    pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
     1205
     1206    PXOPT_LOOKUP_U64(magicked, config->args, "-magicked", false, false);
     1207    PXOPT_LOOKUP_BOOL(destreaked, config->args,     "-destreaked", false);
     1208    PXOPT_LOOKUP_BOOL(not_destreaked, config->args, "-not_destreaked", false);
     1209
     1210    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
    11981211
    11991212    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     
    12111224        psStringAppend(&query, " AND %s", whereClause);
    12121225        psFree(whereClause);
     1226    } else if (!all) {
     1227        psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
     1228        return false;
    12131229    }
    12141230    psFree(where);
     1231
     1232    if (not_destreaked) {
     1233        if (destreaked) {
     1234            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -destreaked makes no sense");
     1235            return false;
     1236        }
     1237        if (magicked) {
     1238            psError(PXTOOLS_ERR_DATA, true, "providing -not_destreaked and -magicked makes no sense");
     1239            return false;
     1240        }
     1241        psStringAppend(&query, " AND warpSkyfile.magicked = 0");
     1242    }
     1243    if (destreaked) {
     1244        psStringAppend(&query, " AND warpSkyfile.magicked != 0");
     1245    }
    12151246
    12161247    // treat limit == 0 as "no limit"
     
    16681699    return change_skyfile_data_state(config, "purged", "goto_purged");
    16691700}
     1701static bool toscrubbedskyfileMode(pxConfig *config)
     1702{
     1703     return change_skyfile_data_state(config, "scrubbed", "goto_scrubbed");
     1704}
    16701705
    16711706static bool updateskyfileMode(pxConfig *config)
  • branches/eam_branches/20090820/ippTools/src/warptool.h

    r24426 r25766  
    4949    WARPTOOL_MODE_TOCLEANEDSKYFILE,
    5050    WARPTOOL_MODE_TOPURGEDSKYFILE,
     51    WARPTOOL_MODE_TOSCRUBBEDSKYFILE,
    5152    WARPTOOL_MODE_TOFULLSKYFILE,
    5253    WARPTOOL_MODE_UPDATESKYFILE,
  • branches/eam_branches/20090820/ippTools/src/warptoolConfig.c

    r24956 r25766  
    215215    psMetadataAddStr(warpedArgs, PS_LIST_TAIL, "-exp_name", 0,          "search by exposure tag", 0);
    216216    psMetadataAddS64(warpedArgs, PS_LIST_TAIL, "-fake_id", 0,           "search by phase 3 version of exposure tag", 0);
     217    psMetadataAddTime(warpedArgs, PS_LIST_TAIL, "-dateobs_begin", 0,    "search for exposures by time (>=)", NULL);
     218    psMetadataAddTime(warpedArgs, PS_LIST_TAIL, "-dateobs_end", 0,      "search for exposures by time (<=)", NULL);
     219    psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-filter", 0,           "search for exposures by filter", NULL);
     220    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-destreaked",  0,      "search for destreaked images", false);
     221    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-not_destreaked",  0,  "search for images that have not been destreaked", false);
     222    psMetadataAddS64(warpedArgs, PS_LIST_TAIL,  "-magicked", 0,         "search by magicked value", 0);
     223    psMetadataAddS16(warpedArgs, PS_LIST_TAIL,  "-fault",  0,           "search by fault code", 0);
     224    psMetadataAddStr(warpedArgs, PS_LIST_TAIL,  "-label",  PS_META_DUPLICATE_OK, "search by warpRun label", NULL);
     225
     226    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-all",  0,             "search without arguments", false);
    217227    psMetadataAddU64(warpedArgs, PS_LIST_TAIL, "-limit",  0,            "limit result set to N items", 0);
    218228    psMetadataAddBool(warpedArgs, PS_LIST_TAIL, "-simple",  0,          "use the simple output format", false);
     
    278288    psMetadataAddS64(topurgedskyfileArgs, PS_LIST_TAIL, "-warp_id", 0,    "warptool ID to update", 0);
    279289    psMetadataAddStr(topurgedskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
     290
     291    // -toscrubbedskyfile
     292    psMetadata *toscrubbedskyfileArgs = psMetadataAlloc();
     293    psMetadataAddS64(toscrubbedskyfileArgs, PS_LIST_TAIL, "-warp_id", 0, "warptool ID to update", 0);
     294    psMetadataAddStr(toscrubbedskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
    280295
    281296    // -tofullskyfile
     
    328343    PXOPT_ADD_MODE("-tocleanedskyfile", "set skyfile as cleaned", WARPTOOL_MODE_TOCLEANEDSKYFILE, tocleanedskyfileArgs);
    329344    PXOPT_ADD_MODE("-topurgedskyfile", "set skyfile as purged", WARPTOOL_MODE_TOPURGEDSKYFILE, topurgedskyfileArgs);
     345    PXOPT_ADD_MODE("-toscrubbedskyfile", "set skyfile as scrubbed", WARPTOOL_MODE_TOSCRUBBEDSKYFILE, toscrubbedskyfileArgs);
    330346    PXOPT_ADD_MODE("-tofullskyfile", "set skyfile as full (updated)", WARPTOOL_MODE_TOFULLSKYFILE, tofullskyfileArgs);
    331347    PXOPT_ADD_MODE("-updateskyfile", "update fault code for skyfile", WARPTOOL_MODE_UPDATESKYFILE, updateskyfileArgs);
Note: See TracChangeset for help on using the changeset viewer.