IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

updates from trunk

Location:
branches/tap_branches
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/tap_branches

  • branches/tap_branches/ippTools/src

    • Property svn:ignore
      •  

        old new  
        1616difftool
        1717disttool
         18dqstatstool
        1819faketool
        1920flatcorr
  • branches/tap_branches/ippTools/src/warptool.c

    r25851 r27838  
    5959static bool importrunMode(pxConfig *config);
    6060static bool runstateMode(pxConfig *config);
     61static bool listrunMode(pxConfig *config);
     62static bool setskyfiletoupdateMode(pxConfig *config);
    6163
    6264static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
     
    104106        MODECASE(WARPTOOL_MODE_TOCLEANEDSKYFILE,   tocleanedskyfileMode);
    105107        MODECASE(WARPTOOL_MODE_TOPURGEDSKYFILE,    topurgedskyfileMode);
    106         MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE,  toscrubbedskyfileMode);
     108        MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE,  toscrubbedskyfileMode);
    107109        MODECASE(WARPTOOL_MODE_TOFULLSKYFILE,      tofullskyfileMode);
    108110        MODECASE(WARPTOOL_MODE_UPDATESKYFILE,      updateskyfileMode);
     
    110112        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
    111113        MODECASE(WARPTOOL_MODE_RUNSTATE,           runstateMode);
     114        MODECASE(WARPTOOL_MODE_LISTRUN,            listrunMode);
     115        MODECASE(WARPTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateMode);
    112116
    113117        default:
     
    247251    PXOPT_COPY_F32(config->args,   where, "-sun_angle_max",      "rawExp.sun_angle",      "<");
    248252    PXOPT_COPY_STR(config->args,   where, "-reduction",          "fakeRun.reduction",     "==");
    249     pxAddLabelSearchArgs (config,  where, "-label",             "fakeRun.label",         "==");
     253    pxAddLabelSearchArgs (config,  where, "-label",              "fakeRun.label",         "=="); // define using fake label
    250254
    251255    if (!psListLength(where->list) &&
    252256        !psMetadataLookupBool(NULL, config->args, "-all")) {
    253257        psFree(where);
    254         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     258        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    255259        return false;
    256260    }
     
    279283    psString query = pxDataGet("warptool_definebyquery.sql");
    280284    if (!query) {
    281         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     285        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    282286        psFree(where);
    283287        return false;
     
    383387    PXOPT_COPY_S64(config->args, where, "-warp_id",   "warpRun.warp_id",   "==");
    384388    PXOPT_COPY_STR(config->args, where, "-reduction", "warpRun.reduction", "==");
    385     PXOPT_COPY_STR(config->args, where, "-label",     "warpRun.label",     "==");
    386389    PXOPT_COPY_STR(config->args, where, "-state",     "warpRun.state",     "==");
    387     PXOPT_COPY_STR(config->args, where, "-data_group","warpRun.data_group",     "==");
    388     PXOPT_COPY_STR(config->args, where, "-dist_group","warpRun.dist_group",     "==");
     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    }
    389401
    390402    if (!psListLength(where->list)) {
    391403        psFree(where);
    392         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
    393         return false;
    394     }
    395    
    396     psString query = psStringCopy("UPDATE warpRun JOIN fakeRun USING(fake_id) JOIN camRun USING(cam_id) JOIN chipRun USING(chip_id) JOIN rawExp USING(exp_id)");
     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)");
    397409
    398410    // pxUpdateRun gets parameters from config->args and updates
    399     bool result = pxUpdateRun(config, where, &query, "warpRun", true);
     411    bool result = pxUpdateRun(config, where, &query, "warpRun", "warp_id", "warpSkyfile", true);
    400412
    401413    psFree(query);
     
    419431    psString query = pxDataGet("warptool_exp.sql");
    420432    if (!query) {
    421         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     433        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    422434        return false;
    423435    }
     
    493505    psString query = pxDataGet("warptool_imfile.sql");
    494506    if (!query) {
    495         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     507        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    496508        return false;
    497509    }
     
    567579    psString query = pxDataGet("warptool_tooverlap.sql");
    568580    if (!query) {
    569         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     581        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    570582        return false;
    571583    }
     
    676688    PXOPT_COPY_STR(config->args, where, "-skycell_id", "warpSkyCellMap.skycell_id", "==");
    677689    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpSkyCellMap.tess_id", "==");
    678     // PXOPT_COPY_STR(config->args, where, "-label",      "warpRun.label", "==");
    679690    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "==");
    680691    PXOPT_COPY_S16(config->args, where, "-fault",      "warpSkyCellMap.fault", "==");
     
    683694        && !psMetadataLookupBool(NULL, config->args, "-all")) {
    684695        psFree(where);
    685         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
     696        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    686697        return false;
    687698    }
     
    691702        psString query = pxDataGet("warptool_revertoverlap.sql");
    692703        if (!query) {
    693             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     704            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    694705            if (!psDBRollback(config->dbh)) {
    695706                psError(PS_ERR_UNKNOWN, false, "database error");
     
    823834    psString query = pxDataGet("warptool_scmap.sql");
    824835    if (!query) {
    825         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     836        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    826837        return false;
    827838    }
     
    896907    psString query = pxDataGet("warptool_towarped.sql");
    897908    if (!query) {
    898         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    899         return false;
    900     }
    901 
     909        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     910        return false;
     911    }
     912
     913    psString whereStr = psStringCopy("");
    902914    if (psListLength(where->list)) {
    903915        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    904         psStringAppend(&query, " AND %s", whereClause);
     916        psStringAppend(&whereStr, "\n AND %s", whereClause);
    905917        psFree(whereClause);
    906918    }
     
    908920
    909921    // treat limit == 0 as "no limit"
     922    psString limitString = psStringCopy("\n");
    910923    if (limit) {
    911         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));
    912928        psStringAppend(&query, " %s", limitString);
    913         psFree(limitString);
    914     }
    915 
    916     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)) {
    917934        psError(PS_ERR_UNKNOWN, false, "database error");
    918935        psFree(query);
    919936        return false;
    920937    }
     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);
    921947    psFree(query);
    922948
     
    9771003    PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false);
    9781004    PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false);
    979     PXOPT_LOOKUP_S64(magicked, config->args, "-magicked", false, false);
     1005    PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false);
    9801006
    9811007    // default values
     
    10401066    psString query = pxDataGet("warptool_finished_run_select.sql");
    10411067    if (!query) {
    1042         psError(PXTOOLS_ERR_DATA, false, "failed to retrieve SQL statement");
     1068        psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
    10431069        return false;
    10441070    }
     
    11161142    psString query = pxDataGet("warptool_finished_run_select.sql");
    11171143    if (!query) {
    1118         psError(PXTOOLS_ERR_DATA, false, "failed to retrieve SQL statement");
     1144        psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement");
    11191145        return false;
    11201146    }
     
    11941220    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs",  ">=");
    11951221    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawExp.dateobs",  "<=");
    1196     PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "==");
     1222    PXOPT_COPY_STR(config->args, where, "-filter",    "rawExp.filter", "LIKE");
    11971223    PXOPT_COPY_S64(config->args, where, "-magicked", "warpSkyfile.magicked", "==");
    11981224    pxAddLabelSearchArgs (config, where, "-label",   "warpRun.label", "LIKE");
     1225    pxAddLabelSearchArgs (config, where, "-data_group",   "warpRun.data_group", "LIKE");
    11991226
    12001227    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     
    12061233    psString query = pxDataGet("warptool_warped.sql");
    12071234    if (!query) {
    1208         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1235        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    12091236        return false;
    12101237    }
     
    12141241    psString where2 = NULL;
    12151242    if (!pxmagicAddWhere(config, &where2, "warpSkyfile")) {
    1216         psError(PXTOOLS_ERR_DATA, false, "pxMagicAddWhere failed");
     1243        psError(psErrorCodeLast(), false, "pxMagicAddWhere failed");
    12171244        return false;
    12181245    }
    12191246    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
    1220         psError(PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");
     1247        psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
    12211248        return false;
    12221249    }
     
    12241251    if (psListLength(where->list)) {
    12251252        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1226         psStringAppend(&query, " AND %s", whereClause);
     1253        psStringAppend(&query, " WHERE %s", whereClause);
    12271254        psFree(whereClause);
    12281255    } else if (!all && !where2) {
    1229         psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
    1230         return false;
     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        }
    12311266    }
    12321267    psFree(where);
    1233 
    1234     if (where2) {
    1235         psStringAppend(&query, " %s", where2);
    1236     }
    12371268
    12381269    // treat limit == 0 as "no limit"
     
    12941325    PXOPT_COPY_STR(config->args, where, "-tess_id",    "warpSkyfile.tess_id", "==");
    12951326    PXOPT_COPY_STR(config->args, where, "-reduction",  "rawExp.reduction", "==");
    1296     // PXOPT_COPY_STR(config->args, where, "-label",      "warpRun.label", "==");
    12971327    pxAddLabelSearchArgs (config, where, "-label",     "warpRun.label", "==");
    1298     PXOPT_COPY_S16(config->args, where, "-fault",       "warpSkyfile.fault", "==");
     1328    PXOPT_COPY_S16(config->args, where, "-fault",      "warpSkyfile.fault", "==");
    12991329
    13001330    if (!psListLength(where->list)
    13011331        && !psMetadataLookupBool(NULL, config->args, "-all")) {
    13021332        psFree(where);
    1303         psError(PXTOOLS_ERR_DATA, false, "search parameters are required");
    1304         return false;
    1305     }
    1306 
    1307     if (!psDBTransaction(config->dbh)) {
    1308         psError(PS_ERR_UNKNOWN, false, "database error");
    1309         psFree(where);
    1310         return false;
    1311     }
    1312 
    1313     // Delete product
    1314     int numDeleted;                     // Number deleted
    1315     {
    1316         psString query = pxDataGet("warptool_revertwarped_delete.sql");
    1317         if (!query) {
    1318             psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
    1319             if (!psDBRollback(config->dbh)) {
    1320                 psError(PS_ERR_UNKNOWN, false, "database error");
    1321             }
    1322             return false;
    1323         }
    1324 
    1325         if (psListLength(where->list)) {
    1326             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1327             psStringAppend(&query, " AND %s", whereClause);
    1328             psFree(whereClause);
    1329         }
    1330 
    1331         if (!p_psDBRunQuery(config->dbh, query)) {
    1332             psError(PS_ERR_UNKNOWN, false, "database error");
    1333             psFree(query);
    1334             if (!psDBRollback(config->dbh)) {
    1335                 psError(PS_ERR_UNKNOWN, false, "database error");
    1336             }
    1337             return false;
    1338         }
     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");
    13391358        psFree(query);
    1340 
    1341         numDeleted = psDBAffectedRows(config->dbh);
    1342     }
     1359        return false;
     1360    }
     1361    psFree(query);
     1362
     1363    int numDeleted = psDBAffectedRows(config->dbh);
    13431364
    13441365    psLogMsg("warptool", PS_LOG_INFO, "Deleted %d warpSkyfiles", numDeleted);
    13451366
    1346     psFree(where);
    1347 
    1348     if (!psDBCommit(config->dbh)) {
    1349         psError(PS_ERR_UNKNOWN, false, "database error");
    1350         return false;
    1351     }
     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);
    13521379
    13531380    return true;
     
    14361463    psString query = pxDataGet("warptool_pendingcleanuprun.sql");
    14371464    if (!query) {
    1438         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1465        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    14391466        return false;
    14401467    }
     
    14991526    psString query = pxDataGet("warptool_pendingcleanupskyfile.sql");
    15001527    if (!query) {
    1501         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1528        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    15021529        return false;
    15031530    }
     
    15601587    psString query = pxDataGet("warptool_donecleanup.sql");
    15611588    if (!query) {
    1562         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1589        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    15631590        return false;
    15641591    }
     
    16481675    }
    16491676
    1650     // note only updates if warpRun.state = run_state
    1651     // XXX note that we have removed this constraint for now
    1652     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)) {
    16531693        psError(PS_ERR_UNKNOWN, false, "database error");
    16541694        // rollback
     
    16601700    }
    16611701    psFree(query);
     1702    psFree(set_magicked_skyfile);
    16621703
    16631704    query = pxDataGet("warptool_change_run_state.sql");
    1664     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)) {
    16651706        // rollback
    16661707        if (!psDBRollback(config->dbh)) {
     
    16701711        return false;
    16711712    }
     1713    psFree(set_magicked_run);
    16721714
    16731715    if (!psDBCommit(config->dbh)) {
     
    17071749    if (!state) {
    17081750      psString query = pxDataGet("warptool_updateskyfile.sql");
    1709      
     1751
    17101752      if (!p_psDBRunQueryF(config->dbh, query, fault, warp_id, skycell_id)) {
    17111753        psError(PS_ERR_UNKNOWN, false, "database error");
     
    17161758    else {
    17171759      if (strcmp(state,"error_cleaned") == 0) {
    1718         change_skyfile_data_state(config,"error_cleaned","goto_cleaned");
     1760        change_skyfile_data_state(config,"error_cleaned","goto_cleaned");
    17191761      }
    17201762      else if (strcmp(state, "error_scrubbed") == 0) {
    1721         change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed");
     1763        change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed");
    17221764      }
    17231765      else if (strcmp(state, "error_purged") == 0) {
    1724         change_skyfile_data_state(config,"error_purged","goto_purged");
     1766        change_skyfile_data_state(config,"error_purged","goto_purged");
    17251767      }
    17261768      else {
    1727         psError(PS_ERR_UNKNOWN, false, "unhandled state given");
    1728         return(false);
     1769        psError(PS_ERR_UNKNOWN, false, "unhandled state given");
     1770        return(false);
    17291771      }
    17301772    }
     
    17721814      psString query = pxDataGet(tables[i].sqlFilename);
    17731815      if (!query) {
    1774           psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1816          psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    17751817          return false;
    17761818      }
     
    19391981    psString query = pxDataGet("warptool_runstate.sql");
    19401982    if (!query) {
    1941         psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1983        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    19421984        return false;
    19431985    }
     
    19481990        psFree(whereClause);
    19491991    } else {
    1950         psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required");
     1992        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
    19511993        return false;
    19521994    }
     
    20002042    return true;
    20012043}
     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.