IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

merge changes from trunk

Location:
branches/eam_branches/20090820
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20090820

  • branches/eam_branches/20090820/ippTools/src

    • Property svn:ignore
      •  

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

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