Changeset 24136 for branches/pap_magic/ippTools/src/magictool.c
- Timestamp:
- May 11, 2009, 4:38:18 PM (17 years ago)
- File:
-
- 1 edited
-
branches/pap_magic/ippTools/src/magictool.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap_magic/ippTools/src/magictool.c
r23970 r24136 127 127 PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false); 128 128 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 129 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 129 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 130 131 psMetadata *diffWhere = psMetadataAlloc(); // WHERE conditions for diffRuns 132 PXOPT_COPY_STR(config->args, diffWhere, "-diff_label", "diffRun.label", "=="); 133 134 psMetadata *queryWhere = psMetadataAlloc(); // WHERE conditions for everything else 135 PXOPT_COPY_S64(config->args, queryWhere, "-exp_id", "exp_id", "=="); 134 136 135 137 // Get list of exposures ready to magic … … 146 148 PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false); 147 149 148 psString queryWhere = NULL; // WHERE conditions for entire query 150 psString diffWhereStr = NULL; // WHERE conditions for diffRuns 151 psString queryWhereStr = NULL; // WHERE conditions for entire query 149 152 if (!available) { 150 psStringAppend(& queryWhere, " \nWHEREdiffRun.state = 'full'");151 } else {152 // what if no skycells for the diff run completed?153 } 153 psStringAppend(&diffWhereStr, "\nAND diffRun.state = 'full'"); 154 } 155 // what if no skycells for the diff run completed? 156 154 157 if (!rerun) { 155 const char *newWhere = " magic_id IS NULL"; // String to add 156 if (queryWhere) { 157 psStringAppend(&queryWhere, " AND %s", newWhere); 158 } else { 159 psStringAppend(&queryWhere, "\nWHERE %s", newWhere); 160 } 161 } 158 psStringAppend(&queryWhereStr, "\n%s magic_id IS NULL", queryWhereStr ? "AND" : "WHERE"); 159 } 160 162 161 // 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);162 if (psListLength(diffWhere->list)) { 163 psString whereClause = psDBGenerateWhereConditionSQL(diffWhere, NULL); 164 psStringAppend(&diffWhereStr, "\nAND %s", whereClause); 166 165 psFree(whereClause); 167 166 } 168 psFree(where); 169 if (!queryWhere) { 170 psStringAppend(&queryWhere, " "); 171 } 172 173 if (!p_psDBRunQueryF(config->dbh, query, queryWhere)) { 167 if (psListLength(queryWhere->list)) { 168 psString whereClause = psDBGenerateWhereConditionSQL(queryWhere, NULL); 169 psStringAppend(&queryWhereStr, "\n%s %s", queryWhereStr ? "AND" : "WHERE", whereClause); 170 psFree(whereClause); 171 } 172 psFree(diffWhere); 173 psFree(queryWhere); 174 175 // Ensure the WHERE strings have something 176 if (!diffWhereStr) { 177 diffWhereStr = psStringCopy(""); 178 } 179 if (!queryWhereStr) { 180 queryWhereStr = psStringCopy(""); 181 } 182 183 if (!p_psDBRunQueryF(config->dbh, query, diffWhereStr, diffWhereStr, queryWhereStr)) { 174 184 psError(PS_ERR_UNKNOWN, false, "database error"); 175 psFree(queryWhere); 185 psFree(diffWhereStr); 186 psFree(queryWhereStr); 176 187 psFree(query); 177 188 return false; 178 189 } 179 psFree(queryWhere); 190 psFree(diffWhereStr); 191 psFree(queryWhereStr); 180 192 psFree(query); 181 193 } … … 201 213 } 202 214 215 216 if (pretend) { 217 // negative simple so the default is true 218 if (!ippdbPrintMetadatas(stdout, output, "diffRun", !simple)) { 219 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 220 psFree(output); 221 return false; 222 } 223 psFree(output); 224 return true; 225 } 226 227 203 228 // Parse the list of exposures ready to magic 204 205 229 if (!psDBTransaction(config->dbh)) { 206 230 psError(PS_ERR_UNKNOWN, false, "database error"); … … 215 239 psS64 exp_id = psMetadataLookupS64(NULL, row, "exp_id"); // Exposure identifier 216 240 psS64 diff_id = psMetadataLookupS64(NULL, row, "diff_id"); // difference identifier 241 bool inverse = psMetadataLookupU64(NULL, row, "inverse"); // Inverse subtraction? Note types! 217 242 218 243 // create a new magicRun for this group 219 magicRunRow *run = magicRunRowAlloc(0, exp_id, diff_id, "new", workdir, "dirty", label, dvodb, registered, 0); 244 magicRunRow *run = magicRunRowAlloc(0, exp_id, diff_id, inverse, "new", workdir, "dirty", label, 245 dvodb, registered, 0); 220 246 if (!run) { 221 247 psAbort("failed to alloc magicRun object"); … … 296 322 297 323 // optional 324 PXOPT_LOOKUP_BOOL(inverse, config->args, "-inverse", false); 298 325 PXOPT_LOOKUP_STR(label, config->args, "-label", false, false); 299 326 PXOPT_LOOKUP_STR(dvodb, config->args, "-dvodb", false, false); … … 305 332 exp_id, 306 333 diff_id ? diff_id : PS_MAX_S64, 334 inverse, 307 335 "reg", // state 308 336 workdir,
Note:
See TracChangeset
for help on using the changeset viewer.
