IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 3, 2010, 8:50:52 AM (16 years ago)
Author:
eugene
Message:

updates from trunk

Location:
branches/simtest_nebulous_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/simtest_nebulous_branches

  • branches/simtest_nebulous_branches/ippTools/src

    • Property svn:ignore
      •  

        old new  
         1*.la
         2*.lo
        13.deps
        24.gdb_history
         
        46Makefile
        57Makefile.in
         8addtool
         9caltool
         10camtool
         11chiptool
        612config.h
        713config.h.in
        8 stamp-h1
        9 *.la
        10 *.lo
         14detselect
         15dettool
         16difftool
         17disttool
         18dqstatstool
         19faketool
         20flatcorr
         21guidetool
         22magicdstool
         23magictool
         24pstamptool
         25pubtool
         26pxadmin
         27pxdata.c
         28pxinject
        1129pxtoolsErrorCodes.c
        1230pxtoolsErrorCodes.h
        13 pxadmin
        14 pxinject
        15 pztool
        1631pzgetexp
        1732pzgetimfiles
         33pztool
         34receivetool
        1835regtool
        19 guidetool
        20 chiptool
        21 camtool
         36stacktool
         37stamp-h1
        2238warptool
        23 difftool
        24 stacktool
        25 faketool
        26 dettool
        27 detselect
        28 pxdata.c
        29 magictool
        30 magicdstool
        31 caltool
        32 flatcorr
        33 pstamptool
        34 disttool
        35 receivetool
        36 
        37 pubtool
  • branches/simtest_nebulous_branches/ippTools/src/warptool.c

    r24956 r27840  
    5353static bool tocleanedskyfileMode(pxConfig *config);
    5454static bool topurgedskyfileMode(pxConfig *config);
     55static bool toscrubbedskyfileMode(pxConfig *config);
    5556static bool tofullskyfileMode(pxConfig *config);
    5657static bool updateskyfileMode(pxConfig *config);
    5758static bool exportrunMode(pxConfig *config);
    5859static bool importrunMode(pxConfig *config);
     60static bool runstateMode(pxConfig *config);
     61static bool listrunMode(pxConfig *config);
     62static bool setskyfiletoupdateMode(pxConfig *config);
    5963
    6064static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
     
    102106        MODECASE(WARPTOOL_MODE_TOCLEANEDSKYFILE,   tocleanedskyfileMode);
    103107        MODECASE(WARPTOOL_MODE_TOPURGEDSKYFILE,    topurgedskyfileMode);
     108        MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE,  toscrubbedskyfileMode);
    104109        MODECASE(WARPTOOL_MODE_TOFULLSKYFILE,      tofullskyfileMode);
    105110        MODECASE(WARPTOOL_MODE_UPDATESKYFILE,      updateskyfileMode);
    106111        MODECASE(WARPTOOL_MODE_EXPORTRUN,          exportrunMode);
    107112        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
     113        MODECASE(WARPTOOL_MODE_RUNSTATE,           runstateMode);
     114        MODECASE(WARPTOOL_MODE_LISTRUN,            listrunMode);
     115        MODECASE(WARPTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateMode);
    108116
    109117        default:
     
    137145    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false); // required
    138146    PXOPT_LOOKUP_STR(label, config->args, "-label", false, false);
     147    PXOPT_LOOKUP_STR(data_group, config->args, "-data_group", false, false);
     148    PXOPT_LOOKUP_STR(dist_group, config->args, "-dist_group", false, false);
     149    PXOPT_LOOKUP_STR(note, config->args, "-note", false, false);
    139150    PXOPT_LOOKUP_STR(dvodb, config->args, "-dvodb", false, false);
    140151    PXOPT_LOOKUP_STR(tess_id, config->args, "-tess_id", true, false); // required (no default TESS)
     
    158169            "dirty",    // workdir_state
    159170            label,
     171            data_group ? data_group : label,
     172            dist_group,
    160173            dvodb,
    161174            tess_id,
     
    163176            end_stage,
    164177            registered,
    165             0       // magicked
     178            0,       // magicked
     179            note
    166180    );
    167181    if (!warpRun) {
     
    237251    PXOPT_COPY_F32(config->args,   where, "-sun_angle_max",      "rawExp.sun_angle",      "<");
    238252    PXOPT_COPY_STR(config->args,   where, "-reduction",          "fakeRun.reduction",     "==");
    239     pxAddLabelSearchArgs (config,  where, "-label",             "fakeRun.label",         "==");
     253    pxAddLabelSearchArgs (config,  where, "-label",              "fakeRun.label",         "=="); // define using fake label
    240254
    241255    if (!psListLength(where->list) &&
    242256        !psMetadataLookupBool(NULL, config->args, "-all")) {
    243257        psFree(where);
    244         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     258        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    245259        return false;
    246260    }
     
    249263    PXOPT_LOOKUP_STR(workdir, config->args, "-set_workdir", false, false);
    250264    PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
     265    PXOPT_LOOKUP_STR(data_group, config->args, "-set_data_group", false, false);
     266    PXOPT_LOOKUP_STR(dist_group, config->args, "-set_dist_group", false, false);
    251267    PXOPT_LOOKUP_STR(dvodb, config->args, "-set_dvodb", false, false);
    252268    PXOPT_LOOKUP_STR(tess_id, config->args, "-set_tess_id", false, false);
    253269    PXOPT_LOOKUP_STR(reduction, config->args, "-set_reduction", false, false);
    254270    PXOPT_LOOKUP_STR(end_stage, config->args, "-set_end_stage", false, false);
     271    PXOPT_LOOKUP_STR(note, config->args, "-set_note", false, false);
    255272
    256273    PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false);
     
    266283    psString query = pxDataGet("warptool_definebyquery.sql");
    267284    if (!query) {
    268         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     285        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    269286        psFree(where);
    270287        return false;
     
    338355                                 workdir     ? workdir   : row->workdir,
    339356                                 label       ? label     : row->label,
     357                                 data_group  ? data_group: row->data_group,
     358                                 dist_group  ? dist_group: row->dist_group,
    340359                                 dvodb       ? dvodb     : row->dvodb,
    341360                                 tess_id     ? tess_id   : row->tess_id,
    342361                                 reduction   ? reduction : row->reduction,
    343                                  end_stage   ? end_stage : row->end_stage))
     362                                 end_stage   ? end_stage : row->end_stage,
     363                                 note))
    344364          {
    345365            psError(PS_ERR_UNKNOWN, false, "failed to trying to queue fake_id: %" PRId64, row->fake_id);
     
    367387    PXOPT_COPY_S64(config->args, where, "-warp_id",   "warpRun.warp_id",   "==");
    368388    PXOPT_COPY_STR(config->args, where, "-reduction", "warpRun.reduction", "==");
    369     PXOPT_COPY_STR(config->args, where, "-label",     "warpRun.label",     "==");
    370389    PXOPT_COPY_STR(config->args, where, "-state",     "warpRun.state",     "==");
    371 
    372     if (!psListLength(where->list)
    373         && !psMetadataLookupBool(NULL, config->args, "-all")) {
     390    PXOPT_COPY_STR(config->args, where, "-data_group","warpRun.data_group","==");
     391    PXOPT_COPY_STR(config->args, where, "-dist_group","warpRun.dist_group","==");
     392    pxAddLabelSearchArgs(config,  where, "-label",    "warpRun.label",     "==");
     393
     394    PXOPT_COPY_TIME(config->args, where, "-registered_begin", "warpRun.registered",  ">=");
     395    PXOPT_COPY_TIME(config->args, where, "-registered_end",   "warpRun.registered",  "<");
     396
     397    PXOPT_LOOKUP_BOOL(destreaked, config->args, "-destreaked", false);
     398    if (destreaked) {
     399        psMetadataAddS64(where, PS_LIST_TAIL, "warpRun.magicked", PS_META_DUPLICATE_OK, ">", 0);
     400    }
     401
     402    if (!psListLength(where->list)) {
    374403        psFree(where);
    375         where = NULL;
    376         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
    377         return false;
    378     }
    379 
    380     PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
    381     PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
    382 
    383     if ((!state) && (!label)) {
    384         psError(PXTOOLS_ERR_DATA, false, "parameters (-state or -label) are required");
    385         psFree(where);
    386         return false;
    387     }
    388 
    389     if (state) {
    390         // set warpRun.state to state
    391         if (!pxwarpRunSetStateByQuery(config, where, state)) {
    392             psFree(where);
    393             return false;
    394         }
    395     }
    396 
    397     if (label) {
    398         // set chipRun.label to label
    399         if (!pxwarpRunSetLabelByQuery(config, where, label)) {
    400             psFree(where);
    401             return false;
    402         }
    403     }
    404 
     404        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
     405        return false;
     406    }
     407
     408    psString query = psStringCopy("UPDATE warpRun JOIN warpSkyfile USING(warp_id) JOIN fakeRun USING(fake_id) JOIN camRun USING(cam_id) JOIN chipRun USING(chip_id) JOIN rawExp USING(exp_id)");
     409
     410    // pxUpdateRun gets parameters from config->args and updates
     411    bool result = pxUpdateRun(config, where, &query, "warpRun", "warp_id", "warpSkyfile", true);
     412
     413    psFree(query);
    405414    psFree(where);
    406415
    407     return true;
    408 }
    409 
     416    return result;
     417}
    410418
    411419static bool expMode(pxConfig *config)
     
    423431    psString query = pxDataGet("warptool_exp.sql");
    424432    if (!query) {
    425         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     433        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    426434        return false;
    427435    }
     
    497505    psString query = pxDataGet("warptool_imfile.sql");
    498506    if (!query) {
    499         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     507        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    500508        return false;
    501509    }
     
    571579    psString query = pxDataGet("warptool_tooverlap.sql");
    572580    if (!query) {
    573         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     581        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    574582        return false;
    575583    }
     
    680688    PXOPT_COPY_STR(config->args, where, "-skycell_id", "warpSkyCellMap.skycell_id", "==");
    681689    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpSkyCellMap.tess_id", "==");
    682     // PXOPT_COPY_STR(config->args, where, "-label",      "warpRun.label", "==");
    683690    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "==");
    684691    PXOPT_COPY_S16(config->args, where, "-fault",      "warpSkyCellMap.fault", "==");
     
    687694        && !psMetadataLookupBool(NULL, config->args, "-all")) {
    688695        psFree(where);
    689         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     696        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    690697        return false;
    691698    }
     
    695702        psString query = pxDataGet("warptool_revertoverlap.sql");
    696703        if (!query) {
    697             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     704            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    698705            if (!psDBRollback(config->dbh)) {
    699706                psError(PS_ERR_UNKNOWN, false, "database error");
     
    827834    psString query = pxDataGet("warptool_scmap.sql");
    828835    if (!query) {
    829         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     836        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    830837        return false;
    831838    }
     
    900907    psString query = pxDataGet("warptool_towarped.sql");
    901908    if (!query) {
    902         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    903         return false;
    904     }
    905 
     909        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     910        return false;
     911    }
     912
     913    psString whereStr = psStringCopy("");
    906914    if (psListLength(where->list)) {
    907915        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    908         psStringAppend(&query, " AND %s", whereClause);
     916        psStringAppend(&whereStr, "\n AND %s", whereClause);
    909917        psFree(whereClause);
    910918    }
     
    912920
    913921    // treat limit == 0 as "no limit"
     922    psString limitString = psStringCopy("\n");
    914923    if (limit) {
    915         psString limitString = psDBGenerateLimitSQL(limit);
     924        // We apply the limit to both sides of the UNION
     925        // to avoid slow queries and to the query itself
     926        // to satisfy the user's requested limit
     927        psStringAppend(&limitString, "%s", psDBGenerateLimitSQL(limit));
    916928        psStringAppend(&query, " %s", limitString);
    917         psFree(limitString);
    918     }
    919 
    920     if (!p_psDBRunQuery(config->dbh, query)) {
     929    }
     930
     931#define TWO_WHERES
     932#ifdef TWO_WHERES
     933    if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr,  limitString)) {
    921934        psError(PS_ERR_UNKNOWN, false, "database error");
    922935        psFree(query);
    923936        return false;
    924937    }
     938#else
     939    if (!p_psDBRunQueryF(config->dbh, query, whereStr)) {
     940        psError(PS_ERR_UNKNOWN, false, "database error");
     941        psFree(query);
     942        return false;
     943    }
     944#endif
     945    psFree(limitString);
     946    psFree(whereStr);
    925947    psFree(query);
    926948
     
    9811003    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
    9821004    PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false);
    983     PXOPT_LOOKUP_S64(magicked, config->args, "-magicked", false, false);
     1005    PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
    9841006
    9851007    // default values
     
    10441066    psString query = pxDataGet("warptool_finished_run_select.sql");
    10451067    if (!query) {
    1046         psError(PXTOOLS_ERR_DATA, false, "failed to retrieve SQL statement");
     1068        psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
    10471069        return false;
    10481070    }
     
    11201142    psString query = pxDataGet("warptool_finished_run_select.sql");
    11211143    if (!query) {
    1122         psError(PXTOOLS_ERR_DATA, false, "failed to retrieve SQL statement");
     1144        psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
    11231145        return false;
    11241146    }
     
    11961218    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
    11971219    PXOPT_COPY_S64(config->args, where, "-fake_id",    "fakeRun.fake_id", "==");
     1220    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs",  ">=");
     1221    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawExp.dateobs",  "<=");
     1222    PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "LIKE");
     1223    PXOPT_COPY_S64(config->args, where, "-magicked", "warpSkyfile.magicked", "==");
     1224    pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
     1225    pxAddLabelSearchArgs (config, where, "-data_group",   "warpRun.data_group", "LIKE");
     1226
     1227    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
    11981228
    11991229    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     
    12031233    psString query = pxDataGet("warptool_warped.sql");
    12041234    if (!query) {
    1205         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1235        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1236        return false;
     1237    }
     1238
     1239    // generate where strings for arguments that require extra processing
     1240    // beyond PXOPT_COPY*
     1241    psString where2 = NULL;
     1242    if (!pxmagicAddWhere(config, &where2, "warpSkyfile")) {
     1243        psError(psErrorCodeLast(), false, "pxMagicAddWhere failed");
     1244        return false;
     1245    }
     1246    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     1247        psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
    12061248        return false;
    12071249    }
     
    12091251    if (psListLength(where->list)) {
    12101252        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1211         psStringAppend(&query, " AND %s", whereClause);
     1253        psStringAppend(&query, " WHERE %s", whereClause);
    12121254        psFree(whereClause);
     1255    } else if (!all && !where2) {
     1256        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     1257        return false;
     1258    }
     1259
     1260    if (where2) {
     1261        if (psListLength(where->list)) {
     1262            psStringAppend(&query, " %s", where2);
     1263        } else {
     1264            psStringAppend(&query, " WHERE 1 %s", where2);
     1265        }
    12131266    }
    12141267    psFree(where);
     
    12721325    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpSkyfile.tess_id", "==");
    12731326    PXOPT_COPY_STR(config->args, where, "-reduction",  "rawExp.reduction", "==");
    1274     // PXOPT_COPY_STR(config->args, where, "-label",      "warpRun.label", "==");
    12751327    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "==");
    1276     PXOPT_COPY_S16(config->args, where, "-fault",       "warpSkyfile.fault", "==");
     1328    PXOPT_COPY_S16(config->args, where, "-fault",      "warpSkyfile.fault", "==");
    12771329
    12781330    if (!psListLength(where->list)
    12791331        && !psMetadataLookupBool(NULL, config->args, "-all")) {
    12801332        psFree(where);
    1281         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
    1282         return false;
    1283     }
    1284 
    1285     if (!psDBTransaction(config->dbh)) {
    1286         psError(PS_ERR_UNKNOWN, false, "database error");
    1287         psFree(where);
    1288         return false;
    1289     }
    1290 
    1291     // Delete product
    1292     int numDeleted;                     // Number deleted
    1293     {
    1294         psString query = pxDataGet("warptool_revertwarped_delete.sql");
    1295         if (!query) {
    1296             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    1297             if (!psDBRollback(config->dbh)) {
    1298                 psError(PS_ERR_UNKNOWN, false, "database error");
    1299             }
    1300             return false;
    1301         }
    1302 
    1303         if (psListLength(where->list)) {
    1304             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1305             psStringAppend(&query, " AND %s", whereClause);
    1306             psFree(whereClause);
    1307         }
    1308 
    1309         if (!p_psDBRunQuery(config->dbh, query)) {
    1310             psError(PS_ERR_UNKNOWN, false, "database error");
    1311             psFree(query);
    1312             if (!psDBRollback(config->dbh)) {
    1313                 psError(PS_ERR_UNKNOWN, false, "database error");
    1314             }
    1315             return false;
    1316         }
     1333        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
     1334        return false;
     1335    }
     1336
     1337    psString query = pxDataGet("warptool_revertwarped_delete.sql");
     1338    if (!query) {
     1339        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1340        return false;
     1341    }
     1342    psString query_updated = pxDataGet("warptool_revertwarped_updated.sql");
     1343    if (!query_updated) {
     1344        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1345        return false;
     1346    }
     1347
     1348    if (psListLength(where->list)) {
     1349        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1350        psStringAppend(&query, " AND %s", whereClause);
     1351        psStringAppend(&query_updated, " AND %s", whereClause);
     1352        psFree(whereClause);
     1353    }
     1354    psFree(where);
     1355
     1356    if (!p_psDBRunQuery(config->dbh, query)) {
     1357        psError(PS_ERR_UNKNOWN, false, "database error");
    13171358        psFree(query);
    1318 
    1319         numDeleted = psDBAffectedRows(config->dbh);
    1320     }
     1359        return false;
     1360    }
     1361    psFree(query);
     1362
     1363    int numDeleted = psDBAffectedRows(config->dbh);
    13211364
    13221365    psLogMsg("warptool", PS_LOG_INFO, "Deleted %d warpSkyfiles", numDeleted);
    13231366
    1324     psFree(where);
    1325 
    1326     if (!psDBCommit(config->dbh)) {
    1327         psError(PS_ERR_UNKNOWN, false, "database error");
    1328         return false;
    1329     }
     1367    // fix any faulted warpSkyfiles in data_state 'update'
     1368
     1369    if (!p_psDBRunQuery(config->dbh, query_updated)) {
     1370        psError(PS_ERR_UNKNOWN, false, "database error");
     1371        psFree(query_updated);
     1372        return false;
     1373    }
     1374    psFree(query_updated);
     1375
     1376    int numUpdated = psDBAffectedRows(config->dbh);
     1377
     1378    psLogMsg("warptool", PS_LOG_INFO, "Updated %d warpSkyfiles", numUpdated);
    13301379
    13311380    return true;
     
    14141463    psString query = pxDataGet("warptool_pendingcleanuprun.sql");
    14151464    if (!query) {
    1416         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1465        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    14171466        return false;
    14181467    }
     
    14771526    psString query = pxDataGet("warptool_pendingcleanupskyfile.sql");
    14781527    if (!query) {
    1479         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1528        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    14801529        return false;
    14811530    }
     
    15381587    psString query = pxDataGet("warptool_donecleanup.sql");
    15391588    if (!query) {
    1540         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1589        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    15411590        return false;
    15421591    }
     
    16261675    }
    16271676
    1628     // note only updates if warpRun.state = run_state
    1629     // XXX note that we have removed this constraint for now
    1630     if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, skycell_id)) {
     1677    psString set_magicked_skyfile = psStringCopy("");
     1678    psString set_magicked_run = psStringCopy("");
     1679    if (!strcmp(data_state, "full")) {
     1680        // magicked is only an argument for for -tofullskyfile
     1681        PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
     1682        if (magicked) {
     1683            psStringAppend(&set_magicked_skyfile, "\n , warpSkyfile.magicked = %" PRId64, magicked);
     1684            psStringAppend(&set_magicked_run, "\n,  warpRun.magicked = %" PRId64, magicked);
     1685        }
     1686    } else if (!strcmp(data_state, "cleaned") || !strcmp(data_state, "purged")) {
     1687        // if magicked is currently nonzero set it to -1
     1688        // Set warpRun.magicked when the first skyfile is cleaned
     1689        psStringAppend(&set_magicked_skyfile, "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1), warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)");
     1690    }
     1691
     1692    if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_skyfile, warp_id, skycell_id)) {
    16311693        psError(PS_ERR_UNKNOWN, false, "database error");
    16321694        // rollback
     
    16381700    }
    16391701    psFree(query);
     1702    psFree(set_magicked_skyfile);
    16401703
    16411704    query = pxDataGet("warptool_change_run_state.sql");
    1642     if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, data_state)) {
     1705    if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_run, warp_id, data_state)) {
    16431706        // rollback
    16441707        if (!psDBRollback(config->dbh)) {
     
    16481711        return false;
    16491712    }
     1713    psFree(set_magicked_run);
    16501714
    16511715    if (!psDBCommit(config->dbh)) {
     
    16671731{
    16681732    return change_skyfile_data_state(config, "purged", "goto_purged");
     1733}
     1734static bool toscrubbedskyfileMode(pxConfig *config)
     1735{
     1736     return change_skyfile_data_state(config, "scrubbed", "goto_scrubbed");
    16691737}
    16701738
     
    16771745    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", true, false);
    16781746    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
    1679 
    1680     psString query = pxDataGet("warptool_updateskyfile.sql");
    1681 
    1682     if (!p_psDBRunQueryF(config->dbh, query, fault, warp_id, skycell_id)) {
    1683         psError(PS_ERR_UNKNOWN, false, "database error");
    1684         return false;
    1685     }
    1686     psFree(query);
     1747    PXOPT_LOOKUP_STR(state, config->args, "-set_state", false, false);
     1748
     1749    if (!state) {
     1750      psString query = pxDataGet("warptool_updateskyfile.sql");
     1751
     1752      if (!p_psDBRunQueryF(config->dbh, query, fault, warp_id, skycell_id)) {
     1753        psError(PS_ERR_UNKNOWN, false, "database error");
     1754        return false;
     1755      }
     1756      psFree(query);
     1757    }
     1758    else {
     1759      if (strcmp(state,"error_cleaned") == 0) {
     1760        change_skyfile_data_state(config,"error_cleaned","goto_cleaned");
     1761      }
     1762      else if (strcmp(state, "error_scrubbed") == 0) {
     1763        change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed");
     1764      }
     1765      else if (strcmp(state, "error_purged") == 0) {
     1766        change_skyfile_data_state(config,"error_purged","goto_purged");
     1767      }
     1768      else {
     1769        psError(PS_ERR_UNKNOWN, false, "unhandled state given");
     1770        return(false);
     1771      }
     1772    }
    16871773
    16881774    return true;
     
    17091795    }
    17101796
     1797    if (!pxExportVersion(config, f)) {
     1798        psError(PS_ERR_UNKNOWN, false, "failed to write dbversion output file");
     1799        return false;
     1800    }
    17111801    psMetadata *where = psMetadataAlloc();
    17121802    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
     
    17241814      psString query = pxDataGet(tables[i].sqlFilename);
    17251815      if (!query) {
    1726           psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1816          psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    17271817          return false;
    17281818      }
     
    18011891  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
    18021892
    1803   fprintf (stdout, "---- input ----\n");
     1893#ifdef notdef
     1894  fprintf (stderr, "---- input ----\n");
    18041895  psMetadataPrint (stderr, input, 1);
     1896#endif
     1897
     1898  if (!pxCheckImportVersion(config, input)) {
     1899      psError(PS_ERR_UNKNOWN, false, "pxCheckImportVersion failed");
     1900      return false;
     1901  }
    18051902
    18061903  psMetadataItem *item = psMetadataLookup (input, "warpRun");
     
    18651962  return true;
    18661963}
     1964
     1965static bool runstateMode(pxConfig *config)
     1966{
     1967    PS_ASSERT_PTR_NON_NULL(config, false);
     1968
     1969    psMetadata *where = psMetadataAlloc();
     1970    PXOPT_COPY_S64(config->args, where, "-warp_id",    "warpRun.warp_id", "==");
     1971    PXOPT_COPY_S64(config->args, where, "-exp_id",     "rawExp.exp_id", "==");
     1972    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
     1973    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "LIKE");
     1974
     1975//    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     1976    PXOPT_LOOKUP_BOOL(no_magic, config->args, "-no_magic", false);
     1977
     1978    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1979    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1980
     1981    psString query = pxDataGet("warptool_runstate.sql");
     1982    if (!query) {
     1983        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1984        return false;
     1985    }
     1986
     1987    if (psListLength(where->list)) {
     1988        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1989        psStringAppend(&query, " WHERE %s", whereClause);
     1990        psFree(whereClause);
     1991    } else {
     1992        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     1993        return false;
     1994    }
     1995    psFree(where);
     1996
     1997    // treat limit == 0 as "no limit"
     1998    if (limit) {
     1999        psString limitString = psDBGenerateLimitSQL(limit);
     2000        psStringAppend(&query, " %s", limitString);
     2001        psFree(limitString);
     2002    }
     2003
     2004    if (!p_psDBRunQuery(config->dbh, query)) {
     2005        psError(PS_ERR_UNKNOWN, false, "database error");
     2006        psFree(query);
     2007        return false;
     2008    }
     2009    psFree(query);
     2010
     2011    psArray *output = p_psDBFetchResult(config->dbh);
     2012    if (!output) {
     2013        psErrorCode err = psErrorCodeLast();
     2014        switch (err) {
     2015            case PS_ERR_DB_CLIENT:
     2016                psError(PXTOOLS_ERR_SYS, false, "database error");
     2017            case PS_ERR_DB_SERVER:
     2018                psError(PXTOOLS_ERR_PROG, false, "database error");
     2019            default:
     2020                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2021        }
     2022
     2023        return false;
     2024    }
     2025    if (!psArrayLength(output)) {
     2026        psTrace("warptool", PS_LOG_INFO, "no rows found");
     2027        psFree(output);
     2028        return true;
     2029    }
     2030
     2031    if (psArrayLength(output)) {
     2032        // negative simple so the default is true
     2033        if (!ippdbPrintMetadatas(stdout, output, "warpRunState", !simple)) {
     2034            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2035            psFree(output);
     2036            return false;
     2037        }
     2038    }
     2039
     2040    psFree(output);
     2041
     2042    return true;
     2043}
     2044
     2045static bool listrunMode(pxConfig *config)
     2046{
     2047    PS_ASSERT_PTR_NON_NULL(config, false);
     2048
     2049    psMetadata *where = psMetadataAlloc();
     2050    PXOPT_COPY_S64(config->args, where, "-warp_id",    "warpRun.warp_id", "==");
     2051    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpRun.tess_id", "==");
     2052    PXOPT_COPY_STR(config->args, where, "-state",      "warpRun.state", "==");
     2053    PXOPT_COPY_S64(config->args, where, "-exp_id",     "rawExp.exp_id", "==");
     2054    PXOPT_COPY_STR(config->args, where, "-exp_name",   "rawExp.exp_name", "==");
     2055    PXOPT_COPY_S64(config->args, where, "-fake_id",    "fakeRun.fake_id", "==");
     2056    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs",  ">=");
     2057    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawExp.dateobs",  "<=");
     2058    PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "LIKE");
     2059    PXOPT_COPY_S64(config->args, where, "-magicked", "warpRun.magicked", "==");
     2060    pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
     2061    pxAddLabelSearchArgs (config, where, "-data_group",   "warpRun.data_group", "LIKE");
     2062    pxAddLabelSearchArgs (config, where, "-dist_group",   "warpRun.dist_group", "LIKE");
     2063
     2064    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     2065
     2066    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     2067    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     2068    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
     2069
     2070    // find all rawImfiles matching the default query
     2071    psString query = pxDataGet("warptool_listrun.sql");
     2072    if (!query) {
     2073        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2074        return false;
     2075    }
     2076
     2077    // generate where strings for arguments that require extra processing
     2078    // beyond PXOPT_COPY*
     2079    psString where2 = NULL;
     2080    if (!pxmagicAddWhere(config, &where2, "warpRun")) {
     2081        psError(psErrorCodeLast(), false, "pxMagicAddWhere failed");
     2082        return false;
     2083    }
     2084    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     2085        psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     2086        return false;
     2087    }
     2088
     2089    if (psListLength(where->list)) {
     2090        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     2091        psStringAppend(&query, " WHERE %s", whereClause);
     2092        psFree(whereClause);
     2093    } else if (!all && !where2) {
     2094        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     2095        return false;
     2096    }
     2097
     2098    if (where2) {
     2099        if (psListLength(where->list)) {
     2100            psStringAppend(&query, " %s", where2);
     2101        } else {
     2102            psStringAppend(&query, " WHERE 1 %s", where2);
     2103        }
     2104    }
     2105    psFree(where);
     2106
     2107    if (pstamp_order) {
     2108        // put runs in order of exposure id with newest chip Runs first
     2109        // The postage stamp parser depends on this behavior
     2110        psStringAppend(&query, "\nORDER by exp_id, warp_id DESC");
     2111    }
     2112
     2113
     2114    // treat limit == 0 as "no limit"
     2115    if (limit) {
     2116        psString limitString = psDBGenerateLimitSQL(limit);
     2117        psStringAppend(&query, " %s", limitString);
     2118        psFree(limitString);
     2119    }
     2120
     2121    if (!p_psDBRunQuery(config->dbh, query)) {
     2122        psError(PS_ERR_UNKNOWN, false, "database error");
     2123        psFree(query);
     2124        return false;
     2125    }
     2126    psFree(query);
     2127
     2128    psArray *output = p_psDBFetchResult(config->dbh);
     2129    if (!output) {
     2130        psErrorCode err = psErrorCodeLast();
     2131        switch (err) {
     2132            case PS_ERR_DB_CLIENT:
     2133                psError(PXTOOLS_ERR_SYS, false, "database error");
     2134            case PS_ERR_DB_SERVER:
     2135                psError(PXTOOLS_ERR_PROG, false, "database error");
     2136            default:
     2137                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2138        }
     2139
     2140        return false;
     2141    }
     2142    if (!psArrayLength(output)) {
     2143        psTrace("warptool", PS_LOG_INFO, "no rows found");
     2144        psFree(output);
     2145        return true;
     2146    }
     2147
     2148    if (psArrayLength(output)) {
     2149        // negative simple so the default is true
     2150        if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) {
     2151            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2152            psFree(output);
     2153            return false;
     2154        }
     2155    }
     2156
     2157    psFree(output);
     2158
     2159    return true;
     2160}
     2161
     2162// a very specfic function to queue a cleaned warpSkyfile to be updated
     2163static bool setskyfiletoupdateMode(pxConfig *config)
     2164{
     2165    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2166
     2167    PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false);
     2168    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false);
     2169    PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
     2170
     2171    psString query = pxDataGet("warptool_setskyfiletoupdate.sql");
     2172    if (!query) {
     2173        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2174        return false;
     2175    }
     2176
     2177    psString setHook = psStringCopy("");
     2178    if (label) {
     2179        psStringAppend(&setHook, "\n , warpRun.label = '%s'", label);
     2180    }
     2181
     2182    if (skycell_id) {
     2183        psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id);
     2184    }
     2185
     2186    if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) {
     2187        psError(PS_ERR_UNKNOWN, false, "database error");
     2188        return false;
     2189    }
     2190
     2191    psFree(setHook);
     2192    psFree(query);
     2193
     2194    return true;
     2195}
Note: See TracChangeset for help on using the changeset viewer.