IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 27, 2009, 11:34:07 AM (17 years ago)
Author:
eugene
Message:

merge changes from trunk

Location:
branches/eam_branches/20090715/ippTools/src
Files:
23 edited
2 copied

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090715/ippTools/src/Makefile.am

    r25400 r25624  
    2424        pubtool
    2525
    26 
    27 bin_SCRIPTS = \
    28         fakemagic
    29 
    3026pkginclude_HEADERS = \
    3127        pxadd.h \
     
    3632        pxdata.h \
    3733        pxfake.h \
     34        pxmagic.h \
    3835        pxregister.h \
    3936        pxtag.h \
     
    7976        pxfake.c \
    8077        pxfault.c \
     78        pxmagic.c \
    8179        pxregister.c \
    8280        pxtag.c \
  • branches/eam_branches/20090715/ippTools/src/difftool.c

    r25400 r25624  
    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;
     
    18101894}
    18111895
    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 }
    18571896
    18581897bool exportrunMode(pxConfig *config)
  • branches/eam_branches/20090715/ippTools/src/difftool.h

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

    r25022 r25624  
    114114    psMetadataAddF32(adddiffskyfileArgs, PS_LIST_TAIL, "-good_frac",  0, "define %% of good pixels", NAN);
    115115    psMetadataAddBool(adddiffskyfileArgs, PS_LIST_TAIL, "-magicked",  0, "define magicked state", false);
     116
     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);
    116122
    117123    // -diffskyfile
     
    267273    PXOPT_ADD_MODE("-todiffskyfile",    "", DIFFTOOL_MODE_TODIFFSKYFILE,     todiffskyfileArgs);
    268274    PXOPT_ADD_MODE("-adddiffskyfile",   "", DIFFTOOL_MODE_ADDDIFFSKYFILE,    adddiffskyfileArgs);
     275    PXOPT_ADD_MODE("-advance",          "", DIFFTOOL_MODE_ADVANCE,           advanceArgs);
    269276    PXOPT_ADD_MODE("-diffskyfile",      "", DIFFTOOL_MODE_DIFFSKYFILE,       diffskyfileArgs);
    270277    PXOPT_ADD_MODE("-revertdiffskyfile","", DIFFTOOL_MODE_REVERTDIFFSKYFILE, revertdiffskyfileArgs);
  • branches/eam_branches/20090715/ippTools/src/disttool.c

    r25400 r25624  
    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/20090715/ippTools/src/disttool.h

    r24001 r25624  
    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/20090715/ippTools/src/disttoolConfig.c

    r24725 r25624  
    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/20090715/ippTools/src/magicdstool.c

    r25022 r25624  
    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/20090715/ippTools/src/magicdstool.h

    r24683 r25624  
    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/20090715/ippTools/src/magicdstoolConfig.c

    r25022 r25624  
    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/20090715/ippTools/src/magictool.c

    r25022 r25624  
    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/20090715/ippTools/src/magictoolConfig.c

    r25022 r25624  
    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/20090715/ippTools/src/pstamptool.c

    r25400 r25624  
    228228    PXOPT_LOOKUP_STR(uri,         config->args, "-uri",   true, false);
    229229    PXOPT_LOOKUP_STR(name,        config->args, "-name",  false, false);
     230    PXOPT_LOOKUP_STR(label,       config->args, "-label",  false, false);
    230231    PXOPT_LOOKUP_S64(ds_id,       config->args, "-ds_id", false, false);
    231232
     
    236237        name,
    237238        NULL,   // reqType
     239        label,
    238240        NULL,   // outProduct
    239241        uri,   
     
    765767    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
    766768    PXOPT_COPY_S64(config->args, where, "-fault",  "fault", "==");
    767 
    768     if (!psListLength(where->list)) {
     769    PXOPT_COPY_S64(config->args, where, "-req_id_min",  "req_id", ">=");
     770    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     771    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     772
     773    psString query = pxDataGet("pstamptool_revertjob.sql");
     774    if (!psListLength(where->list) && !all) {
    769775        psFree(where);
    770         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
    771         return false;
    772     }
    773 
    774     psString query = pxDataGet("pstamptool_revertjob.sql");
    775     psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
    776     psStringAppend(&query, " AND %s", whereClause);
    777     psFree(whereClause);
     776        psError(PXTOOLS_ERR_DATA, false, "search parameters or -all are required");
     777        return false;
     778    }
     779    if (psListLength(where->list)) {
     780        psString whereClause = psDBGenerateWhereConditionSQL(where, "pstampJob");
     781        psStringAppend(&query, " AND %s", whereClause);
     782        psFree(whereClause);
     783    }
    778784    psFree(where);
    779785   
  • branches/eam_branches/20090715/ippTools/src/pstamptoolConfig.c

    r25400 r25624  
    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);
     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);
    6767    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
     
    135136    psMetadata *revertjobArgs = psMetadataAlloc();
    136137    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-req_id", 0,     "req_id to revert", 0);
     138    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-req_id_min", 0, "minimum req_id to revert", 0);
    137139    psMetadataAddS64(revertjobArgs, PS_LIST_TAIL, "-job_id", 0,     "job_id to revert", 0);
    138140    psMetadataAddS16(revertjobArgs, PS_LIST_TAIL, "-fault",  0,     "fault to revert", 0);
     141    psMetadataAddBool(revertjobArgs, PS_LIST_TAIL, "-all", 0,       "revert all faulted jobs", false);
     142    psMetadataAddU64(revertjobArgs, PS_LIST_TAIL, "-limit", 0,      "limit result set to N items", 0);
    139143
    140144    // -addproject
  • branches/eam_branches/20090715/ippTools/src/pxinject.c

    r18336 r25624  
    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/20090715/ippTools/src/pxinjectConfig.c

    r18561 r25624  
    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/20090715/ippTools/src/pxtools.h

    r25400 r25624  
    4646#include "pxtag.h"
    4747#include "pxtree.h"
     48#include "pxmagic.h"
    4849
    4950# define MAX_ROWS 10e9
  • branches/eam_branches/20090715/ippTools/src/pztool.c

    r23688 r25624  
    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/20090715/ippTools/src/pztoolConfig.c

    r23688 r25624  
    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/20090715/ippTools/src/regtool.c

    r25400 r25624  
    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");
     
    462468
    463469    PXOPT_LOOKUP_S16(fault, config->args, "-fault",   false, false);
    464     PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false);
    465 
    466     if ((fault == INT16_MAX) && !isfinite(user_1)) {
    467         psError(PS_ERR_UNKNOWN, false, "one of -fault or -user_1 must be selected");
    468         return false;
    469     }
    470     if ((fault != INT16_MAX) && isfinite(user_1)) {
    471         psError(PS_ERR_UNKNOWN, false, "only one of -fault or -user_1 must be selected");
     470/*     PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false); */
     471    PXOPT_LOOKUP_S16(burntool_state, config->args, "-burntool_state", false, false);
     472   
     473    if ((fault == INT16_MAX) && !isfinite(burntool_state)) {
     474        psError(PS_ERR_UNKNOWN, false, "one of -fault or -burntool_state must be selected");
     475        return false;
     476    }
     477    if ((fault != INT16_MAX) && isfinite(burntool_state)) {
     478        psError(PS_ERR_UNKNOWN, false, "only one of -fault or -burntool_state must be selected");
    472479        return false;
    473480    }
     
    486493    }
    487494
    488     if (isfinite(user_1)) {
     495    if (isfinite(burntool_state)) {
    489496        psString query = pxDataGet("regtool_updateprocessedimfile.sql");
    490497        if (!query) {
     
    493500        }
    494501
    495         if (!p_psDBRunQueryF(config->dbh, query, user_1, exp_id, class_id)) {
     502        if (!p_psDBRunQueryF(config->dbh, query, burntool_state, exp_id, class_id)) {
    496503            psError(PS_ERR_UNKNOWN, false, "database error");
    497504            psFree(query);
  • branches/eam_branches/20090715/ippTools/src/regtoolConfig.c

    r25022 r25624  
    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);
     
    153156    ADD_OPT(S64, updateprocessedimfileArgs, "-exp_id",        "search by exposure ID", 0);
    154157    ADD_OPT(Str, updateprocessedimfileArgs, "-class_id",      "search by class ID", NULL);
    155     ADD_OPT(F64, updateprocessedimfileArgs, "-user_1",        "set user stat (1)", NAN);
     158    ADD_OPT(S16, updateprocessedimfileArgs, "-burntool_state",        "set burntool state", 0);
    156159    ADD_OPT(S16, updateprocessedimfileArgs, "-fault",          "set fault code", INT16_MAX);
    157160
  • branches/eam_branches/20090715/ippTools/src/stacktool.c

    r25022 r25624  
    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", ">=");
  • branches/eam_branches/20090715/ippTools/src/stacktoolConfig.c

    r25022 r25624  
    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);
Note: See TracChangeset for help on using the changeset viewer.