Changeset 20973 for trunk/ippTools/src/magictool.c
- Timestamp:
- Dec 13, 2008, 10:17:34 AM (17 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/magictool.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/magictool.c
r20783 r20973 128 128 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 129 129 130 // Create temporary table of the best diffs 131 { 132 psString query = pxDataGet("magictool_definebyquery_temp_create.sql"); 133 if (!query) { 134 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 135 return false; 136 } 137 138 if (!p_psDBRunQuery(config->dbh, query)) { 139 psError(PS_ERR_UNKNOWN, false, "database error"); 140 return false; 141 } 142 psFree(query); 143 } 144 145 // Insert list of best diffs into temporary table 146 { 147 psString query = pxDataGet("magictool_definebyquery_temp_insert.sql"); 148 if (!query) { 149 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 150 return false; 151 } 152 153 psMetadata *where = psMetadataAlloc(); 154 PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "=="); 155 PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "=="); 156 PXOPT_COPY_F32(config->args, where, "-good_frac", "warpSkyfile.good_frac", ">="); 157 158 psString whereClause = NULL; // WHERE conditions 159 if (psListLength(where->list)) { 160 whereClause = psDBGenerateWhereConditionSQL(where, NULL); 161 psStringPrepend(&whereClause, "\n AND "); 162 } 163 psFree(where); 164 165 if (!p_psDBRunQuery(config->dbh, query, whereClause)) { 166 psError(PS_ERR_UNKNOWN, false, "database error"); 167 psFree(whereClause); 168 psFree(query); 169 return false; 170 } 171 psFree(whereClause); 172 psFree(query); 173 } 130 psMetadata *where = psMetadataAlloc(); 131 PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "=="); 132 PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "=="); 133 174 134 175 135 // Get list of exposures ready to magic … … 181 141 } 182 142 183 psString magicSkyCellNumsWhere = NULL; // WHERE conditions for magicSkyCellNums 184 { 185 psMetadata *where = psMetadataAlloc(); 186 PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "=="); 187 PXOPT_COPY_STR(config->args, where, "-diff_label", "diffRun.label", "=="); 188 PXOPT_COPY_F32(config->args, where, "-good_frac", "warpSkyfile.good_frac", ">="); 189 190 if (psListLength(where->list)) { 191 magicSkyCellNumsWhere = psDBGenerateWhereConditionSQL(where, NULL); 192 psStringPrepend(&magicSkyCellNumsWhere, "\n AND "); 193 } 194 psFree(where); 195 } 196 197 // "available" means only concern ourselves with exposures that have all diffs completed, unless we're 198 // told to only take what's available. 199 // "new" means we want a new run even if there's already a magic run defined 143 // "available" means queue magic run even though the diffRun has skycells that did not complete 144 // "rerun" means we want a new run even if there's already a magic run defined for the exposure 200 145 PXOPT_LOOKUP_BOOL(available, config->args, "-available", false); 201 PXOPT_LOOKUP_BOOL( new, config->args, "-new", false);146 PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false); 202 147 203 148 psString queryWhere = NULL; // WHERE conditions for entire query 204 if (available) { 205 psStringAppend(&queryWhere, " WHERE num_done = num_todo"); 206 } 207 if (new) { 149 if (!available) { 150 psStringAppend(&queryWhere, " \nWHERE diffRun.state = 'full'"); 151 } else { 152 // what if no skycells for the diff run completed? 153 } 154 if (!rerun) { 208 155 const char *newWhere = " magic_id IS NULL"; // String to add 209 156 if (queryWhere) { 210 157 psStringAppend(&queryWhere, " AND %s", newWhere); 211 158 } else { 212 psStringAppend(&queryWhere, " WHERE %s", newWhere);159 psStringAppend(&queryWhere, "\nWHERE %s", newWhere); 213 160 } 214 161 } 215 if (queryWhere) { 216 psStringAppend(&query, " %s", queryWhere); 162 // now add the user specified qualifiers 163 if (psListLength(where->list)) { 164 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 165 psStringAppend(&queryWhere, "\n%s %s", queryWhere == NULL ? "WHERE" : "AND", whereClause); 166 psFree(whereClause); 167 } 168 psFree(where); 169 if (!queryWhere) { 170 psStringAppend(&queryWhere, " "); 171 } 172 173 if (!p_psDBRunQuery(config->dbh, query, queryWhere)) { 174 psError(PS_ERR_UNKNOWN, false, "database error"); 217 175 psFree(queryWhere); 218 }219 220 221 if (!p_psDBRunQuery(config->dbh, query, magicSkyCellNumsWhere ? magicSkyCellNumsWhere : "")) {222 psError(PS_ERR_UNKNOWN, false, "database error");223 psFree(magicSkyCellNumsWhere);224 176 psFree(query); 225 177 return false; 226 178 } 227 psFree( magicSkyCellNumsWhere);179 psFree(queryWhere); 228 180 psFree(query); 229 181 } … … 262 214 psMetadata *row = output->data[i]; // Row of interest 263 215 psS64 exp_id = psMetadataLookupS64(NULL, row, "exp_id"); // Exposure identifier 216 psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id"); // difference identifier 264 217 265 218 // create a new magicRun for this group 266 magicRunRow *run = magicRunRowAlloc(0, exp_id, "run", workdir, "dirty", label, dvodb, registered, 0);219 magicRunRow *run = magicRunRowAlloc(0, exp_id, diff_id, "run", workdir, "dirty", label, dvodb, registered, 0); 267 220 if (!run) { 268 221 psAbort("failed to alloc magicRun object"); … … 297 250 { 298 251 psString idString = NULL; 299 psStringAppend(&idString, "%" PRId64, exp_id);300 psStringSubstitute(&thisInsert, idString, "@ EXP_ID@");252 psStringAppend(&idString, "%" PRId64, diff_id); 253 psStringSubstitute(&thisInsert, idString, "@DIFF_ID@"); 301 254 psFree(idString); 302 255 } … … 340 293 PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false); 341 294 PXOPT_LOOKUP_S64(exp_id, config->args, "-exp_id", true, false); 295 PXOPT_LOOKUP_S64(diff_id, config->args, "-diff_id", true, false); 342 296 343 297 // optional … … 350 304 0, // ID 351 305 exp_id, 306 diff_id, 352 307 "reg", // state 353 308 workdir,
Note:
See TracChangeset
for help on using the changeset viewer.
