IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 27794


Ignore:
Timestamp:
Apr 28, 2010, 2:16:57 PM (16 years ago)
Author:
bills
Message:

implement -setskyfiletoupdate and make difftool -revertdiffskyfile handle update faults

Location:
trunk/ippTools
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/difftool.c

    r27743 r27794  
    5858static bool tofullskyfileMode(pxConfig *config);
    5959static bool listrunMode(pxConfig *config);
     60static bool setskyfiletoupdateMode(pxConfig *config);
    6061
    6162
     
    103104        MODECASE(DIFFTOOL_MODE_TOFULLSKYFILE,         tofullskyfileMode);
    104105        MODECASE(DIFFTOOL_MODE_LISTRUN,               listrunMode);
     106        MODECASE(DIFFTOOL_MODE_SETSKYFILETOUPDATE,    setskyfiletoupdateMode);
    105107
    106108        default:
     
    822824    }
    823825
    824     if (!psDBTransaction(config->dbh)) {
    825         psError(PS_ERR_UNKNOWN, false, "database error");
    826         psFree(where);
    827         return false;
    828     }
    829 
    830     // Update state to 'new'
    831     {
    832         psString query = pxDataGet("difftool_revertdiffskyfile_update.sql");
    833         if (!query) {
    834             psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    835             if (!psDBRollback(config->dbh)) {
    836                 psError(PS_ERR_UNKNOWN, false, "database error");
    837             }
    838             return false;
    839         }
    840 
    841         if (psListLength(where->list)) {
    842             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    843             psStringAppend(&query, " AND %s", whereClause);
    844             psFree(whereClause);
    845         }
    846 
    847         if (!p_psDBRunQuery(config->dbh, query)) {
    848             psError(PS_ERR_UNKNOWN, false, "database error");
    849             psFree(query);
    850             if (!psDBRollback(config->dbh)) {
    851                 psError(PS_ERR_UNKNOWN, false, "database error");
    852             }
    853             return false;
    854         }
    855         psFree(query);
    856 
    857         psLogMsg("difftool", PS_LOG_INFO, "Updated %" PRIu64 " rows", psDBAffectedRows(config->dbh));
    858     }
    859 
    860     // Delete product
    861826    {
    862827        psString query = pxDataGet("difftool_revertdiffskyfile_delete.sql");
    863828        if (!query) {
    864829            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    865             if (!psDBRollback(config->dbh)) {
    866                 psError(PS_ERR_UNKNOWN, false, "database error");
    867             }
     830            return false;
     831        }
     832        psString query_updated = pxDataGet("difftool_revertdiffskyfile_updated.sql");
     833        if (!query_updated) {
     834            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    868835            return false;
    869836        }
     
    872839            psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    873840            psStringAppend(&query, " AND %s", whereClause);
     841            psStringAppend(&query_updated, " AND %s", whereClause);
    874842            psFree(whereClause);
    875843        }
     
    878846            psError(PS_ERR_UNKNOWN, false, "database error");
    879847            psFree(query);
    880             if (!psDBRollback(config->dbh)) {
    881                 psError(PS_ERR_UNKNOWN, false, "database error");
    882             }
    883848            return false;
    884849        }
    885850        psFree(query);
    886 
    887851        psLogMsg("difftool", PS_LOG_INFO, "Deleted %" PRIu64 " rows", psDBAffectedRows(config->dbh));
     852
     853        if (!p_psDBRunQuery(config->dbh, query_updated)) {
     854            psError(PS_ERR_UNKNOWN, false, "database error");
     855            psFree(query_updated);
     856            return false;
     857        }
     858        psFree(query_updated);
     859
     860        psLogMsg("difftool", PS_LOG_INFO, "Updated %" PRIu64 " rows", psDBAffectedRows(config->dbh));
    888861    }
    889862
    890863    psFree(where);
    891864
    892     if (!psDBCommit(config->dbh)) {
    893         psError(PS_ERR_UNKNOWN, false, "database error");
    894         return false;
    895     }
    896865
    897866    return true;
     
    23702339    psMetadata *where = psMetadataAlloc();
    23712340    PXOPT_COPY_S64(config->args, where, "-diff_id",   "diff_id",   "==");
     2341    PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id",   "==");
    23722342
    23732343    if (!pxSetFaultCode(config->dbh, "diffSkyfile", where, fault)) {
     
    27502720    return true;
    27512721}
     2722// a very specfic function to queue a cleaned warpSkyfile to be updated
     2723static bool setskyfiletoupdateMode(pxConfig *config)
     2724{
     2725    PS_ASSERT_PTR_NON_NULL(config, NULL);
     2726
     2727    PXOPT_LOOKUP_S64(diff_id, config->args, "-diff_id", true, false);
     2728    PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false);
     2729    PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false);
     2730
     2731    psString query = pxDataGet("difftool_setskyfiletoupdate.sql");
     2732    if (!query) {
     2733        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2734        return false;
     2735    }
     2736
     2737    psString setHook = psStringCopy("");
     2738    if (label) {
     2739        psStringAppend(&setHook, "\n , diffRun.label = '%s'", label);
     2740    }
     2741
     2742    if (skycell_id) {
     2743        psStringAppend(&query, " AND (diffSkyfile.skycell_id = '%s')", skycell_id);
     2744    }
     2745
     2746    if (!p_psDBRunQueryF(config->dbh, query, setHook, diff_id)) {
     2747        psError(PS_ERR_UNKNOWN, false, "database error");
     2748        return false;
     2749    }
     2750
     2751    psFree(setHook);
     2752    psFree(query);
     2753
     2754    return true;
     2755}
  • trunk/ippTools/src/difftool.h

    r27743 r27794  
    4848    DIFFTOOL_MODE_TOSCRUBBEDSKYFILE,
    4949    DIFFTOOL_MODE_TOFULLSKYFILE,
    50     DIFFTOOL_MODE_LISTRUN
     50    DIFFTOOL_MODE_LISTRUN,
     51    DIFFTOOL_MODE_SETSKYFILETOUPDATE,
    5152} difftoolMode;
    5253
  • trunk/ippTools/src/difftoolConfig.c

    r27743 r27794  
    326326    psMetadata *updatediffskyfileArgs = psMetadataAlloc();
    327327    psMetadataAddS64(updatediffskyfileArgs, PS_LIST_TAIL, "-diff_id", 0,      "define diff ID (required)", 0);
    328     psMetadataAddS16(updatediffskyfileArgs, PS_LIST_TAIL, "-fault", 0,         "set fault code (required)", 0);
     328    psMetadataAddS16(updatediffskyfileArgs, PS_LIST_TAIL, "-fault", 0,        "set fault code (required)", 0);
     329    psMetadataAddStr(updatediffskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0,   "search by skycell ID", NULL);
    329330
    330331    // -tocleanedskyfile
     
    348349    psMetadataAddStr(tofullskyfileArgs, PS_LIST_TAIL, "-skycell_id", 0, "skycell ID to update", NULL);
    349350    psMetadataAddS64(tofullskyfileArgs, PS_LIST_TAIL, "-magicked",  0, "define magicked state", 0);
     351
     352    // -setskyfiletoupdate
     353    psMetadata *setskyfiletoupdateArgs = psMetadataAlloc();
     354    psMetadataAddS64(setskyfiletoupdateArgs, PS_LIST_TAIL, "-diff_id", 0,           "search by difftool ID (required)", 0);
     355    psMetadataAddStr(setskyfiletoupdateArgs, PS_LIST_TAIL, "-skycell_id",  0,       "search by tessellation ID", NULL);
     356    psMetadataAddStr(setskyfiletoupdateArgs, PS_LIST_TAIL, "-set_label",  0,        "new value for diffRun.label", NULL);
     357
     358
    350359
    351360    // -exportrun
     
    385394    PXOPT_ADD_MODE("-donecleanup",           "show runs that have been cleaned",     DIFFTOOL_MODE_DONECLEANUP,          donecleanupArgs);
    386395    PXOPT_ADD_MODE("-updatediffskyfile",     "update fault code for a diffskyfile",  DIFFTOOL_MODE_UPDATEDIFFSKYFILE,          updatediffskyfileArgs);
     396    PXOPT_ADD_MODE("-setskyfiletoupdate", "set cleaned skyfile to be updated", DIFFTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateArgs);
     397
    387398    PXOPT_ADD_MODE("-exportrun",            "export run for import on other database", DIFFTOOL_MODE_EXPORTRUN, exportrunArgs);
    388399    PXOPT_ADD_MODE("-importrun",            "import run from metadata file",           DIFFTOOL_MODE_IMPORTRUN, importrunArgs);
Note: See TracChangeset for help on using the changeset viewer.