IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 24, 2010, 2:59:09 PM (16 years ago)
Author:
Paul Price
Message:

Merging trunk in advance of reintegrating into trunk.

Location:
branches/pap
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/pap

  • branches/pap/ippTools/src

    • Property svn:ignore
      •  

        old new  
        3939warptool
        4040staticskytool
        41 
        4241bgtool
         42diffphottool
  • branches/pap/ippTools/src/stacktool.c

    r28043 r28484  
    3939static bool addsumskyfileMode(pxConfig *config);
    4040static bool sumskyfileMode(pxConfig *config);
     41static bool sassskyfileMode(pxConfig *config);
    4142static bool revertsumskyfileMode(pxConfig *config);
     43static bool tosummaryMode(pxConfig *config);
     44static bool addsummaryMode(pxConfig *config);
    4245static bool pendingcleanuprunMode(pxConfig *config);
    4346static bool pendingcleanupskyfileMode(pxConfig *config);
     
    7578        MODECASE(STACKTOOL_MODE_ADDSUMSKYFILE,         addsumskyfileMode);
    7679        MODECASE(STACKTOOL_MODE_SUMSKYFILE,            sumskyfileMode);
     80        MODECASE(STACKTOOL_MODE_SASSSKYFILE,            sassskyfileMode);
    7781        MODECASE(STACKTOOL_MODE_REVERTSUMSKYFILE,      revertsumskyfileMode);
     82        MODECASE(STACKTOOL_MODE_TOSUMMARY,             tosummaryMode);
     83        MODECASE(STACKTOOL_MODE_ADDSUMMARY,            addsummaryMode);
    7884        MODECASE(STACKTOOL_MODE_PENDINGCLEANUPRUN,     pendingcleanuprunMode);
    7985        MODECASE(STACKTOOL_MODE_PENDINGCLEANUPSKYFILE, pendingcleanupskyfileMode);
     
    102108    exit(exit_status);
    103109}
     110//stackAssociationRow *association = pxStackAssociationDefine(data_group,tess_id,filter,skycell_id);
     111stackAssociationRow *pxStackAssociationDefine(pxConfig *config, psS64 stack_id) {
     112  psString select = pxDataGet("stacktool_associationdefine_select.sql");
     113  if (!select) {
     114    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     115    return false;
     116  }
     117
     118  psString idString = NULL;
     119  psStringAppend(&idString, "%" PRId64, stack_id);
     120  // Copy string to get around the issue with psStringSubstitute not believing
     121  // that select is a psString.
     122  psString rep = psStringCopy(select);
     123  psFree(select);
     124  select = rep;
     125  psStringSubstitute(&select, idString, "@STACK_ID@");
     126  psFree(idString);
     127
     128  if (!p_psDBRunQuery(config->dbh, select)) {
     129    psError(PS_ERR_UNKNOWN,false, "database error");
     130    psFree(select);
     131    return(NULL);
     132  }
     133  psFree(select);
     134  psArray *output = p_psDBFetchResult(config->dbh);
     135  if (!output) {
     136    psErrorCode err = psErrorCodeLast();
     137    switch (err) {
     138    case PS_ERR_DB_CLIENT:
     139      psError(PXTOOLS_ERR_SYS, false, "database error");
     140    case PS_ERR_DB_SERVER:
     141      psError(PXTOOLS_ERR_PROG, false, "database error");
     142    default:
     143      psError(PXTOOLS_ERR_PROG, false, "unknown error");
     144    }
     145    return(NULL);
     146  }
     147  if (psArrayLength(output) != 1) {
     148    psWarning("stacktool: incorrect number of rows found");
     149    psFree(output);
     150    return(NULL);
     151  }
     152  psMetadata *outrow = psMetadataAlloc();
     153  for (long i = 0; i < output->n; i++) {
     154    psMetadata *row = output->data[i];
     155
     156    printf("%" PRId64 " %s %s %s %s\n",psMetadataLookupS64(NULL,row,"sass_id"),
     157           psMetadataLookupStr(NULL,row,"data_group"),
     158           psMetadataLookupStr(NULL,row,"tess_id"),
     159           psMetadataLookupStr(NULL,row,"filter"),
     160           psMetadataLookupStr(NULL,row,"projection_cell"));
     161
     162    if (psMetadataLookupS64(NULL,row,"sass_id") == PS_MAX_S64) {
     163      psMetadataAddS64(outrow,PS_LIST_TAIL,"sass_id",PS_META_REPLACE,"",0);
     164    }
     165    else {
     166      psMetadataAddS64(outrow,PS_LIST_TAIL,"sass_id",PS_META_REPLACE,"",psMetadataLookupS64(NULL,row,"sass_id"));
     167    }
     168    psMetadataAddStr(outrow,PS_LIST_TAIL,"data_group",PS_META_REPLACE,"",psMetadataLookupStr(NULL,row,"data_group"));
     169    psMetadataAddStr(outrow,PS_LIST_TAIL,"tess_id",PS_META_REPLACE,"",psMetadataLookupStr(NULL,row,"tess_id"));
     170    psMetadataAddStr(outrow,PS_LIST_TAIL,"filter",PS_META_REPLACE,"",psMetadataLookupStr(NULL,row,"filter"));
     171    psMetadataAddStr(outrow,PS_LIST_TAIL,"projection_cell",PS_META_REPLACE,"",
     172                     psMetadataLookupStr(NULL,row,"projection_cell"));
     173  }
     174  printf("%" PRId64 " %s %s %s %s\n",psMetadataLookupS64(NULL,outrow,"sass_id"),
     175         psMetadataLookupStr(NULL,outrow,"data_group"),
     176         psMetadataLookupStr(NULL,outrow,"tess_id"),
     177         psMetadataLookupStr(NULL,outrow,"filter"),
     178         psMetadataLookupStr(NULL,outrow,"projection_cell"));
     179 
     180
     181  psFree(output);
     182  stackAssociationRow *sassRow = stackAssociationObjectFromMetadata(outrow);
     183  psFree(outrow);
     184  return(sassRow);
     185}
     186     
     187     
     188 
     189                                             
    104190
    105191
     
    151237    PXOPT_COPY_F32(config->args,  where, "-select_iq_m4_min",          "camProcessedExp.iq_m4", ">=");
    152238    PXOPT_COPY_F32(config->args,  where, "-select_iq_m4_max",          "camProcessedExp.iq_m4", "<=");
     239    PXOPT_COPY_F32(config->args,  where, "-select_zpt_obs_min",        "camProcessedExp.zpt_obs", ">=");
     240    PXOPT_COPY_F32(config->args,  where, "-select_zpt_obs_max",        "camProcessedExp.zpt_obs", "<=");
    153241
    154242    PXOPT_COPY_STR(config->args,  where, "-select_exp_type",           "rawExp.exp_type", "==");
     
    370458            tess_id,
    371459            filter,
    372             NULL, // software_ver
     460            NULL, // software_ver
    373461            note);
    374462
     
    395483        psFree(run);
    396484
     485        //CZW Add an association entry here.
     486        // Define the requested association, and insert it if it doesn't already exist
     487        stackAssociationRow *association = pxStackAssociationDefine(config,stack_id);
     488        psS64 sass_id;
     489        if (!association->sass_id) {
     490          psTrace("stacktool.association",2,"No required Association found. Adding.");
     491
     492          if (!stackAssociationInsertObject(config->dbh,association)) {
     493            if (!psDBRollback(config->dbh)) {
     494              psError(PS_ERR_UNKNOWN, false, "database error");
     495            }
     496            psError(PS_ERR_UNKNOWN, false, "database error");
     497            psFree(output);
     498            psFree(run);
     499            psFree(insert);
     500            psFree(list);
     501            psFree(association);
     502            if (!psDBRollback(config->dbh)) {
     503              psError(PS_ERR_UNKNOWN, false, "database error");
     504            }
     505            return(false);
     506          }
     507          sass_id = psDBLastInsertID(config->dbh);
     508          association->sass_id = sass_id;
     509        }
     510        // Insert the map entry for this row.
     511        stackAssociationMapRow *maprow = stackAssociationMapRowAlloc(sass_id,stack_id);
     512        if (!stackAssociationMapInsertObject(config->dbh,maprow)) {
     513          if (!psDBRollback(config->dbh)) {
     514            psError(PS_ERR_UNKNOWN, false, "database error");
     515          }
     516          psError(PS_ERR_UNKNOWN, false, "database error");
     517          psFree(output);
     518          psFree(run);
     519          psFree(insert);
     520          psFree(list);
     521          psFree(association);
     522          if (!psDBRollback(config->dbh)) {
     523            psError(PS_ERR_UNKNOWN, false, "database error");
     524          }
     525          return(false);
     526        }
     527       
     528       
    397529        // Create a suitable insertion query for this run
    398530        psString thisInsert = psStringCopy(insert);
     
    527659        tess_id,
    528660        filter,
    529         NULL, // software_ver
     661        NULL, // software_ver
    530662        note);
    531663
     
    552684    run->stack_id = psDBLastInsertID(config->dbh);
    553685
     686    //CZW Add an association entry here.
     687   
    554688    // insert the stackInputSkyfile rows
    555689    psListIterator *iter = psListIteratorAlloc(warp_ids->data.list, 0, false);
     
    603737#endif
    604738    psMetadata *where = psMetadataAlloc();
    605     PXOPT_COPY_S64(config->args, where, "-stack_id",  "stack_id",   "==");
    606     PXOPT_COPY_STR(config->args, where, "-label",     "label",     "==");
    607     PXOPT_COPY_STR(config->args, where, "-state",     "state",     "==");
     739    PXOPT_COPY_S64(config->args, where, "-stack_id",  "stackRun.stack_id",   "==");
     740    PXOPT_COPY_STR(config->args, where, "-label",     "stackRun.label",     "==");
     741    PXOPT_COPY_STR(config->args, where, "-state",     "stackRun.state",     "==");
     742    PXOPT_COPY_STR(config->args, where, "-sass_id",   "stackAssociationMap.sass_id",  "==");
    608743    if (!psListLength(where->list)) {
    609744        psFree(where);
     
    612747    }
    613748
     749    //CZW join against stackAssociationMap
    614750    psString query = psStringCopy("UPDATE stackRun");
    615751
     
    854990
    855991    psTrace("czw.test",1,"Received versions: pslib %s psmodules %s psphot %s ppstats %s ppstack %s streaks %s\n",
    856             ver_pslib,ver_psmodules,ver_psphot,ver_ppstats,ver_ppstack,ver_streaks);
     992            ver_pslib,ver_psmodules,ver_psphot,ver_ppstats,ver_ppstack,ver_streaks);
    857993    psString software_ver = NULL;
    858994    if ((ver_pslib)&&(ver_psmodules)) {
     
    8711007      software_ver = pxMergeCodeVersions(software_ver,ver_streaks);
    8721008    }
    873    
     1009
    8741010    // default values
    8751011    PXOPT_LOOKUP_S16(fault, config->args, "-fault", false, false);
     
    9111047                               good_frac,
    9121048                               fault,
    913                                software_ver,
     1049                               software_ver,
    9141050                               quality
    9151051          )) {
     
    9221058
    9231059    if (fault == 0) {
    924         // Set stackRun software if we are finished.
    925         if (!pxSetRunSoftware(config, "stackRun", "stack_id", stack_id, software_ver)) {
    926           if (!psDBRollback(config->dbh)) {
    927             psError(PS_ERR_UNKNOWN, false, "database error");
    928           }
    929           psError(PS_ERR_UNKNOWN, false, "failed to set stackRun.software_ver for stack_id: %" PRId64,
    930                   stack_id);
    931           return(false);
    932         }
     1060        // Set stackRun software if we are finished.
     1061        if (!pxSetRunSoftware(config, "stackRun", "stack_id", stack_id, software_ver)) {
     1062          if (!psDBRollback(config->dbh)) {
     1063            psError(PS_ERR_UNKNOWN, false, "database error");
     1064          }
     1065          psError(PS_ERR_UNKNOWN, false, "failed to set stackRun.software_ver for stack_id: %" PRId64,
     1066                  stack_id);
     1067          return(false);
     1068        }
    9331069
    9341070        if (!setstackRunState(config, stack_id, "full")) {
     
    10381174}
    10391175
    1040 
    1041 static bool revertsumskyfileMode(pxConfig *config)
     1176static bool sassskyfileMode(pxConfig *config)
    10421177{
    10431178    PS_ASSERT_PTR_NON_NULL(config, false);
    10441179
    10451180    psMetadata *where = psMetadataAlloc();
    1046     PXOPT_COPY_S64(config->args, where, "-stack_id", "stackSumSkyfile.stack_id", "==");
    1047     pxAddLabelSearchArgs(config, where, "-label", "stackRun.label", "==");
    1048     PXOPT_COPY_S16(config->args, where, "-fault", "stackSumSkyfile.fault", "==");
    1049 
    1050     if (!psListLength(where->list) && !psMetadataLookupBool(NULL, config->args, "-all")) {
    1051         psFree(where);
    1052         psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
    1053         return false;
    1054     }
    1055 
    1056     // Delete product
    1057     psString delete = pxDataGet("stacktool_revertsumskyfile_delete.sql");
    1058     if (!delete) {
     1181    PXOPT_COPY_S64(config->args, where, "-sass_id", "stackAssociation.sass_id", "==");
     1182    PXOPT_COPY_STR(config->args, where, "-tess_id", "stackAssociation.tess_id", "==");
     1183    PXOPT_COPY_STR(config->args, where, "-projection_cell", "stackAssociation.projection_cell", "==");
     1184    PXOPT_COPY_STR(config->args, where, "-filter", "stackAssociation.filter", "LIKE");
     1185    PXOPT_COPY_STR(config->args, where, "-data_group", "stackAssociation.data_group", "LIKE");
     1186
     1187//  The following three selectors are incompatible with the sql so omit them
     1188//    PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "==");
     1189//     PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "==");
     1190//    PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "==");
     1191
     1192    PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     1193
     1194    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1195    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1196
     1197    psString query = pxDataGet("stacktool_sassskyfile.sql");
     1198    if (!query) {
    10591199        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    10601200        return false;
     
    10631203    if (psListLength(where->list)) {
    10641204        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1065         psStringAppend(&delete, " AND %s", whereClause);
     1205        psStringAppend(&query, " WHERE %s", whereClause);
    10661206        psFree(whereClause);
    1067     }
    1068 
    1069     if (!p_psDBRunQuery(config->dbh, delete)) {
    1070         psError(PS_ERR_UNKNOWN, false, "database error");
    1071         psFree(delete);
    1072         psFree(where);
    1073         return false;
    1074     }
    1075     psFree(delete);
    1076 
    1077     int numRows = psDBAffectedRows(config->dbh); // Number of row affected
    1078     psLogMsg("stacktool", PS_LOG_INFO, "Deleted %d rows", numRows);
    1079 
    1080     psFree(where);
    1081 
    1082     return true;
    1083 }
    1084 
    1085 
    1086 static bool setstackRunState(pxConfig *config, psS64 stack_id, const char *state)
    1087 {
    1088     PS_ASSERT_PTR_NON_NULL(state, false);
    1089 
    1090     // check that state is a valid string value
    1091     if (!pxIsValidState(state)) {
    1092         psError(PS_ERR_UNKNOWN, false, "invalid stackRun state: %s", state);
    1093         return false;
    1094     }
    1095 
    1096     char *query = "UPDATE stackRun SET state = '%s' WHERE stack_id = %"PRId64;
    1097     if (!p_psDBRunQueryF(config->dbh, query, state, stack_id)) {
    1098         psError(PS_ERR_UNKNOWN, false,
    1099                 "failed to change state for stack_id %"PRId64, stack_id);
    1100         return false;
    1101     }
    1102 
    1103     return true;
    1104 }
    1105 
    1106 #ifdef notdef
    1107 static bool setstackRunStateByLabel(pxConfig *config, const char *label, const char *state)
    1108 {
    1109     PS_ASSERT_PTR_NON_NULL(state, false);
    1110 
    1111     // check that state is a valid string value
    1112     if (!pxIsValidState(state)) {
    1113         psError(PS_ERR_UNKNOWN, false, "invalid stackRun state: %s", state);
    1114         return false;
    1115     }
    1116 
    1117     char *query = "UPDATE stackRun SET state = '%s' WHERE label = '%s'";
    1118     if (!p_psDBRunQueryF(config->dbh, query, state, label)) {
    1119         psError(PS_ERR_UNKNOWN, false,
    1120                 "failed to change state for label %s", label);
    1121         return false;
    1122     }
    1123 
    1124     return true;
    1125 }
    1126 #endif
    1127 
    1128 static bool pendingcleanuprunMode(pxConfig *config)
    1129 {
    1130     PS_ASSERT_PTR_NON_NULL(config, NULL);
    1131 
    1132     PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    1133     PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    1134 
    1135     psMetadata *where = psMetadataAlloc();
    1136     pxAddLabelSearchArgs (config, where, "-label", "stackRun.label", "==");
    1137 
    1138     psString query = pxDataGet("stacktool_pendingcleanuprun.sql");
    1139     if (!query) {
    1140         psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
    1141         return false;
    1142     }
    1143 
    1144     if (where && psListLength(where->list)) {
    1145         psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
    1146         psStringAppend(&query, " AND %s", whereClause);
    1147         psFree(whereClause);
    1148     }
     1207    } else if (!all) {
     1208        psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     1209        return false;
     1210    }
     1211
    11491212    psFree(where);
    11501213
     
    11651228    psArray *output = p_psDBFetchResult(config->dbh);
    11661229    if (!output) {
    1167         psError(PS_ERR_UNKNOWN, false, "database error");
     1230        psErrorCode err = psErrorCodeLast();
     1231        switch (err) {
     1232            case PS_ERR_DB_CLIENT:
     1233                psError(PXTOOLS_ERR_SYS, false, "database error");
     1234            case PS_ERR_DB_SERVER:
     1235                psError(PXTOOLS_ERR_PROG, false, "database error");
     1236            default:
     1237                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1238        }
     1239
    11681240        return false;
    11691241    }
     
    11741246    }
    11751247
     1248    if (psArrayLength(output)) {
     1249        if (!ippdbPrintMetadatas(stdout, output, "stackSumSkyfile", !simple)) {
     1250            psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1251            psFree(output);
     1252            return false;
     1253        }
     1254    }
     1255
     1256    psFree(output);
     1257
     1258    return true;
     1259}
     1260
     1261
     1262static bool revertsumskyfileMode(pxConfig *config)
     1263{
     1264    PS_ASSERT_PTR_NON_NULL(config, false);
     1265
     1266    psMetadata *where = psMetadataAlloc();
     1267    PXOPT_COPY_S64(config->args, where, "-stack_id", "stackSumSkyfile.stack_id", "==");
     1268    pxAddLabelSearchArgs(config, where, "-label", "stackRun.label", "==");
     1269    PXOPT_COPY_S16(config->args, where, "-fault", "stackSumSkyfile.fault", "==");
     1270
     1271    if (!psListLength(where->list) && !psMetadataLookupBool(NULL, config->args, "-all")) {
     1272        psFree(where);
     1273        psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required");
     1274        return false;
     1275    }
     1276
     1277    // Delete product
     1278    psString delete = pxDataGet("stacktool_revertsumskyfile_delete.sql");
     1279    if (!delete) {
     1280        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1281        return false;
     1282    }
     1283
     1284    if (psListLength(where->list)) {
     1285        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1286        psStringAppend(&delete, " AND %s", whereClause);
     1287        psFree(whereClause);
     1288    }
     1289
     1290    if (!p_psDBRunQuery(config->dbh, delete)) {
     1291        psError(PS_ERR_UNKNOWN, false, "database error");
     1292        psFree(delete);
     1293        psFree(where);
     1294        return false;
     1295    }
     1296    psFree(delete);
     1297
     1298    int numRows = psDBAffectedRows(config->dbh); // Number of row affected
     1299    psLogMsg("stacktool", PS_LOG_INFO, "Deleted %d rows", numRows);
     1300
     1301    psFree(where);
     1302
     1303    return true;
     1304}
     1305
     1306
     1307static bool setstackRunState(pxConfig *config, psS64 stack_id, const char *state)
     1308{
     1309    PS_ASSERT_PTR_NON_NULL(state, false);
     1310
     1311    // check that state is a valid string value
     1312    if (!pxIsValidState(state)) {
     1313        psError(PS_ERR_UNKNOWN, false, "invalid stackRun state: %s", state);
     1314        return false;
     1315    }
     1316
     1317    char *query = "UPDATE stackRun SET state = '%s' WHERE stack_id = %"PRId64;
     1318    if (!p_psDBRunQueryF(config->dbh, query, state, stack_id)) {
     1319        psError(PS_ERR_UNKNOWN, false,
     1320                "failed to change state for stack_id %"PRId64, stack_id);
     1321        return false;
     1322    }
     1323
     1324    return true;
     1325}
     1326
     1327#ifdef notdef
     1328static bool setstackRunStateByLabel(pxConfig *config, const char *label, const char *state)
     1329{
     1330    PS_ASSERT_PTR_NON_NULL(state, false);
     1331
     1332    // check that state is a valid string value
     1333    if (!pxIsValidState(state)) {
     1334        psError(PS_ERR_UNKNOWN, false, "invalid stackRun state: %s", state);
     1335        return false;
     1336    }
     1337
     1338    char *query = "UPDATE stackRun SET state = '%s' WHERE label = '%s'";
     1339    if (!p_psDBRunQueryF(config->dbh, query, state, label)) {
     1340        psError(PS_ERR_UNKNOWN, false,
     1341                "failed to change state for label %s", label);
     1342        return false;
     1343    }
     1344
     1345    return true;
     1346}
     1347#endif
     1348static bool tosummaryMode(pxConfig *config) {
     1349  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1350 
     1351  psMetadata *where = psMetadataAlloc();
     1352  PXOPT_COPY_S64(config->args, where, "-stack_id",    "stackSumSkyfile.warp_id", "==");
     1353  PXOPT_COPY_S64(config->args, where, "-sass_id",     "stackAssociationMap.sass_id", "==");
     1354  PXOPT_COPY_STR(config->args, where, "-tess_id",    "stackSumSkyfile.tess_id", "==");
     1355  PXOPT_COPY_STR(config->args, where, "-state",      "stackRun.state", "==");
     1356  PXOPT_COPY_STR(config->args, where, "-filter",    "stackRun.filter", "LIKE");
     1357  pxAddLabelSearchArgs (config, where, "-label",   "stackRun.label", "LIKE");
     1358  pxAddLabelSearchArgs (config, where, "-data_group",   "stackRun.data_group", "LIKE");
     1359 
     1360  PXOPT_LOOKUP_BOOL(all, config->args, "-all", false);
     1361
     1362  PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1363  PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1364 
     1365  // find all rawImfiles matching the default query
     1366  psString query = pxDataGet("stacktool_tosummary.sql");
     1367  if (!query) {
     1368    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1369    return false;
     1370  }
     1371
     1372  // generate where strings for arguments that require extra processing
     1373  // beyond PXOPT_COPY*
     1374  if (psListLength(where->list)) {
     1375    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1376    psStringAppend(&query, " AND %s", whereClause);
     1377    psFree(whereClause);
     1378  } else if (!all) {
     1379    psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required");
     1380    return false;
     1381  }
     1382 
     1383  psFree(where);
     1384
     1385  // treat limit == 0 as "no limit"
     1386  if (limit) {
     1387    psString limitString = psDBGenerateLimitSQL(limit);
     1388    psStringAppend(&query, " %s", limitString);
     1389    psFree(limitString);
     1390  }
     1391
     1392  if (!p_psDBRunQuery(config->dbh, query)) {
     1393    psError(PS_ERR_UNKNOWN, false, "database error");
     1394    psFree(query);
     1395    return false;
     1396  }
     1397  psFree(query);
     1398
     1399  psArray *output = p_psDBFetchResult(config->dbh);
     1400  if (!output) {
     1401    psErrorCode err = psErrorCodeLast();
     1402    switch (err) {
     1403    case PS_ERR_DB_CLIENT:
     1404      psError(PXTOOLS_ERR_SYS, false, "database error");
     1405    case PS_ERR_DB_SERVER:
     1406      psError(PXTOOLS_ERR_PROG, false, "database error");
     1407    default:
     1408      psError(PXTOOLS_ERR_PROG, false, "unknown error");
     1409    }
     1410   
     1411    return false;
     1412  }
     1413  if (!psArrayLength(output)) {
     1414    psTrace("stacktool", PS_LOG_INFO, "no rows found");
     1415    psFree(output);
     1416    return true;
     1417  }
     1418 
     1419  if (psArrayLength(output)) {
    11761420    // negative simple so the default is true
    1177     if (!ippdbPrintMetadatas(stdout, output, "stackPendingCleanupRun", !simple)) {
    1178         psError(PS_ERR_UNKNOWN, false, "failed to print array");
    1179         psFree(output);
    1180         return false;
    1181     }
    1182 
    1183     psFree(output);
    1184 
    1185     return true;
    1186 }
    1187 
    1188 static bool pendingcleanupskyfileMode(pxConfig *config)
     1421    if (!ippdbPrintMetadatas(stdout, output, "stackRun", !simple)) {
     1422      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1423      psFree(output);
     1424      return false;
     1425    }
     1426  }
     1427 
     1428  psFree(output);
     1429  return(true);
     1430}
     1431static bool addsummaryMode(pxConfig *config) {
     1432  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1433
     1434  PXOPT_LOOKUP_S64(sass_id, config->args, "-sass_id", true, false);
     1435  PXOPT_LOOKUP_STR(projection_cell, config->args, "-projection_cell", true, false);
     1436  PXOPT_LOOKUP_STR(path_base, config->args, "-path_base", true, false);
     1437
     1438  psString query = pxDataGet("stacktool_addsummary.sql");
     1439  if (!query) {
     1440    psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1441    return(false);
     1442  }
     1443  if (!p_psDBRunQueryF(config->dbh, query, sass_id, projection_cell, path_base)) {
     1444    psError(PS_ERR_UNKNOWN, false, "database error");
     1445    psFree(query);
     1446    return(false);
     1447  }
     1448  psS64 numUpdated = psDBAffectedRows(config->dbh);
     1449 
     1450  if (numUpdated != 1) {
     1451    psError(PS_ERR_UNKNOWN, false, "should have affected 1 row");
     1452    psFree(query);
     1453    return false;
     1454  }
     1455 
     1456  psFree(query);
     1457
     1458  // Print anything here?
     1459 
     1460  return(true);
     1461}
     1462
     1463static bool pendingcleanuprunMode(pxConfig *config)
    11891464{
    11901465    PS_ASSERT_PTR_NON_NULL(config, NULL);
    11911466
    1192     PXOPT_LOOKUP_S64(stack_id, config->args, "-stack_id", false, false);
    11931467    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    11941468    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    11951469
    11961470    psMetadata *where = psMetadataAlloc();
    1197     if (stack_id) {
    1198         PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
    1199     }
     1471    PXOPT_COPY_S64(config->args, where, "-stack_id", "stackRun.stack_id", "==");
     1472    PXOPT_COPY_S64(config->args, where, "-sass_id", "stackAssociationMap.sass_id", "==");
     1473   
    12001474    pxAddLabelSearchArgs (config, where, "-label", "stackRun.label", "==");
    12011475
    1202     psString query = pxDataGet("stacktool_pendingcleanupskyfile.sql");
     1476    psString query = pxDataGet("stacktool_pendingcleanuprun.sql");
    12031477    if (!query) {
    12041478        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     
    12391513
    12401514    // negative simple so the default is true
    1241     if (!ippdbPrintMetadatas(stdout, output, "stackPendingCleanupSkyfile", !simple)) {
     1515    if (!ippdbPrintMetadatas(stdout, output, "stackPendingCleanupRun", !simple)) {
    12421516        psError(PS_ERR_UNKNOWN, false, "failed to print array");
    12431517        psFree(output);
     
    12501524}
    12511525
    1252 
    1253 static bool donecleanupMode(pxConfig *config)
     1526static bool pendingcleanupskyfileMode(pxConfig *config)
    12541527{
    12551528    PS_ASSERT_PTR_NON_NULL(config, NULL);
    12561529
     1530    PXOPT_LOOKUP_S64(stack_id, config->args, "-stack_id", false, false);
    12571531    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
    12581532    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
    12591533
    12601534    psMetadata *where = psMetadataAlloc();
    1261     PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
    1262 
    1263     psString query = pxDataGet("stacktool_donecleanup.sql");
     1535    if (stack_id) {
     1536        PXOPT_COPY_S64(config->args, where, "-stack_id", "stack_id", "==");
     1537    }
     1538    pxAddLabelSearchArgs (config, where, "-label", "stackRun.label", "==");
     1539
     1540    psString query = pxDataGet("stacktool_pendingcleanupskyfile.sql");
    12641541    if (!query) {
    12651542        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     
    13001577
    13011578    // negative simple so the default is true
     1579    if (!ippdbPrintMetadatas(stdout, output, "stackPendingCleanupSkyfile", !simple)) {
     1580        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1581        psFree(output);
     1582        return false;
     1583    }
     1584
     1585    psFree(output);
     1586
     1587    return true;
     1588}
     1589
     1590
     1591static bool donecleanupMode(pxConfig *config)
     1592{
     1593    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1594
     1595    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1596    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1597
     1598    psMetadata *where = psMetadataAlloc();
     1599    PXOPT_COPY_STR(config->args, where, "-label", "label", "==");
     1600    PXOPT_COPY_STR(config->args, where, "-sass_id", "sass_id", "==");
     1601
     1602    psString query = pxDataGet("stacktool_donecleanup.sql");
     1603    if (!query) {
     1604        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1605        return false;
     1606    }
     1607
     1608    if (where && psListLength(where->list)) {
     1609        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1610        psStringAppend(&query, " AND %s", whereClause);
     1611        psFree(whereClause);
     1612    }
     1613    psFree(where);
     1614
     1615    // treat limit == 0 as "no limit"
     1616    if (limit) {
     1617        psString limitString = psDBGenerateLimitSQL(limit);
     1618        psStringAppend(&query, " %s", limitString);
     1619        psFree(limitString);
     1620    }
     1621
     1622    if (!p_psDBRunQuery(config->dbh, query)) {
     1623        psError(PS_ERR_UNKNOWN, false, "database error");
     1624        psFree(query);
     1625        return false;
     1626    }
     1627    psFree(query);
     1628
     1629    psArray *output = p_psDBFetchResult(config->dbh);
     1630    if (!output) {
     1631        psError(PS_ERR_UNKNOWN, false, "database error");
     1632        return false;
     1633    }
     1634    if (!psArrayLength(output)) {
     1635        psTrace("stacktool", PS_LOG_INFO, "no rows found");
     1636        psFree(output);
     1637        return true;
     1638    }
     1639
     1640    // negative simple so the default is true
    13021641    if (!ippdbPrintMetadatas(stdout, output, "stackDoneCleanup", !simple)) {
    13031642        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     
    13291668}
    13301669
     1670//CZW I have not added sass information to the export/import run modes yet.
    13311671bool exportrunMode(pxConfig *config)
    13321672{
Note: See TracChangeset for help on using the changeset viewer.