IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
May 18, 2010, 12:49:05 PM (16 years ago)
Author:
eugene
Message:

merging changes from trunk into branches/pap

Location:
branches/pap
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/pap

  • branches/pap/ippTools/src/difftool.c

    r27445 r28003  
    5757static bool toscrubbedskyfileMode(pxConfig *config);
    5858static bool tofullskyfileMode(pxConfig *config);
     59static bool listrunMode(pxConfig *config);
     60static bool setskyfiletoupdateMode(pxConfig *config);
    5961
    6062
     
    101103        MODECASE(DIFFTOOL_MODE_TOSCRUBBEDSKYFILE,     toscrubbedskyfileMode);
    102104        MODECASE(DIFFTOOL_MODE_TOFULLSKYFILE,         tofullskyfileMode);
     105        MODECASE(DIFFTOOL_MODE_LISTRUN,               listrunMode);
     106        MODECASE(DIFFTOOL_MODE_SETSKYFILETOUPDATE,    setskyfiletoupdateMode);
    103107
    104108        default:
     
    194198    PXOPT_COPY_S64(config->args, where, "-diff_id",  "diff_id",   "==");
    195199    PXOPT_COPY_STR(config->args, where, "-label",     "label",     "==");
     200    PXOPT_COPY_STR(config->args, where, "-data_group","data_group",     "==");
    196201    PXOPT_COPY_STR(config->args, where, "-state",     "state",     "==");
    197202    if (!psListLength(where->list)) {
     
    702707    pxAddLabelSearchArgs (config, where, "-data_group", "diffRun.data_group", "LIKE");
    703708
     709    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
    704710    PXOPT_LOOKUP_BOOL(template, config->args, "-template", false);
    705711    if (!template) {
     
    745751    psFree(where);
    746752
     753    if (pstamp_order) {
     754        if (template) {
     755            psStringAppend(&query, " ORDER BY rawTemplate.exp_id, diff_id DESC");
     756        } else {
     757            psStringAppend(&query, " ORDER BY rawInput.exp_id, diff_id DESC");
     758        }
     759    }
     760           
    747761    // treat limit == 0 as "no limit"
    748762    if (limit) {
     
    810824    }
    811825
    812     if (!psDBTransaction(config->dbh)) {
    813         psError(PS_ERR_UNKNOWN, false, "database error");
    814         psFree(where);
    815         return false;
    816     }
    817 
    818     // Update state to 'new'
    819     {
    820         psString query = pxDataGet("difftool_revertdiffskyfile_update.sql");
    821         if (!query) {
    822             psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    823             if (!psDBRollback(config->dbh)) {
    824                 psError(PS_ERR_UNKNOWN, false, "database error");
    825             }
    826             return false;
    827         }
    828 
    829         if (psListLength(where->list)) {
    830             psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    831             psStringAppend(&query, " AND %s", whereClause);
    832             psFree(whereClause);
    833         }
    834 
    835         if (!p_psDBRunQuery(config->dbh, query)) {
    836             psError(PS_ERR_UNKNOWN, false, "database error");
    837             psFree(query);
    838             if (!psDBRollback(config->dbh)) {
    839                 psError(PS_ERR_UNKNOWN, false, "database error");
    840             }
    841             return false;
    842         }
    843         psFree(query);
    844 
    845         psLogMsg("difftool", PS_LOG_INFO, "Updated %" PRIu64 " rows", psDBAffectedRows(config->dbh));
    846     }
    847 
    848     // Delete product
    849826    {
    850827        psString query = pxDataGet("difftool_revertdiffskyfile_delete.sql");
    851828        if (!query) {
    852829            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    853             if (!psDBRollback(config->dbh)) {
    854                 psError(PS_ERR_UNKNOWN, false, "database error");
    855             }
     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");
    856835            return false;
    857836        }
     
    860839            psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    861840            psStringAppend(&query, " AND %s", whereClause);
     841            psStringAppend(&query_updated, " AND %s", whereClause);
    862842            psFree(whereClause);
    863843        }
     
    866846            psError(PS_ERR_UNKNOWN, false, "database error");
    867847            psFree(query);
    868             if (!psDBRollback(config->dbh)) {
    869                 psError(PS_ERR_UNKNOWN, false, "database error");
    870             }
    871848            return false;
    872849        }
    873850        psFree(query);
    874 
    875851        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));
    876861    }
    877862
    878863    psFree(where);
    879864
    880     if (!psDBCommit(config->dbh)) {
    881         psError(PS_ERR_UNKNOWN, false, "database error");
    882         return false;
    883     }
    884865
    885866    return true;
     
    971952        return false;
    972953    }
    973     psS16 diff_mode = 0;
     954    psS16 diff_mode = IPP_DIFF_MODE_UNDEFINED;
    974955    if ((input_warp_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) {
    975       diff_mode = 1;
     956      diff_mode = IPP_DIFF_MODE_WARP_WARP;
    976957    }
    977958    else if ((input_warp_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) {
    978       diff_mode = 2;
     959      diff_mode = IPP_DIFF_MODE_WARP_STACK;
    979960    }
    980961    else if ((input_stack_id != PS_MAX_S64) && (template_warp_id != PS_MAX_S64)) {
    981       diff_mode = 3;
     962      diff_mode = IPP_DIFF_MODE_STACK_WARP;
    982963    }
    983964    else if ((input_stack_id != PS_MAX_S64) && (template_stack_id != PS_MAX_S64)) {
    984       diff_mode = 4;
     965      diff_mode = IPP_DIFF_MODE_STACK_STACK;
    985966    }
    986967
     
    13661347        }
    13671348
    1368 
    13691349        psString filter = psMetadataLookupStr(&mdok, row, "filter");
    13701350        if (!mdok) {
     
    13781358            return false;
    13791359        }
     1360
     1361        psString warp_data_group = psMetadataLookupStr(&mdok, row, "data_group");
     1362        if (!mdok) {
     1363          psError(PXTOOLS_ERR_PROG, false, "warp data_group not found");
     1364          psFree(warp2Query);
     1365          psFree(stackQuery);
     1366          psFree(skycell_query);
     1367          if (!psDBRollback(config->dbh)) {
     1368            psError(PS_ERR_UNKNOWN, false, "database error");
     1369          }
     1370          return false;
     1371        }
     1372        if (warp_data_group) {
     1373          data_group = warp_data_group;
     1374        }
     1375       
    13801376        if (!p_psDBRunQueryF(config->dbh, skycell_query, stackQuery, warp_id, filter, warp2Query)) {
    13811377            psError(PS_ERR_UNKNOWN, false, "database error");
     
    14161412                true,                   // exposure
    14171413                0,       // magicked
    1418                 2,       // diff_mode for warp-stack difference
     1414                IPP_DIFF_MODE_WARP_STACK,
    14191415                note
    14201416        );
     
    17391735        const char *template = psMetadataLookupStr(NULL, row, "template_warp_id");
    17401736        const char *tess_id = psMetadataLookupStr(NULL, row, "tess_id");
     1737        psString input_data_group = psMetadataLookupStr(NULL, row, "input_data_group");
     1738        if (input_data_group) {
     1739          data_group = input_data_group;
     1740        }
     1741
    17411742        if (!input_id || !template || !tess_id) {
    17421743            psError(PXTOOLS_ERR_PROG, false, "Identifiers not found");
     
    17491750            return false;
    17501751        }
    1751 
     1752       
    17521753        diffRunRow *run = diffRunRowAlloc(0,
    17531754                                          "reg",
     
    17631764                                          true,  // exposure
    17641765                                          false, // magicked
    1765                                           1,     // diff_mode for warp-warp diff
     1766                                          IPP_DIFF_MODE_WARP_WARP,
    17661767                                          note); // Run to insert
    17671768        if (!diffRunInsertObject(config->dbh, run)) {
     
    20452046                                      false,                 // exposure
    20462047                                      0,       // magicked
    2047                                       4,      // diff_mode
     2048                                      IPP_DIFF_MODE_STACK_STACK, // diff_mode
    20482049                                      note
    20492050                                      );
     
    23382339    psMetadata *where = psMetadataAlloc();
    23392340    PXOPT_COPY_S64(config->args, where, "-diff_id",   "diff_id",   "==");
     2341    PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell_id",   "==");
    23402342
    23412343    if (!pxSetFaultCode(config->dbh, "diffSkyfile", where, fault)) {
     
    26062608  return true;
    26072609}
     2610
     2611static bool listrunMode(pxConfig *config)
     2612{
     2613    PS_ASSERT_PTR_NON_NULL(config, false);
     2614
     2615    psMetadata *where = psMetadataAlloc();
     2616    PXOPT_COPY_S64(config->args, where,  "-diff_id", "diffRun.diff_id", "==");
     2617    PXOPT_COPY_STR(config->args, where, "-tess_id", "diffRun.tess_id", "==");
     2618    PXOPT_COPY_S64(config->args, where,  "-magicked", "diffRun.magicked", "==");
     2619    pxAddLabelSearchArgs (config, where, "-label", "diffRun.label", "LIKE");
     2620    pxAddLabelSearchArgs (config, where, "-data_group", "diffRun.data_group", "LIKE");
     2621    pxAddLabelSearchArgs (config, where, "-dist_group", "diffRun.dist_group", "LIKE");
     2622
     2623    PXOPT_LOOKUP_BOOL(template, config->args, "-template", false);
     2624    if (!template) {
     2625        PXOPT_COPY_S64(config->args, where, "-exp_id", "rawInput.exp_id", "==");
     2626        PXOPT_COPY_STR(config->args, where, "-exp_name", "rawInput.exp_name", "==");
     2627        PXOPT_COPY_STR(config->args, where, "-warp_id", "warpInput.warp_id", "==");
     2628        PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawInput.dateobs",  ">=");
     2629        PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawInput.dateobs",  "<=");
     2630        PXOPT_COPY_STR(config->args, where, "-filter",     "rawInput.filter", "LIKE");
     2631    } else {
     2632        PXOPT_COPY_S64(config->args, where, "-exp_id", "rawTemplate.exp_id", "==");
     2633        PXOPT_COPY_STR(config->args, where, "-exp_name", "rawTemplate.exp_name", "==");
     2634        PXOPT_COPY_STR(config->args, where, "-warp_id", "warpTemplate.warp_id", "==");
     2635        PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawTemplate.dateobs",  ">=");
     2636        PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "rawTemplate.dateobs",  "<=");
     2637        PXOPT_COPY_STR(config->args, where, "-filter",     "rawTemplate.filter", "LIKE");
     2638    }
     2639
     2640    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     2641    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     2642    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     2643    PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false);
     2644
     2645
     2646    psString where2 = NULL;
     2647    pxmagicAddWhere(config, &where2, "diffRun");
     2648    pxspaceAddWhere(config, &where2, template ? "rawTemplate" : "rawInput");
     2649    psString query = pxDataGet("difftool_listrun.sql");
     2650    if (!query) {
     2651        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     2652        return false;
     2653    }
     2654
     2655    if (psListLength(where->list)) {
     2656        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     2657        psStringAppend(&query, " WHERE %s", whereClause);
     2658        psFree(whereClause);
     2659    } else if (where2) {
     2660        psStringAppend(&query, " WHERE diffRun.diff_id is not null %s", where2);
     2661    } else if (!all) {
     2662        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     2663        return false;
     2664    }
     2665    psFree(where);
     2666
     2667    if (pstamp_order) {
     2668        if (template) {
     2669            psStringAppend(&query, " ORDER BY rawTemplate.exp_id, diff_id DESC");
     2670        } else {
     2671            psStringAppend(&query, " ORDER BY rawInput.exp_id, diff_id DESC");
     2672        }
     2673    }
     2674           
     2675    // treat limit == 0 as "no limit"
     2676    if (limit) {
     2677        psString limitString = psDBGenerateLimitSQL(limit);
     2678        psStringAppend(&query, " %s", limitString);
     2679        psFree(limitString);
     2680    }
     2681
     2682    if (!p_psDBRunQuery(config->dbh, query)) {
     2683        psError(PS_ERR_UNKNOWN, false, "database error");
     2684        psFree(query);
     2685        return false;
     2686    }
     2687    psFree(query);
     2688
     2689    psArray *output = p_psDBFetchResult(config->dbh);
     2690    if (!output) {
     2691        psErrorCode err = psErrorCodeLast();
     2692        switch (err) {
     2693            case PS_ERR_DB_CLIENT:
     2694                psError(PXTOOLS_ERR_SYS, false, "database error");
     2695            case PS_ERR_DB_SERVER:
     2696                psError(PXTOOLS_ERR_PROG, false, "database error");
     2697            default:
     2698                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     2699        }
     2700
     2701        return false;
     2702    }
     2703    if (!psArrayLength(output)) {
     2704        psTrace("difftool", PS_LOG_INFO, "no rows found");
     2705        psFree(output);
     2706        return true;
     2707    }
     2708
     2709    if (psArrayLength(output)) {
     2710        // negative simple so the default is true
     2711        if (!ippdbPrintMetadatas(stdout, output, "diffRun", !simple)) {
     2712            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     2713            psFree(output);
     2714            return false;
     2715        }
     2716    }
     2717
     2718    psFree(output);
     2719
     2720    return true;
     2721}
     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}
Note: See TracChangeset for help on using the changeset viewer.