IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 29, 2010, 3:55:49 PM (16 years ago)
Author:
eugene
Message:

update merges from trunk

Location:
branches/eam_branches/20100225
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/eam_branches/20100225

  • branches/eam_branches/20100225/ippTools/src/regtool.c

    r26981 r27517  
    3737static bool revertprocessedimfileMode(pxConfig *config);
    3838static bool updateprocessedimfileMode(pxConfig *config);
     39static bool pendingcompressimfileMode(pxConfig *config);
    3940// exp
    4041static bool pendingexpMode(pxConfig *config);
     
    4445static bool updateprocessedexpMode(pxConfig *config);
    4546static bool cleardupexpMode(pxConfig *config);
     47static bool finishcompressexpMode(pxConfig *config);
     48
     49static bool updatebyqueryMode(pxConfig *config);
     50
    4651static bool exportrunMode(pxConfig *config);
    4752static bool importrunMode(pxConfig *config);
     
    7782        MODECASE(REGTOOL_MODE_REVERTPROCESSEDEXP,    revertprocessedexpMode);
    7883        MODECASE(REGTOOL_MODE_UPDATEPROCESSEDEXP,    updateprocessedexpMode);
     84        MODECASE(REGTOOL_MODE_UPDATEBYQUERY,         updatebyqueryMode);
     85        MODECASE(REGTOOL_MODE_PENDINGCOMPRESSIMFILE, pendingcompressimfileMode);
     86        MODECASE(REGTOOL_MODE_FINISHCOMPRESSEXP,     finishcompressexpMode);
    7987        MODECASE(REGTOOL_MODE_CLEARDUPEXP,           cleardupexpMode);
    8088        MODECASE(REGTOOL_MODE_EXPORTRUN,             exportrunMode);
     
    189197    PXOPT_LOOKUP_STR(obs_mode, config->args, "-obs_mode", false, false);
    190198    PXOPT_LOOKUP_STR(obs_group, config->args, "-obs_group", false, false);
     199    PXOPT_LOOKUP_STR(data_state, config->args, "-data_state", false, false);
    191200
    192201    PXOPT_LOOKUP_F32(airmass, config->args, "-airmass", false, false);
     
    255264        class_id,
    256265        uri,
     266        data_state,
    257267        exp_type,
    258268        filelevel,
     
    333343    PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "dateobs",  ">=");
    334344    PXOPT_COPY_TIME(config->args, where, "-dateobs_end",   "dateobs",  "<=");
    335     PXOPT_COPY_STR(config->args, where,  "-filter",        "filter", "==");
     345    PXOPT_COPY_STR(config->args, where,  "-filter",        "filter", "LIKE");
    336346    PXOPT_COPY_STR(config->args, where,  "-exp_type",      "exp_type", "==");
    337347    PXOPT_COPY_STR(config->args, where,  "-obs_mode",      "obs_mode", "==");
    338     PXOPT_COPY_S64(config->args, where,  "-magicked",      "magicked", "==");
     348    PXOPT_COPY_STR(config->args, where,  "-data_state",    "data_state", "==");
    339349
    340350    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     
    347357    psString where2 = NULL;
    348358    if (!pxmagicAddWhere(config, &where2, "rawImfile")) {
    349         psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     359        psError(psErrorCodeLast(), false, "pxmagicAddWhere failed");
    350360        return false;
    351361    }
    352362    if (!pxspaceAddWhere(config, &where2, "rawImfile")) {
    353         psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     363        psError(psErrorCodeLast(), false, "pxspaceAddWhere failed");
    354364        return false;
    355365    }
     
    491501
    492502    PXOPT_LOOKUP_S16(fault, config->args, "-fault",   false, false);
    493 /*     PXOPT_LOOKUP_F64(user_1, config->args, "-user_1", false, false); */
    494503    PXOPT_LOOKUP_S16(burntool_state, config->args, "-burntool_state", false, false);
    495 
    496     if ((fault == INT16_MAX) && !isfinite(burntool_state)) {
    497         psError(PS_ERR_UNKNOWN, false, "one of -fault or -burntool_state must be selected");
     504    PXOPT_LOOKUP_S32(set_bytes, config->args, "-set_bytes", false, false);
     505    PXOPT_LOOKUP_STR(set_md5sum, config->args, "-set_md5sum", false, false);
     506    PXOPT_LOOKUP_STR(set_state, config->args, "-set_state", false, false);
     507
     508    if ((fault == INT16_MAX) && !isfinite(burntool_state) && !(set_state)) {
     509        psError(PS_ERR_UNKNOWN, false, "one of -fault or -burntool_state or -set_state must be selected");
    498510        return false;
    499511    }
     
    514526            return false;
    515527        }
    516     }
    517 
    518     if (isfinite(burntool_state)) {
    519         psString query = pxDataGet("regtool_updateprocessedimfile.sql");
    520         if (!query) {
    521             psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    522             return false;
    523         }
    524 
    525         if (!p_psDBRunQueryF(config->dbh, query, burntool_state, exp_id, class_id)) {
    526             psError(PS_ERR_UNKNOWN, false, "database error");
    527             psFree(query);
    528             return false;
    529         }
    530         psFree(query);
     528        psFree (where);
     529        return(true);
    531530    }
    532531    psFree (where);
    533532
     533    psString setvalues = NULL;
     534    if (burntool_state != INT16_MAX) {
     535      psStringAppend(&setvalues,"rawImfile.burntool_state = %d",burntool_state);
     536    }
     537    if (set_bytes != INT32_MAX) {
     538      if (setvalues) {
     539        psStringAppend(&setvalues,",");
     540      }
     541      psStringAppend(&setvalues,"rawImfile.bytes = %d",set_bytes);
     542    }
     543    if (set_md5sum) {
     544      if (setvalues) {
     545        psStringAppend(&setvalues,",");
     546      }
     547      psStringAppend(&setvalues,"rawImfile.md5sum = '%s'",set_md5sum);
     548    }
     549    if (set_state) {
     550      if (setvalues) {
     551        psStringAppend(&setvalues,",");
     552      }
     553      psStringAppend(&setvalues,"rawImfile.data_state = '%s'",set_state);
     554    }
     555
     556    psString query = pxDataGet("regtool_updateprocessedimfile.sql");
     557    if (!query) {
     558      psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     559      return false;
     560    }
     561
     562    //    printf(query,setvalues,exp_id,class_id);
     563    if (!p_psDBRunQueryF(config->dbh, query, setvalues, exp_id,class_id)) {
     564      psError(PS_ERR_UNKNOWN, false, "database error");
     565      psFree(query);
     566      psFree(setvalues);
     567      return false;
     568    }
     569    psFree(setvalues);
     570    psFree(query);
     571
    534572    return true;
     573}
     574
     575static bool pendingcompressimfileMode(pxConfig *config) {
     576  PS_ASSERT_PTR_NON_NULL(config, false);
     577
     578  psMetadata *where = psMetadataAlloc();
     579  PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
     580  PXOPT_COPY_STR(config->args, where, "-class_id", "class_id", "==");
     581
     582  psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     583  if (whereClause) {
     584    psStringPrepend(&whereClause, "\n AND ");
     585  }
     586  PXOPT_LOOKUP_BOOL(compress, config->args, "-compress", false);
     587  PXOPT_LOOKUP_BOOL(clean,    config->args, "-clean", false);
     588
     589  if ((compress && clean) || (!compress && !clean)) {
     590      psStringAppend(&whereClause, "\n AND ((data_state = 'goto_compressed' AND state = 'goto_compressed')\n  OR (data_state = 'goto_lossy' AND state = 'goto_lossy')) ");
     591  }
     592  else if (compress) {
     593    psStringAppend(&whereClause, "\n AND ((data_state = 'goto_compressed' AND state = 'goto_compressed')) ");
     594  }
     595  else if (clean) {
     596    psStringAppend(&whereClause, "\n AND ((data_state = 'goto_lossy' AND state = 'goto_lossy')) ");
     597  }
     598  else {
     599    psStringAppend(&whereClause, "\n AND ((data_state = 'goto_compressed' AND state = 'goto_compressed')\n  OR (data_state = 'goto_lossy' AND state = 'goto_lossy')) ");
     600  }
     601
     602  PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     603  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     604
     605  psString query = pxDataGet("regtool_pendingcompressimfile.sql");
     606  if (!query) {
     607    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     608    return(false);
     609  }
     610  psString limitString = NULL;
     611  if (limit) {
     612    limitString = psDBGenerateLimitSQL(limit);
     613    psStringPrepend(&limitString, "\n");
     614  }
     615  //  printf(query,whereClause,limitString);
     616  if (!p_psDBRunQueryF(config->dbh, query, whereClause, limitString ? limitString : "")) {
     617    psError(PXTOOLS_ERR_PROG, false, "database error");
     618    psFree(limitString);
     619    psFree(query);
     620    psFree(whereClause);
     621    psFree(where);
     622    return(false);
     623  }
     624  psFree(limitString);
     625  psFree(query);
     626  psFree(whereClause);
     627  psFree(where);
     628
     629  psArray *output = p_psDBFetchResult(config->dbh);
     630  if (!output) {
     631    psErrorCode err = psErrorCodeLast();
     632    switch (err) {
     633    case PS_ERR_DB_CLIENT:
     634      psError(PXTOOLS_ERR_SYS, false, "database error");
     635    case PS_ERR_DB_SERVER:
     636      psError(PXTOOLS_ERR_PROG, false, "database error");
     637    default:
     638      psError(PXTOOLS_ERR_PROG, false, "unknown error");
     639    }
     640
     641    return false;
     642  }
     643  if (!psArrayLength(output)) {
     644    psTrace("regtool", PS_LOG_INFO, "no rows found");
     645    psFree(output);
     646    return true;
     647  }
     648
     649  // negate simple so the default is true
     650  if (!ippdbPrintMetadatas(stdout, output, "regPendingCompressImfile", !simple)) {
     651    psError(PXTOOLS_ERR_PROG, false, "failed to print array");
     652    psFree(output);
     653    return false;
     654  }
     655
     656  psFree(output);
     657
     658  return true;
    535659}
    536660
     
    626750    PXOPT_LOOKUP_STR(exp_type, config->args, "-exp_type", false, false);
    627751    PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", false, false);
     752    PXOPT_LOOKUP_STR(state, config->args, "-state", false, false);
    628753    PXOPT_LOOKUP_STR(dvodb, config->args, "-dvodb", false, false);
    629754    PXOPT_LOOKUP_STR(tess_id, config->args, "-tess_id", false, false);
     
    787912        filelevel,
    788913        workdir,
     914        state,
    789915        reduction,
    790916        dvodb,
     
    9301056    PXOPT_COPY_STR(config->args,   where,  "-inst", "camera", "==");
    9311057    PXOPT_COPY_STR(config->args,   where,  "-telescope", "telescope", "==");
    932     PXOPT_COPY_TIME(config->args,  where, "-dateobs_begin", "dateobs", ">=");
    933     PXOPT_COPY_TIME(config->args,  where, "-dateobs_end", "dateobs", "<=");
     1058    PXOPT_COPY_TIME(config->args,  where,  "-dateobs_begin", "dateobs", ">=");
     1059    PXOPT_COPY_TIME(config->args,  where,  "-dateobs_end", "dateobs", "<=");
     1060    PXOPT_COPY_STR(config->args,   where,  "-state", "state", "==");
    9341061    PXOPT_COPY_STR(config->args,   where,  "-exp_tag", "exp_tag", "==");
    9351062    PXOPT_COPY_STR(config->args,   where,  "-exp_type", "exp_type", "==");
    9361063    PXOPT_COPY_STR(config->args,   where,  "-filelevel", "filelevel", "==");
    9371064    PXOPT_COPY_STR(config->args,   where,  "-reduction", "reduction", "==");
    938     PXOPT_COPY_STR(config->args,   where,  "-filter", "filter", "==");
     1065    PXOPT_COPY_STR(config->args,   where,  "-filter", "filter", "LIKE");
    9391066    PXOPT_COPY_F32(config->args,   where,  "-airmass_min", "airmass", ">=");
    9401067    PXOPT_COPY_F32(config->args,   where,  "-airmass_max", "airmass", "<");
     
    9651092    PXOPT_COPY_F32(config->args,   where,  "-sun_angle_max", "sun_angle", "<");
    9661093
     1094    psString where2 = NULL;
     1095    if (!pxmagicAddWhere(config, &where2, "rawExp")) {
     1096        psError(psErrorCodeLast(), false, "pxmagicAddWhere failed");
     1097        return false;
     1098    }
     1099    if (!pxspaceAddWhere(config, &where2, "rawExp")) {
     1100        psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed");
     1101        return false;
     1102    }
     1103
    9671104    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    9681105    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     
    9701107
    9711108    if (psListLength(where->list)) {
    972         psString whereClause = psDBGenerateWhereConditionSQL(where, "rawExp");
    973         psStringAppend(&query, " AND %s", whereClause);
    974         psFree(whereClause);
     1109      psString whereClause = psDBGenerateWhereConditionSQL(where, "rawExp");
     1110      psStringAppend(&query, " AND %s", whereClause);
     1111      psFree(whereClause);
    9751112    }
    9761113    psFree(where);
    9771114
     1115    if (where2) {
     1116        psStringAppend(&query, " %s ", where2);
     1117        psFree(where2);
     1118    }
     1119
    9781120    if (faulted) {
    979         // list only faulted rows
    980         psStringAppend(&query, " %s", "AND rawExp.fault != 0");
     1121      // list only faulted rows
     1122      psStringAppend(&query, " %s", "AND rawExp.fault != 0");
    9811123    } else {
    982         // don't list faulted rows
    983         psStringAppend(&query, " %s", "AND rawExp.fault = 0");
     1124      // don't list faulted rows
     1125      psStringAppend(&query, " %s", "AND rawExp.fault = 0");
    9841126    }
    9851127
    9861128    // treat limit == 0 as "no limit"
    9871129    if (limit) {
    988         psString limitString = psDBGenerateLimitSQL(limit);
    989         psStringAppend(&query, " %s", limitString);
    990         psFree(limitString);
     1130      psString limitString = psDBGenerateLimitSQL(limit);
     1131      psStringAppend(&query, " %s", limitString);
     1132      psFree(limitString);
    9911133    }
    9921134
    9931135    if (!p_psDBRunQuery(config->dbh, query)) {
    994         psError(PS_ERR_UNKNOWN, false, "database error");
    995         return false;
     1136      psError(PS_ERR_UNKNOWN, false, "database error");
     1137      return false;
    9961138    }
    9971139    psFree(query);
     
    9991141    psArray *output = p_psDBFetchResult(config->dbh);
    10001142    if (!output) {
    1001         psErrorCode err = psErrorCodeLast();
    1002         switch (err) {
    1003             case PS_ERR_DB_CLIENT:
    1004                 psError(PXTOOLS_ERR_SYS, false, "database error");
    1005             case PS_ERR_DB_SERVER:
    1006                 psError(PXTOOLS_ERR_PROG, false, "database error");
    1007             default:
    1008                 psError(PXTOOLS_ERR_PROG, false, "unknown error");
    1009         }
    1010 
    1011         return false;
     1143      psErrorCode err = psErrorCodeLast();
     1144      switch (err) {
     1145      case PS_ERR_DB_CLIENT:
     1146        psError(PXTOOLS_ERR_SYS, false, "database error");
     1147      case PS_ERR_DB_SERVER:
     1148        psError(PXTOOLS_ERR_PROG, false, "database error");
     1149      default:
     1150        psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1151      }
     1152
     1153      return false;
    10121154    }
    10131155    if (!psArrayLength(output)) {
    1014         psTrace("regtool", PS_LOG_INFO, "no rows found");
     1156      psTrace("regtool", PS_LOG_INFO, "no rows found");
     1157      psFree(output);
     1158      return true;
     1159    }
     1160
     1161    if (psArrayLength(output)) {
     1162      // negative simple so the default is true
     1163      if (!ippdbPrintMetadatas(stdout, output, "rawExp", !simple)) {
     1164        psError(PS_ERR_UNKNOWN, false, "failed to print array");
    10151165        psFree(output);
    1016         return true;
    1017     }
    1018 
    1019     if (psArrayLength(output)) {
    1020         // negative simple so the default is true
    1021         if (!ippdbPrintMetadatas(stdout, output, "rawExp", !simple)) {
    1022             psError(PS_ERR_UNKNOWN, false, "failed to print array");
    1023             psFree(output);
    1024             return false;
    1025         }
     1166        return false;
     1167      }
    10261168    }
    10271169
     
    10331175static bool revertprocessedexpMode(pxConfig *config)
    10341176{
    1035     PS_ASSERT_PTR_NON_NULL(config, false);
    1036 
    1037     psMetadata *where = psMetadataAlloc();
    1038     PXOPT_COPY_S64(config->args, where,  "-exp_id",       "exp_id", "==");
    1039     PXOPT_COPY_S16(config->args, where,  "-fault",         "fault", "==");
    1040     PXOPT_COPY_S64(config->args, where,  "-exp_id_begin", "exp_id", ">=");
    1041     PXOPT_COPY_S64(config->args, where,  "-exp_id_end", "exp_id", "<=");
    1042 
    1043     psString query = pxDataGet("regtool_revertprocessedexp.sql");
    1044     if (!query) {
    1045         psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    1046         psFree(where);
    1047         return false;
    1048     }
    1049 
    1050     if (psListLength(where->list)) {
    1051         psString whereClause = psDBGenerateWhereConditionSQL(where, "rawExp");
    1052         psStringAppend(&query, " AND %s", whereClause);
    1053         psFree(whereClause);
    1054     } else {
    1055         psFree(where);
    1056         psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    1057         return false;
    1058     }
     1177  PS_ASSERT_PTR_NON_NULL(config, false);
     1178
     1179  psMetadata *where = psMetadataAlloc();
     1180  PXOPT_COPY_S64(config->args, where,  "-exp_id",       "exp_id", "==");
     1181  PXOPT_COPY_S16(config->args, where,  "-fault",         "fault", "==");
     1182  PXOPT_COPY_S64(config->args, where,  "-exp_id_begin", "exp_id", ">=");
     1183  PXOPT_COPY_S64(config->args, where,  "-exp_id_end", "exp_id", "<=");
     1184
     1185  psString query = pxDataGet("regtool_revertprocessedexp.sql");
     1186  if (!query) {
     1187    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    10591188    psFree(where);
    1060 
    1061     if (!p_psDBRunQuery(config->dbh, query)) {
    1062         psError(PS_ERR_UNKNOWN, false, "database error");
    1063         psFree(query);
    1064         return false;
    1065     }
     1189    return false;
     1190  }
     1191
     1192  if (psListLength(where->list)) {
     1193    psString whereClause = psDBGenerateWhereConditionSQL(where, "rawExp");
     1194    psStringAppend(&query, " AND %s", whereClause);
     1195    psFree(whereClause);
     1196  } else {
     1197    psFree(where);
     1198    psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
     1199    return false;
     1200  }
     1201  psFree(where);
     1202
     1203  if (!p_psDBRunQuery(config->dbh, query)) {
     1204    psError(PS_ERR_UNKNOWN, false, "database error");
    10661205    psFree(query);
    1067 
    1068     int numUpdated = psDBAffectedRows(config->dbh);
    1069 
    1070     psLogMsg("regtool", PS_LOG_INFO, "Updated %d rawExp", numUpdated);
    1071 
    1072     return true;
     1206    return false;
     1207  }
     1208  psFree(query);
     1209
     1210  int numUpdated = psDBAffectedRows(config->dbh);
     1211
     1212  psLogMsg("regtool", PS_LOG_INFO, "Updated %d rawExp", numUpdated);
     1213
     1214  return true;
    10731215}
    10741216
     
    10761218static bool updateprocessedexpMode(pxConfig *config)
    10771219{
    1078     PS_ASSERT_PTR_NON_NULL(config, false);
    1079 
    1080     psMetadata *where = psMetadataAlloc();
    1081     PXOPT_COPY_S64(config->args, where,  "-exp_id",       "exp_id", "==");
    1082 
    1083     PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
    1084 
    1085     if (!pxSetFaultCode(config->dbh, "rawExp", where, fault)) {
    1086         psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
    1087         psFree(where);
    1088         return false;
    1089     }
     1220  PS_ASSERT_PTR_NON_NULL(config, false);
     1221
     1222  psMetadata *where = psMetadataAlloc();
     1223  PXOPT_COPY_S64(config->args, where,  "-exp_id",       "exp_id", "==");
     1224
     1225  PXOPT_LOOKUP_S16(fault, config->args, "-fault", true, false);
     1226
     1227  if (!pxSetFaultCode(config->dbh, "rawExp", where, fault)) {
     1228    psError(PS_ERR_UNKNOWN, false, "failed to set set fault flag");
    10901229    psFree(where);
    1091 
    1092     return true;
    1093 }
     1230    return false;
     1231  }
     1232  psFree(where);
     1233
     1234  return true;
     1235}
     1236
     1237
     1238static bool finishcompressexpMode(pxConfig *config) {
     1239
     1240  PS_ASSERT_PTR_NON_NULL(config, false);
     1241
     1242  PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1243
     1244  psMetadata *where = psMetadataAlloc();
     1245  PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "==");
     1246
     1247  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1248
     1249  psString query = pxDataGet("regtool_finishcompressexp.sql");
     1250  if (!query) {
     1251    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1252    return(false);
     1253  }
     1254  if (where && psListLength(where->list)) {
     1255    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1256    psStringAppend(&query, " %s ", whereClause);
     1257    psFree(whereClause);
     1258  }
     1259  psFree(where);
     1260
     1261  if (limit) {
     1262    psString limitString = psDBGenerateLimitSQL(limit);
     1263    psStringAppend(&query, " %s ", limitString);
     1264    psFree(limitString);
     1265  }
     1266  //  printf(query);
     1267  //  return(false);
     1268  if (!p_psDBRunQuery(config->dbh, query)) {
     1269    psError(PS_ERR_UNKNOWN, false, "database error");
     1270    psFree(query);
     1271    return(false);
     1272  }
     1273  psFree(query);
     1274
     1275  psArray *output = p_psDBFetchResult(config->dbh);
     1276  if (!output) {
     1277    psError(PS_ERR_UNKNOWN, false, "database error");
     1278    return(false);
     1279  }
     1280  if (!psArrayLength(output)) {
     1281    psTrace("chiptool", PS_LOG_INFO, "no rows found");
     1282    psFree(output);
     1283    return(true);
     1284  }
     1285
     1286  for (long i = 0; i < psArrayLength(output); i++) {
     1287    psMetadata *md = output->data[i];
     1288
     1289    rawExpRow *row = rawExpObjectFromMetadata(md);
     1290    if (!psDBTransaction(config->dbh)) {
     1291      psError(PS_ERR_UNKNOWN, false, "database error");
     1292      return(false);
     1293    }
     1294
     1295    if (strcmp(row->state,"goto_compressed") == 0) {
     1296      if (!pxrawExpSetState(config,row->exp_id, "compressed")) {
     1297        psError(PS_ERR_UNKNOWN, false, "failed to set rawExp.state for exp_id: %" PRId64, row->exp_id);
     1298        psFree(row);
     1299        psFree(output);
     1300        return(false);
     1301      }
     1302    }
     1303    else if (strcmp(row->state,"goto_lossy") == 0) {
     1304      if (!pxrawExpSetState(config,row->exp_id, "lossy")) {
     1305        psError(PS_ERR_UNKNOWN, false, "failed to set rawExp.state for exp_id: %" PRId64, row->exp_id);
     1306        psFree(row);
     1307        psFree(output);
     1308        return(false);
     1309      }
     1310    }
     1311    if (!psDBCommit(config->dbh)) {
     1312      psError(PS_ERR_UNKNOWN, false, "database error");
     1313      return false;
     1314    }
     1315    psFree(row);
     1316  }
     1317
     1318  psFree(output);
     1319  return(true);
     1320}
     1321
     1322static bool updatebyqueryMode(pxConfig *config) {
     1323  PS_ASSERT_PTR_NON_NULL(config, false);
     1324
     1325  PXOPT_LOOKUP_STR(set_state, config->args, "-set_state", true, false);
     1326
     1327  // XX test this out; need to make this consistent with the list in regtoolConfig.c
     1328  psMetadata *where = psMetadataAlloc();
     1329  PXOPT_COPY_S64(config->args,   where,  "-exp_id", "rawExp.exp_id", "==");
     1330  PXOPT_COPY_STR(config->args,   where,  "-exp_name", "rawExp.exp_name", "==");
     1331  PXOPT_COPY_STR(config->args,   where,  "-inst", "rawExp.camera", "==");
     1332  PXOPT_COPY_STR(config->args,   where,  "-telescope", "rawExp.telescope", "==");
     1333  PXOPT_COPY_TIME(config->args,  where, "-dateobs_begin", "rawExp.dateobs", ">=");
     1334  PXOPT_COPY_TIME(config->args,  where, "-dateobs_end", "rawExp.dateobs", "<=");
     1335  PXOPT_COPY_STR(config->args,   where,  "-exp_tag", "rawExp.exp_tag", "==");
     1336  PXOPT_COPY_STR(config->args,   where,  "-exp_type", "rawExp.exp_type", "==");
     1337  PXOPT_COPY_STR(config->args,   where,  "-filelevel", "rawExp.filelevel", "==");
     1338  PXOPT_COPY_STR(config->args,   where,  "-state",     "rawExp.state", "==");
     1339  PXOPT_COPY_STR(config->args,   where,  "-reduction", "rawExp.reduction", "==");
     1340  PXOPT_COPY_STR(config->args,   where,  "-filter", "rawExp.filter", "==");
     1341  PXOPT_COPY_F32(config->args,   where,  "-airmass_min", "rawExp.airmass", ">=");
     1342  PXOPT_COPY_F32(config->args,   where,  "-airmass_max", "rawExp.airmass", "<");
     1343  PXOPT_COPY_RADEC(config->args, where,  "-ra_min", "rawExp.ra", ">=");
     1344  PXOPT_COPY_RADEC(config->args, where,  "-ra_max", "rawExp.ra", "<");
     1345  PXOPT_COPY_RADEC(config->args, where,  "-decl_min", "rawExp.decl", ">=");
     1346  PXOPT_COPY_RADEC(config->args, where,  "-decl_max", "rawExp.decl", "<");
     1347  PXOPT_COPY_F32(config->args,   where,  "-exp_time_min", "rawExp.exp_time", ">=");
     1348  PXOPT_COPY_F32(config->args,   where,  "-exp_time_max", "rawExp.exp_time", "<");
     1349  PXOPT_COPY_F32(config->args,   where,  "-sat_pixel_frac_min", "rawExp.sat_pixel_frac", ">=");
     1350  PXOPT_COPY_F32(config->args,   where,  "-sat_pixel_frac_max", "rawExp.sat_pixel_frac", "<");
     1351  PXOPT_COPY_F64(config->args,   where,  "-bg_min", "rawExp.bg", ">=");
     1352  PXOPT_COPY_F64(config->args,   where,  "-bg_max", "rawExp.bg", "<");
     1353  PXOPT_COPY_F64(config->args,   where,  "-bg_stdev_min", "rawExp.bg_stdev", ">=");
     1354  PXOPT_COPY_F64(config->args,   where,  "-bg_stdev_max", "rawExp.bg_stdev", "<");
     1355  PXOPT_COPY_F64(config->args,   where,  "-bg_mean_stdev_min", "rawExp.bg_mean_stdev", ">=");
     1356  PXOPT_COPY_F64(config->args,   where,  "-bg_mean_stdev_max", "rawExp.bg_mean_stdev", "<");
     1357  PXOPT_COPY_F64(config->args,   where,  "-alt_min", "rawExp.alt", ">=");
     1358  PXOPT_COPY_F64(config->args,   where,  "-alt_max", "rawExp.alt", "<");
     1359  PXOPT_COPY_F64(config->args,   where,  "-az_min", "rawExp.az", ">=");
     1360  PXOPT_COPY_F64(config->args,   where,  "-az_max", "rawExp.az", "<");
     1361  PXOPT_COPY_F64(config->args,   where,  "-ccd_temp_min", "rawExp.ccd_temp", ">=");
     1362  PXOPT_COPY_F64(config->args,   where,  "-ccd_temp_max", "rawExp.ccd_temp", "<");
     1363  PXOPT_COPY_F64(config->args,   where,  "-posang_min", "rawExp.posang", ">=");
     1364  PXOPT_COPY_F64(config->args,   where,  "-posang_max", "rawExp.posang", "<");
     1365  PXOPT_COPY_F32(config->args,   where,  "-sun_angle_min", "rawExp.sun_angle", ">=");
     1366  PXOPT_COPY_F32(config->args,   where,  "-sun_angle_max", "rawExp.sun_angle", "<");
     1367  PXOPT_COPY_STR(config->args,   where,  "-object", "rawExp.object", "==");
     1368  PXOPT_COPY_STR(config->args,   where,  "-comment", "rawExp.comment", "LIKE");
     1369  PXOPT_COPY_STR(config->args,   where,  "-obs_mode", "rawExp.obs_mode", "LIKE");
     1370
     1371
     1372  psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1373  psStringPrepend(&whereClause,"\n AND ");
     1374  PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1375  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1376
     1377  psString limitString = NULL;
     1378  if (limit) {
     1379    limitString = psDBGenerateLimitSQL(limit);
     1380    psStringPrepend(&limitString, "\n");
     1381  }
     1382  // Update the imfiles first, because if you select by state, you'll clobber things
     1383  psString query = pxDataGet("regtool_updatebyqueryimfile.sql");
     1384  if (!query) {
     1385    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1386    return(false);
     1387  }
     1388
     1389  //  printf(query,set_state,whereClause,limitString);
     1390  if (!p_psDBRunQueryF(config->dbh, query, set_state, whereClause, limitString ? limitString : "")) {
     1391    psError(PXTOOLS_ERR_PROG, false, "database error");
     1392    psFree(limitString);
     1393    psFree(query);
     1394    psFree(whereClause);
     1395    psFree(where);
     1396    return(false);
     1397  }
     1398
     1399  psFree(query);
     1400  // Now up date the exposure.
     1401  query = pxDataGet("regtool_updatebyquery.sql");
     1402  if (!query) {
     1403    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1404    return(false);
     1405  }
     1406  if (!p_psDBRunQueryF(config->dbh, query, set_state,whereClause, limitString ? limitString : "")) {
     1407    psError(PXTOOLS_ERR_PROG, false, "database error");
     1408    psFree(limitString);
     1409    psFree(query);
     1410    psFree(whereClause);
     1411    psFree(where);
     1412    return(false);
     1413  }
     1414
     1415  psFree(limitString);
     1416  psFree(query);
     1417  psFree(whereClause);
     1418  psFree(where);
     1419
     1420  return true;
     1421}
     1422
    10941423
    10951424
Note: See TracChangeset for help on using the changeset viewer.