IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Feb 28, 2013, 3:29:26 PM (13 years ago)
Author:
bills
Message:

Add tables relGroup and lapGroup
Add group_id to relExp
Rename releaseName release_name because I kept typing it wrong.

File:
1 edited

Legend:

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

    r35196 r35213  
    4141static bool listreleaseMode(pxConfig *config);
    4242static bool definerelexpMode(pxConfig *config);
     43static bool tocalibexpMode(pxConfig *config);
    4344static bool updaterelexpMode(pxConfig *config);
    4445static bool listrelexpMode(pxConfig *config);
     
    4647static bool updaterelstackMode(pxConfig *config);
    4748static bool listrelstackMode(pxConfig *config);
     49static bool definerelgroupMode(pxConfig *config);
     50static bool pendingrelgroupMode(pxConfig *config);
     51static bool updaterelgroupMode(pxConfig *config);
     52static bool listrelgroupMode(pxConfig *config);
    4853
    4954# define MODECASE(caseName, func) \
     
    6974        MODECASE(RELEASETOOL_MODE_DEFINERELEASE,    definereleaseMode);
    7075        MODECASE(RELEASETOOL_MODE_UPDATERELEASE,    updatereleaseMode);
     76        MODECASE(RELEASETOOL_MODE_TOCALIBEXP,       tocalibexpMode);
    7177        MODECASE(RELEASETOOL_MODE_LISTRELEASE,      listreleaseMode);
    7278
     
    7884        MODECASE(RELEASETOOL_MODE_UPDATERELSTACK,   updaterelstackMode);
    7985        MODECASE(RELEASETOOL_MODE_LISTRELSTACK,     listrelstackMode);
     86
     87        MODECASE(RELEASETOOL_MODE_DEFINERELGROUP,   definerelgroupMode);
     88        MODECASE(RELEASETOOL_MODE_UPDATERELGROUP,   updaterelgroupMode);
     89        MODECASE(RELEASETOOL_MODE_PENDINGRELGROUP,  pendingrelgroupMode);
     90        MODECASE(RELEASETOOL_MODE_LISTRELGROUP,     listrelgroupMode);
    8091        default:
    8192            psAbort("invalid option (this should not happen)");
     
    170181
    171182    PXOPT_LOOKUP_S32(surveyID,    config->args, "-set_surveyID", true, false);
    172     PXOPT_LOOKUP_STR(releaseName, config->args, "-set_releaseName", true, false);
     183    PXOPT_LOOKUP_STR(release_name, config->args, "-set_release_name", true, false);
    173184    PXOPT_LOOKUP_STR(release_state, config->args, "-set_release_state",  true, false);
    174185    PXOPT_LOOKUP_S32(dataRelease, config->args, "-set_dataRelease", false, false);
     
    178189        0,      // rel_id (auto_increment)
    179190        surveyID,
    180         releaseName,
     191        release_name,
    181192        release_state,
    182193        dataRelease,
     
    194205    PS_ASSERT_PTR_NON_NULL(config, false);
    195206
    196     PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false);
     207    PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
    197208    PXOPT_LOOKUP_S32(rel_id, config->args,      "-rel_id", false, false);
    198209
    199     if (!releaseName && !rel_id) {
    200         psError(PXTOOLS_ERR_CONFIG, true, "either -releaseName or -rel_id is required\n");
     210    if (!release_name && !rel_id) {
     211        psError(PXTOOLS_ERR_CONFIG, true, "either -release_name or -rel_id is required\n");
    201212        return false;
    202213    }
     
    211222
    212223    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
    213     PXOPT_COPY_STR(config->args, where, "-releaseName", "releaseName", "==");
     224    PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "==");
    214225
    215226    psString sep = "";
     
    253264
    254265    PXOPT_COPY_STR(config->args, where, "-surveyName",  "surveyName", "LIKE");
    255     PXOPT_COPY_STR(config->args, where, "-releaseName", "releaseName", "LIKE");
     266    PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "LIKE");
    256267    PXOPT_COPY_STR(config->args, where, "-release_state", "release_state", "==");
    257268    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
     
    334345    // insure that at least one of these is supplied to select the release
    335346    PXOPT_LOOKUP_S64(rel_id, config->args,      "-rel_id", false, false);
    336     PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false);
    337     if (!rel_id && !releaseName) {
    338         psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -releaseName is required");
    339         return false;
    340     }
    341 
    342     // limit query to the target release. (Note: this will select nothing of releaseName and rel_id don't match)
     347    PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
     348    if (!rel_id && !release_name) {
     349        psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required");
     350        return false;
     351    }
     352
     353    // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match)
    343354    // note: we add these after above to insure that search args are supplied
    344     PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "==");
     355    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "==");
    345356    PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "==");
    346357
     
    429440            chip_id,
    430441            cam_id,
     442            0,          // group_id
    431443            state,
    432444            flags,
     
    460472static bool updaterelexpMode(pxConfig *config)
    461473{
    462     psError(PS_ERR_UNKNOWN, true, "not yet implemented");
    463     return false;
     474    PS_ASSERT_PTR_NON_NULL(config, false);
     475
     476    PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
     477    PXOPT_LOOKUP_S32(rel_id, config->args,      "-rel_id", false, false);
     478    PXOPT_LOOKUP_S32(relexp_id, config->args,   "-relexp_id", false, false);
     479
     480    if (!relexp_id && !release_name && !rel_id) {
     481        psError(PXTOOLS_ERR_CONFIG, true, "at least one of -relexp_id, -release_name, and -rel_id is required\n");
     482        return false;
     483    }
     484
     485    PXOPT_LOOKUP_STR(state,    config->args, "-set_state",  false, false);
     486    PXOPT_LOOKUP_U32(flags,    config->args, "-set_flags",  false, false);
     487    PXOPT_LOOKUP_STR(path_base, config->args, "-set_path_base", false, false);
     488    PXOPT_LOOKUP_F32(zpt_obs,  config->args, "-set_zpt_obs",  false, false);
     489    PXOPT_LOOKUP_F32(zpt_stdev,config->args, "-set_zpt_stdev",  false, false);
     490    PXOPT_LOOKUP_S16(fault,    config->args, "-set_fault",  false, false);
     491    PXOPT_LOOKUP_BOOL(clearfault, config->args, "-clearfault",  false);
     492    if (!state && !flags && !path_base && !isfinite(zpt_obs) && !isfinite(zpt_stdev) && !fault && !clearfault) {
     493        psError(PXTOOLS_ERR_CONFIG, true, "must set at least one column\n");
     494        return false;
     495    }
     496
     497    if (fault && clearfault) {
     498        psError(PXTOOLS_ERR_CONFIG, true, "cannot set and clear fault at same time\n");
     499        return false;
     500    }
     501
     502    psMetadata *where = psMetadataAlloc();
     503
     504    PXOPT_COPY_S64(config->args, where, "-exp_id", "relExp.exp_id", "==");
     505    PXOPT_COPY_S32(config->args, where, "-relexp_id", "relExp.relexp_id", "==");
     506    PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
     507    // make sure that we have enough parameters to identify the relExp to change
     508    if (!psListLength(where->list)){
     509        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     510        psFree(where);
     511        return false;
     512    }
     513
     514    PXOPT_COPY_S32(config->args, where, "-rel_id",  "rel_id", "==");
     515    PXOPT_COPY_STR(config->args, where, "-release_name", "release_name", "==");
     516
     517    psString sep = "";
     518    psString comma = ", ";
     519    psString query = psStringCopy("UPDATE relExp JOIN ippRelease USING(rel_id) JOIN rawExp USING(exp_id) SET");
     520    if (state) {
     521        psStringAppend(&query, "%s relExp.state = '%s'", sep, state);
     522        sep = comma;
     523    }
     524    if (path_base) {
     525        psStringAppend(&query, "%s relExp.path_base = '%s'", sep, path_base);
     526        sep = comma;
     527    }
     528    if (flags) {
     529        psStringAppend(&query, "%s relExp.flags = %d", sep, flags);
     530        sep = comma;
     531    }
     532    if (isfinite(zpt_obs)) {
     533        psStringAppend(&query, "%s relExp.zpt_obs = %f", sep, zpt_obs);
     534        sep = comma;
     535    }
     536    if (isfinite(zpt_stdev)) {
     537        psStringAppend(&query, "%s relExp.zpt_stdev = %f", sep, zpt_stdev);
     538        sep = comma;
     539    }
     540    if (fault) {
     541        psStringAppend(&query, "%s relExp.fault = %d", sep, fault);
     542        sep = comma;
     543    }
     544    if (clearfault) {
     545        psStringAppend(&query, "%s relExp.fault = 0", sep);
     546        sep = comma;
     547    }
     548
     549    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     550    psStringAppend(&query, " WHERE %s", whereClause);
     551    psFree(whereClause);
     552
     553    if (!p_psDBRunQuery(config->dbh, query)) {
     554        psError(PS_ERR_UNKNOWN, false, "database error");
     555        psFree(query);
     556        return false;
     557    }
     558
     559    psU64 affected = psDBAffectedRows(config->dbh);
     560    psLogMsg("releasetool", PS_LOG_INFO, "Updated %" PRIu64 " ippReleases", affected);
     561
     562
     563    psFree(query);
     564
     565    return true;
    464566}
    465567
    466 static bool listrelexpMode(pxConfig *config)
     568static bool tocalibexpMode(pxConfig *config)
    467569{
    468570    PS_ASSERT_PTR_NON_NULL(config, NULL);
     
    470572    psMetadata *where = psMetadataAlloc();
    471573
    472     PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "LIKE");
     574    PXOPT_COPY_S64(config->args, where, "-relexp_id",   "relExp.relexp_id", "==");
     575    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
     576#ifdef notdef
     577    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
    473578    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
    474579    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     
    488593
    489594    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
     595
     596    PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false);
     597#endif
     598
     599    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     600    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     601
     602    psString query = pxDataGet("releasetool_tocalibexp.sql");
     603    if (!query) {
     604        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     605        return false;
     606    }
     607
     608    psString where2 = NULL;
     609#ifdef notdef
     610    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     611        psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
     612        return false;
     613    }
     614#endif
     615
     616    if (psListLength(where->list)) {
     617        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     618        psStringAppend(&query, "\nAND %s", whereClause);
     619        psFree(whereClause);
     620#ifdef notdef
     621    } else if (where2) {
     622        psStringAppend(&query, "\nAND ");
     623#endif
     624    } else {
     625        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     626        psFree(where);
     627        return false;
     628    }
     629
     630    if (where2) {
     631        psStringAppend(&query, "\n%s", where2);
     632        psFree(where2);
     633    }
     634
     635    if (limit) {
     636        psString limitString = psDBGenerateLimitSQL(limit);
     637        psStringAppend(&query, " %s", limitString);
     638        psFree(limitString);
     639    }
     640
     641    if (!p_psDBRunQuery(config->dbh, query)) {
     642        psError(PS_ERR_UNKNOWN, false, "database error");
     643        psFree(query);
     644        return false;
     645    }
     646    psFree(query);
     647
     648    psArray *output = p_psDBFetchResult(config->dbh);
     649    if (!output) {
     650        psError(PS_ERR_UNKNOWN, false, "database error");
     651        return false;
     652    }
     653
     654    if (!psArrayLength(output)) {
     655        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     656        psFree(output);
     657        return true;
     658    }
     659
     660    if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) {
     661        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     662        psFree(output);
     663        return false;
     664    }
     665
     666    psFree(output);
     667
     668    return true;
     669}
     670static bool listrelexpMode(pxConfig *config)
     671{
     672    PS_ASSERT_PTR_NON_NULL(config, NULL);
     673
     674    psMetadata *where = psMetadataAlloc();
     675
     676    PXOPT_COPY_S64(config->args, where, "-relexp_id",   "relExp.relexp_id", "==");
     677    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
     678    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
     679    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     680    PXOPT_COPY_STR(config->args, where, "-filter",      "rawExp.filter", "LIKE");
     681    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">=");
     682    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
     683    PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "camProcessedExp.fwhm_major", ">=");
     684    PXOPT_COPY_F32(config->args, where, "-fwhm_max",    "camProcessedExp.fwhm_major", "<=");
     685    PXOPT_COPY_STR(config->args, where, "-exp_name",    "rawExp.exp_name", "==");
     686    PXOPT_COPY_S64(config->args, where, "-exp_id",      "relExp.exp_id", "==");
     687    PXOPT_COPY_S64(config->args, where, "-chip_id",     "relExp.chip_id", "==");
     688    PXOPT_COPY_S64(config->args, where, "-cam_id",      "relExp.cam_id", "==");
     689    PXOPT_COPY_S64(config->args, where, "-warp_id",     "warpRun.warp_id", "==");
     690    PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE");
     691    PXOPT_COPY_STR(config->args, where, "-cam_data_group",  "camRun.data_group", "LIKE");
     692    PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE");
     693
     694    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
    490695    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
    491696
     
    594799    // insure that at least one of these is supplied to select the release
    595800    PXOPT_LOOKUP_S64(rel_id, config->args,      "-rel_id", false, false);
    596     PXOPT_LOOKUP_STR(releaseName, config->args, "-releaseName", false, false);
    597     if (!rel_id && !releaseName) {
    598         psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -releaseName is required");
    599         return false;
    600     }
    601 
    602     // limit query to the target release. (Note: this will select nothing of releaseName and rel_id don't match)
     801    PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
     802    if (!rel_id && !release_name) {
     803        psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required");
     804        return false;
     805    }
     806
     807    // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match)
    603808    // note: we add these after above to insure that search args are supplied
    604     PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "==");
     809    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "==");
    605810    PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "==");
    606811
     
    752957    psMetadata *where = psMetadataAlloc();
    753958
    754     PXOPT_COPY_STR(config->args, where, "-releaseName", "ippRelease.releaseName", "LIKE");
     959    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
    755960    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
    756961    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     
    8461051}
    8471052
     1053static bool definerelgroupMode(pxConfig *config)
     1054{
     1055    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1056
     1057    PXOPT_LOOKUP_STR(group_type, config->args, "-set_group_type", true, false);
     1058    PXOPT_LOOKUP_STR(group_name, config->args, "-set_group_name", true, false);
     1059    PXOPT_LOOKUP_STR(label, config->args,     "-set_label", true, false);
     1060
     1061    PXOPT_LOOKUP_STR(state, config->args,     "-set_state", false, false);
     1062    PXOPT_LOOKUP_STR(exp_list_path, config->args, "-set_exp_list_path", false, false);
     1063    PXOPT_LOOKUP_S16(fault, config->args,     "-set_fault", false, false);
     1064
     1065    psString query = NULL;
     1066
     1067    psMetadata *where = psMetadataAlloc();
     1068
     1069    // select sql and paramters based on group type
     1070    bool type_lap = false;
     1071    if (!strcmp(group_type, "lap")) {
     1072        type_lap = true;
     1073        PXOPT_COPY_S64(config->args, where, "-select_seq_id", "lapRun.seq_id", "==");
     1074        PXOPT_COPY_S64(config->args, where, "-select_lap_id", "lapRun.lap_id", "==");
     1075        query = pxDataGet("releasetool_definerelgroup_select_lap.sql");
     1076        if (!query) {
     1077            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1078            psFree(where);
     1079            return false;
     1080        }
     1081    } else {
     1082        if (!strcmp(group_type, "date")) {
     1083            // group_type ok
     1084        } else if (!strcmp(group_type, "data_group")) {
     1085            // group_type ok
     1086        } else {
     1087            psError(PXTOOLS_ERR_CONFIG, true, "%s is not valid group_type", group_type);
     1088            return false;
     1089        }
     1090        pxAddLabelSearchArgs (config, where, "-select_data_group", "camRun.data_group", "==");
     1091        query = pxDataGet("releasetool_definerelgroup_select_data_group.sql");
     1092        if (!query) {
     1093            psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1094            psFree(where);
     1095            return false;
     1096        }
     1097    }
     1098
     1099    // Insure that at least one of the exposure selectors is supplied
     1100    if (!psListLength(where->list)) {
     1101        psFree(where);
     1102        psError(PXTOOLS_ERR_CONFIG, false, "search arguments are required");
     1103        return false;
     1104    }
     1105
     1106    // insure that at least one of these is supplied to select the release
     1107    PXOPT_LOOKUP_S64(rel_id, config->args,      "-rel_id", false, false);
     1108    PXOPT_LOOKUP_STR(release_name, config->args, "-release_name", false, false);
     1109    if (!rel_id && !release_name) {
     1110        psError(PXTOOLS_ERR_CONFIG, true, "either -rel_id or -release_name is required");
     1111        return false;
     1112    }
     1113
     1114    // limit query to the target release. (Note: this will select nothing if release_name and rel_id don't match)
     1115    // note: we add these after above to insure that search args are supplied
     1116    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "==");
     1117    PXOPT_COPY_S32(config->args, where, "-rel_id", "ippRelease.rel_id", "==");
     1118
     1119    PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false);
     1120    PXOPT_LOOKUP_BOOL(simple, config->args,  "-simple", false);
     1121
     1122    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1123    psStringAppend(&query, " AND %s", whereClause);
     1124    psFree(whereClause);
     1125
     1126    psFree(where);
     1127
     1128    if (!type_lap) {
     1129        psStringAppend(&query, "\nHAVING COUNT(exp_id) > 0");
     1130    }
     1131
     1132    if (!p_psDBRunQuery(config->dbh, query)) {
     1133        psError(PS_ERR_UNKNOWN, false, "database error");
     1134        psFree(query);
     1135        return false;
     1136    }
     1137    psFree(query);
     1138
     1139    psArray *output = p_psDBFetchResult(config->dbh);
     1140    if (!output) {
     1141        psError(PS_ERR_UNKNOWN, false, "database error");
     1142        return false;
     1143    }
     1144    if (!psArrayLength(output)) {
     1145        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     1146        psFree(output);
     1147        return true;
     1148    }
     1149
     1150    if (pretend) {
     1151        // negative simple so the default is true
     1152        if (!ippdbPrintMetadatas(stdout, output, "relGroupToQueue", !simple)) {
     1153            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1154            psFree(output);
     1155            return false;
     1156        }
     1157        psFree(output);
     1158        return true;
     1159    }
     1160
     1161    if (!psDBTransaction(config->dbh)) {
     1162        psError(PS_ERR_UNKNOWN, false, "database error");
     1163        psFree(output);
     1164        return false;
     1165    }
     1166
     1167    psTime *now = psTimeGetNow(PS_TIME_TAI);
     1168    // loop over our list of  exposures
     1169    for (long i = 0; i < psArrayLength(output); i++) {
     1170        psMetadata *md = output->data[i];
     1171
     1172        bool status = true;
     1173        psS32 rel_id = psMetadataLookupS32(&status, md, "rel_id");
     1174        psS64 lap_id = 0;
     1175        if (type_lap) {
     1176            lap_id = psMetadataLookupS64(&status, md, "lap_id");
     1177        }
     1178
     1179        if (!relGroupInsert(config->dbh,
     1180            0,          // group_id (auto increment)
     1181            rel_id,
     1182            group_type,
     1183            lap_id,
     1184            group_name,
     1185            "reg",      // state
     1186            label,
     1187            exp_list_path,
     1188            fault,
     1189            now        // registered
     1190        )) {
     1191            if (!psDBRollback(config->dbh)) {
     1192                psError(PS_ERR_UNKNOWN, false, "database error");
     1193            }
     1194            psError(PS_ERR_UNKNOWN, false, "failed to trying to insert relGroup");
     1195            psFree(output);
     1196            psFree(now);
     1197            return false;
     1198        }
     1199        // Here's our new group_id
     1200        psS32 group_id = psDBLastInsertID(config->dbh);
     1201
     1202        psString query;
     1203        if (type_lap) {
     1204            query = pxDataGet("releasetool_definerelgroup_select_exp_lap.sql");
     1205            if (!query) {
     1206                psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1207                psFree(where);
     1208                return false;
     1209            }
     1210            psStringAppend(&query, " AND relExp.rel_id = %d AND lap_id = %" PRId64, rel_id, lap_id);
     1211        } else {
     1212            query = pxDataGet("releasetool_definerelgroup_select_exp_data_group.sql");
     1213            if (!query) {
     1214                psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1215                psFree(where);
     1216                return false;
     1217            }
     1218            psStringAppend(&query, " AND relExp.rel_id = %d", rel_id);
     1219
     1220            psMetadata *where = psMetadataAlloc();
     1221            pxAddLabelSearchArgs (config, where, "-select_data_group", "camRun.data_group", "==");
     1222            psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1223            psStringAppend(&query, " AND %s", whereClause);
     1224            psFree(whereClause);
     1225            psFree(where);
     1226        }
     1227
     1228        if (!p_psDBRunQuery(config->dbh, query)) {
     1229            psError(PS_ERR_UNKNOWN, false, "database error");
     1230            psFree(query);
     1231            psFree(output);
     1232            psFree(now);
     1233            if (!psDBRollback(config->dbh)) {
     1234                psError(PS_ERR_UNKNOWN, false, "database error");
     1235            }
     1236            return false;
     1237        }
     1238        psFree(query);
     1239
     1240        psArray *exposures = p_psDBFetchResult(config->dbh);
     1241        if (!exposures) {
     1242            psFree(now);
     1243            psFree(output);
     1244            psError(PS_ERR_UNKNOWN, false, "database error");
     1245            if (!psDBRollback(config->dbh)) {
     1246                psError(PS_ERR_UNKNOWN, false, "database error");
     1247            }
     1248            return false;
     1249        }
     1250        if (!psArrayLength(exposures)) {
     1251            psFree(now);
     1252            psFree(output);
     1253            psFree(exposures);
     1254            psError(PS_ERR_UNKNOWN, false, "no exposures found error");
     1255            if (!psDBRollback(config->dbh)) {
     1256                psError(PS_ERR_UNKNOWN, false, "database error");
     1257            }
     1258            return false;
     1259        }
     1260
     1261        // assign the relExps to this new group
     1262        char *updateQuery = "UPDATE relExp SET group_id = %d WHERE relexp_id = %" PRId64;
     1263        for (int j = 0; j < psArrayLength(exposures); j++) {
     1264            psMetadata *md = exposures->data[j];
     1265
     1266            bool status = true;
     1267            psS32 relexp_id = psMetadataLookupS32(&status, md, "relexp_id");
     1268            if (!p_psDBRunQueryF(config->dbh, updateQuery, group_id, relexp_id)) {
     1269                psError(PS_ERR_UNKNOWN, false, "database error");
     1270                psFree(now);
     1271                psFree(output);
     1272                psFree(exposures);
     1273
     1274                if (!psDBRollback(config->dbh)) {
     1275                    psError(PS_ERR_UNKNOWN, false, "database error");
     1276                }
     1277                return false;
     1278            }
     1279        }
     1280        psFree(exposures);
     1281
     1282        // set state of relGroup to 'new'
     1283        if (!p_psDBRunQueryF(config->dbh, "UPDATE relGroup set state = 'new' WHERE group_id = %d", group_id)) {
     1284            psError(PS_ERR_UNKNOWN, false, "database error");
     1285            psFree(now);
     1286            psFree(output);
     1287            if (!psDBRollback(config->dbh)) {
     1288                psError(PS_ERR_UNKNOWN, false, "database error");
     1289            }
     1290            return false;
     1291        }
     1292    }
     1293    psFree(output);
     1294    psFree(now);
     1295
     1296    if (!psDBCommit(config->dbh)) {
     1297        psError(PS_ERR_UNKNOWN, false, "database error");
     1298        return false;
     1299    }
     1300
     1301    return true;
     1302}
     1303
     1304static bool updaterelgroupMode(pxConfig *config)
     1305{
     1306    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
     1307    return false;
     1308}
     1309
     1310static bool pendingrelgroupMode(pxConfig *config)
     1311{
     1312    psError(PS_ERR_UNKNOWN, true, "not yet implemented");
     1313    return false;
     1314#ifdef notdef
     1315    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1316
     1317    psMetadata *where = psMetadataAlloc();
     1318
     1319    pxAddLabelSearchArgs (config, where, "-label", "relGroup.label", "==");
     1320
     1321    PXOPT_COPY_S64(config->args, where, "-relexp_id",   "relExp.relexp_id", "==");
     1322    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
     1323#ifdef notdef
     1324    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
     1325    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
     1326    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     1327    PXOPT_COPY_STR(config->args, where, "-filter",      "rawExp.filter", "LIKE");
     1328    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">=");
     1329    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
     1330    PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "camProcessedExp.fwhm_major", ">=");
     1331    PXOPT_COPY_F32(config->args, where, "-fwhm_max",    "camProcessedExp.fwhm_major", "<=");
     1332    PXOPT_COPY_STR(config->args, where, "-exp_name",    "rawExp.exp_name", "==");
     1333    PXOPT_COPY_S64(config->args, where, "-exp_id",      "relExp.exp_id", "==");
     1334    PXOPT_COPY_S64(config->args, where, "-chip_id",     "relExp.chip_id", "==");
     1335    PXOPT_COPY_S64(config->args, where, "-cam_id",      "relExp.cam_id", "==");
     1336    PXOPT_COPY_S64(config->args, where, "-warp_id",     "warpRun.warp_id", "==");
     1337    PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE");
     1338    PXOPT_COPY_STR(config->args, where, "-cam_data_group",  "camRun.data_group", "LIKE");
     1339    PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE");
     1340
     1341    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
     1342
     1343    PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false);
     1344#endif
     1345
     1346    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1347    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1348
     1349    psString query = pxDataGet("releasetool_tocalibexp.sql");
     1350    if (!query) {
     1351        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1352        return false;
     1353    }
     1354
     1355    psString where2 = NULL;
     1356#ifdef notdef
     1357    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     1358        psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
     1359        return false;
     1360    }
     1361#endif
     1362
     1363    if (psListLength(where->list)) {
     1364        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1365        psStringAppend(&query, "\nAND %s", whereClause);
     1366        psFree(whereClause);
     1367#ifdef notdef
     1368    } else if (where2) {
     1369        psStringAppend(&query, "\nAND ");
     1370#endif
     1371    } else {
     1372        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     1373        psFree(where);
     1374        return false;
     1375    }
     1376
     1377    if (where2) {
     1378        psStringAppend(&query, "\n%s", where2);
     1379        psFree(where2);
     1380    }
     1381
     1382    if (limit) {
     1383        psString limitString = psDBGenerateLimitSQL(limit);
     1384        psStringAppend(&query, " %s", limitString);
     1385        psFree(limitString);
     1386    }
     1387
     1388    if (!p_psDBRunQuery(config->dbh, query)) {
     1389        psError(PS_ERR_UNKNOWN, false, "database error");
     1390        psFree(query);
     1391        return false;
     1392    }
     1393    psFree(query);
     1394
     1395    psArray *output = p_psDBFetchResult(config->dbh);
     1396    if (!output) {
     1397        psError(PS_ERR_UNKNOWN, false, "database error");
     1398        return false;
     1399    }
     1400
     1401    if (!psArrayLength(output)) {
     1402        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     1403        psFree(output);
     1404        return true;
     1405    }
     1406
     1407    if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) {
     1408        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1409        psFree(output);
     1410        return false;
     1411    }
     1412
     1413    psFree(output);
     1414
     1415    return true;
     1416#endif // notdef
     1417}
     1418
     1419static bool listrelgroupMode(pxConfig *config)
     1420{
     1421    return false;
     1422#ifdef notdef
     1423    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1424
     1425    psMetadata *where = psMetadataAlloc();
     1426
     1427    PXOPT_COPY_STR(config->args, where, "-release_name", "ippRelease.release_name", "LIKE");
     1428    pxAddLabelSearchArgs(config, where, "-release_state","ippRelease.state", "==");
     1429    PXOPT_COPY_STR(config->args, where, "-state",       "relExp.state", "==");
     1430    PXOPT_COPY_STR(config->args, where, "-filter",      "rawExp.filter", "LIKE");
     1431    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin","rawExp.dateobs", ">=");
     1432    PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<=");
     1433    PXOPT_COPY_F32(config->args, where, "-fwhm_min",    "skycalResult.fwhm_major", ">=");
     1434    PXOPT_COPY_F32(config->args, where, "-fwhm_max",    "skycalresult.fwhm_major", "<=");
     1435    PXOPT_COPY_STR(config->args, where, "-exp_name",    "rawExp.exp_ame", "==");
     1436    PXOPT_COPY_S64(config->args, where, "-exp_id",      "relExp.exp_id", "==");
     1437    PXOPT_COPY_S64(config->args, where, "-chip_id",     "relExp.chip_id", "==");
     1438    PXOPT_COPY_S64(config->args, where, "-cam_id",      "relExp.cam_id", "==");
     1439    PXOPT_COPY_S64(config->args, where, "-warp_id",     "warpRun.warp_id", "==");
     1440    PXOPT_COPY_STR(config->args, where, "-chip_data_group", "chipRun.data_group", "LIKE");
     1441    PXOPT_COPY_STR(config->args, where, "-cam_data_group",  "camRun.data_group", "LIKE");
     1442    PXOPT_COPY_STR(config->args, where, "-warp_data_group", "warpRun.data_group", "LIKE");
     1443
     1444    PXOPT_COPY_STR(config->args, where, "-surveyName",  "survey.surveyName", "LIKE");
     1445    PXOPT_COPY_S32(config->args, where, "-rel_id",      "relExp.rel_id", "==");
     1446
     1447    PXOPT_LOOKUP_BOOL(priority_order, config->args, "-priority_order", false);
     1448
     1449    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1450    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1451
     1452    psString query = pxDataGet("releasetool_listrelexp.sql");
     1453    if (!query) {
     1454        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1455        return false;
     1456    }
     1457
     1458    psString where2 = NULL;
     1459    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     1460        psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
     1461        return false;
     1462    }
     1463
     1464    if (psListLength(where->list)) {
     1465        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1466        psStringAppend(&query, "\nWHERE %s", whereClause);
     1467        psFree(whereClause);
     1468    } else if (where2) {
     1469        psStringAppend(&query, "\nWHERE ");
     1470    } else {
     1471        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required\n");
     1472        psFree(where);
     1473        return false;
     1474    }
     1475
     1476    if (where2) {
     1477        psStringAppend(&query, "\n%s", where2);
     1478        psFree(where2);
     1479    }
     1480
     1481    if (priority_order) {
     1482        psStringAppend(&query, "\nAND priority > 0 order by exp_id, priority");
     1483    }
     1484
     1485    if (limit) {
     1486        psString limitString = psDBGenerateLimitSQL(limit);
     1487        psStringAppend(&query, " %s", limitString);
     1488        psFree(limitString);
     1489    }
     1490
     1491    if (!p_psDBRunQuery(config->dbh, query)) {
     1492        psError(PS_ERR_UNKNOWN, false, "database error");
     1493        psFree(query);
     1494        return false;
     1495    }
     1496    psFree(query);
     1497
     1498    psArray *output = p_psDBFetchResult(config->dbh);
     1499    if (!output) {
     1500        psError(PS_ERR_UNKNOWN, false, "database error");
     1501        return false;
     1502    }
     1503
     1504    if (!psArrayLength(output)) {
     1505        psTrace("releasetool", PS_LOG_INFO, "no rows found");
     1506        psFree(output);
     1507        return true;
     1508    }
     1509
     1510    if (!ippdbPrintMetadatas(stdout, output, "relExp", !simple)) {
     1511        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1512        psFree(output);
     1513        return false;
     1514    }
     1515
     1516    psFree(output);
     1517
     1518    return true;
     1519#endif //notdef
     1520}
     1521
Note: See TracChangeset for help on using the changeset viewer.