Changeset 23502
- Timestamp:
- Mar 24, 2009, 3:47:54 PM (17 years ago)
- Location:
- trunk/ippTools
- Files:
-
- 2 added
- 4 edited
-
share/Makefile.am (modified) (1 diff)
-
share/difftool_definewarpwarp_insert.sql (added)
-
share/difftool_definewarpwarp_select.sql (added)
-
src/difftool.c (modified) (23 diffs)
-
src/difftool.h (modified) (1 diff)
-
src/difftoolConfig.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/share/Makefile.am
r23430 r23502 76 76 difftool_definebyquery_part2.sql \ 77 77 difftool_definebyquery_temp_create.sql \ 78 difftool_definewarpwarp_select.sql \ 79 difftool_definewarpwarp_insert.sql \ 78 80 difftool_donecleanup.sql \ 79 81 difftool_inputskyfile.sql \ -
trunk/ippTools/src/difftool.c
r23438 r23502 41 41 static bool definepoprunMode(pxConfig *config); 42 42 static bool definebyqueryMode(pxConfig *config); 43 static bool definewarpwarpMode(pxConfig *config); 43 44 static bool pendingcleanuprunMode(pxConfig *config); 44 45 static bool pendingcleanupskyfileMode(pxConfig *config); … … 79 80 MODECASE(DIFFTOOL_MODE_DEFINEPOPRUN, definepoprunMode); 80 81 MODECASE(DIFFTOOL_MODE_DEFINEBYQUERY, definebyqueryMode); 82 MODECASE(DIFFTOOL_MODE_DEFINEWARPWARP, definewarpwarpMode); 81 83 MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPRUN, pendingcleanuprunMode); 82 84 MODECASE(DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE, pendingcleanupskyfileMode); … … 1006 1008 psTrace("difftool", 1, query, warpQuery, diffQuery, expQuery, stackQuery); 1007 1009 1010 if (!psDBTransaction(config->dbh)) { 1011 psError(PS_ERR_UNKNOWN, false, "database error"); 1012 return false; 1013 } 1008 1014 1009 1015 if (!p_psDBRunQueryF(config->dbh, query, warpQuery, expQuery, diffQuery)) { 1010 1016 psError(PS_ERR_UNKNOWN, false, "database error"); 1011 1017 psFree(query); 1018 if (!psDBRollback(config->dbh)) { 1019 psError(PS_ERR_UNKNOWN, false, "database error"); 1020 } 1012 1021 return false; 1013 1022 } … … 1018 1027 psErrorCode err = psErrorCodeLast(); 1019 1028 switch (err) { 1020 case PS_ERR_DB_CLIENT: 1021 psError(PXTOOLS_ERR_SYS, false, "database error"); 1022 case PS_ERR_DB_SERVER: 1023 psError(PXTOOLS_ERR_PROG, false, "database error"); 1024 default: 1025 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1026 } 1027 1029 case PS_ERR_DB_CLIENT: 1030 psError(PXTOOLS_ERR_SYS, false, "database error"); 1031 break; 1032 case PS_ERR_DB_SERVER: 1033 psError(PXTOOLS_ERR_PROG, false, "database error"); 1034 break; 1035 default: 1036 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1037 break; 1038 } 1039 if (!psDBRollback(config->dbh)) { 1040 psError(PS_ERR_UNKNOWN, false, "database error"); 1041 } 1028 1042 return false; 1029 1043 } … … 1031 1045 psTrace("difftool", PS_LOG_INFO, "no rows found"); 1032 1046 psFree(output); 1047 if (!psDBCommit(config->dbh)) { 1048 psError(PS_ERR_UNKNOWN, false, "database error"); 1049 return false; 1050 } 1033 1051 return true; 1034 1052 } … … 1039 1057 psError(PS_ERR_UNKNOWN, false, "database error"); 1040 1058 psFree(query); 1059 if (!psDBRollback(config->dbh)) { 1060 psError(PS_ERR_UNKNOWN, false, "database error"); 1061 } 1041 1062 return false; 1042 1063 } … … 1059 1080 if (!mdok) { 1060 1081 psError(PXTOOLS_ERR_PROG, false, "exp_id not found"); 1082 if (!psDBRollback(config->dbh)) { 1083 psError(PS_ERR_UNKNOWN, false, "database error"); 1084 } 1061 1085 return false; 1062 1086 } … … 1072 1096 psFree(stackQuery); 1073 1097 psFree(skycell_query); 1098 if (!psDBRollback(config->dbh)) { 1099 psError(PS_ERR_UNKNOWN, false, "database error"); 1100 } 1074 1101 return false; 1075 1102 } … … 1080 1107 psFree(stackQuery); 1081 1108 psFree(skycell_query); 1109 if (!psDBRollback(config->dbh)) { 1110 psError(PS_ERR_UNKNOWN, false, "database error"); 1111 } 1082 1112 return false; 1083 1113 } … … 1088 1118 psFree(stackQuery); 1089 1119 psFree(skycell_query); 1120 if (!psDBRollback(config->dbh)) { 1121 psError(PS_ERR_UNKNOWN, false, "database error"); 1122 } 1090 1123 return false; 1091 1124 } … … 1096 1129 psFree(stackQuery); 1097 1130 psFree(skycell_query); 1131 if (!psDBRollback(config->dbh)) { 1132 psError(PS_ERR_UNKNOWN, false, "database error"); 1133 } 1098 1134 return false; 1099 1135 } … … 1104 1140 psFree(stackQuery); 1105 1141 psFree(skycell_query); 1142 if (!psDBRollback(config->dbh)) { 1143 psError(PS_ERR_UNKNOWN, false, "database error"); 1144 } 1106 1145 return false; 1107 1146 } … … 1111 1150 psFree(stackQuery); 1112 1151 psFree(skycell_query); 1152 if (!psDBRollback(config->dbh)) { 1153 psError(PS_ERR_UNKNOWN, false, "database error"); 1154 } 1113 1155 return false; 1114 1156 } … … 1143 1185 psError(PS_ERR_UNKNOWN, false, "database error"); 1144 1186 psFree(run); 1145 return true; 1187 if (!psDBRollback(config->dbh)) { 1188 psError(PS_ERR_UNKNOWN, false, "database error"); 1189 } 1190 return false; 1146 1191 } 1147 1192 run->diff_id = psDBLastInsertID(config->dbh); … … 1154 1199 psFree(skycell_query); 1155 1200 psFree(query); 1201 if (!psDBRollback(config->dbh)) { 1202 psError(PS_ERR_UNKNOWN, false, "database error"); 1203 } 1156 1204 return false; 1157 1205 } … … 1165 1213 psFree(skycell_query); 1166 1214 psFree(query); 1215 if (!psDBRollback(config->dbh)) { 1216 psError(PS_ERR_UNKNOWN, false, "database error"); 1217 } 1167 1218 return false; 1168 1219 } … … 1177 1228 psFree(skycell_query); 1178 1229 psFree(query); 1230 if (!psDBRollback(config->dbh)) { 1231 psError(PS_ERR_UNKNOWN, false, "database error"); 1232 } 1179 1233 return false; 1180 1234 } … … 1188 1242 psFree(skycell_query); 1189 1243 1244 if (!psDBCommit(config->dbh)) { 1245 psError(PS_ERR_UNKNOWN, false, "database error"); 1246 psFree(list); 1247 return false; 1248 } 1249 1190 1250 if (!diffRunPrintObjects(stdout, list, !simple)) { 1191 1251 psError(PS_ERR_UNKNOWN, false, "failed to print object"); … … 1197 1257 return true; 1198 1258 } 1259 1260 static bool definewarpwarpMode(pxConfig *config) 1261 { 1262 PS_ASSERT_PTR_NON_NULL(config, false); 1263 1264 psMetadata *where = psMetadataAlloc(); 1265 1266 // Restrictions 1267 PXOPT_COPY_S64(config->args, where, "-warp_id", "inputWarpRun.warp_id", "=="); 1268 PXOPT_COPY_S64(config->args, where, "-exp_id", "inputRawExp.exp_id", "=="); 1269 PXOPT_COPY_STR(config->args, where, "-filter", "inputRawExp.filter", "=="); 1270 PXOPT_COPY_STR(config->args, where, "-input_label", "inputWarpRun.label", "=="); 1271 PXOPT_COPY_STR(config->args, where, "-template_label", "templateWarpRun.label", "=="); 1272 PXOPT_COPY_F32(config->args, where, "-timediff", 1273 "ABS(TIME_TO_SEC(TIMEDIFF(inputRawExp.dateobs, templateRawExp.dateobs)))", "<="); 1274 PXOPT_COPY_F32(config->args, where, "-rotdiff", "ABS(inputRawExp.posang - templateRawExp.posang)", "<="); 1275 1276 // Additional controls 1277 PXOPT_LOOKUP_BOOL(rerun, config->args, "-rerun", false); 1278 PXOPT_LOOKUP_BOOL(available, config->args, "-available", false); 1279 1280 // Settings to apply to defined run 1281 PXOPT_LOOKUP_STR(workdir, config->args, "-workdir", true, false); // required options 1282 PXOPT_LOOKUP_STR(reduction, config->args, "-reduction", false, false); // option 1283 PXOPT_LOOKUP_STR(label, config->args, "-label", false, false); // option 1284 PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false); 1285 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 1286 1287 1288 psString select = pxDataGet("difftool_definewarpwarp_select.sql"); 1289 if (!select) { 1290 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1291 return false; 1292 } 1293 1294 psString whereClause = NULL; // The WHERE part of the query 1295 1296 if (psListLength(where->list)) { 1297 psString new = psDBGenerateWhereConditionSQL(where, NULL); 1298 psStringAppend(&whereClause, "\n%s %s", whereClause ? "AND" : "WHERE", new); 1299 psFree(new); 1300 } 1301 psFree(where); 1302 1303 if (!rerun) { 1304 psStringAppend(&whereClause, "\n%s diffRun.diff_id IS NULL", whereClause ? "AND" : "WHERE"); 1305 } 1306 1307 if (!available) { 1308 psStringAppend(&whereClause, "\n%s inputWarpRun.state = 'full'", whereClause ? "AND" : "WHERE"); 1309 } 1310 1311 if (!psDBTransaction(config->dbh)) { 1312 psError(PS_ERR_UNKNOWN, false, "database error"); 1313 psFree(select); 1314 psFree(whereClause); 1315 return false; 1316 } 1317 1318 if (!p_psDBRunQueryF(config->dbh, select, 1319 !rerun ? "\n" : "", // Activate LEFT JOIN against diffRun? 1320 whereClause)) { 1321 psError(PS_ERR_UNKNOWN, false, "Unable to run query: %s [WITH] %s", select, whereClause); 1322 psFree(select); 1323 psFree(whereClause); 1324 if (!psDBRollback(config->dbh)) { 1325 psError(PS_ERR_UNKNOWN, false, "database error"); 1326 } 1327 return false; 1328 } 1329 psFree(select); 1330 psFree(whereClause); 1331 1332 psArray *results = p_psDBFetchResult(config->dbh); // Results of query 1333 if (!results) { 1334 psErrorCode err = psErrorCodeLast(); // Code for error 1335 switch (err) { 1336 case PS_ERR_DB_CLIENT: 1337 psError(PXTOOLS_ERR_SYS, false, "database error"); 1338 break; 1339 case PS_ERR_DB_SERVER: 1340 psError(PXTOOLS_ERR_PROG, false, "database error"); 1341 break; 1342 default: 1343 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1344 break; 1345 } 1346 if (!psDBRollback(config->dbh)) { 1347 psError(PS_ERR_UNKNOWN, false, "database error"); 1348 } 1349 return false; 1350 } 1351 if (!psArrayLength(results)) { 1352 psTrace("difftool", 1, "no rows found"); 1353 psFree(results); 1354 return true; 1355 } 1356 1357 psString insert = pxDataGet("difftool_definewarpwarp_insert.sql"); // Insertion for each new run 1358 1359 psArray *list = psArrayAllocEmpty(16); // List of runs defined, to print 1360 long numGood = 0; // Number of good rows added 1361 for (long i = 0; i < results->n; i++) { 1362 psMetadata *row = results->data[i]; // Result row from query 1363 1364 psS64 exp_id = psMetadataLookupS64(NULL, row, "input_exp_id"); 1365 psS64 input_id = psMetadataLookupS64(NULL, row, "input_warp_id"); 1366 psS64 template_id = psMetadataLookupS64(NULL, row, "template_warp_id"); 1367 const char *tess_id = psMetadataLookupStr(NULL, row, "tess_id"); 1368 if (!exp_id || !input_id || !template_id || !tess_id) { 1369 psError(PXTOOLS_ERR_PROG, false, "Identifiers not found"); 1370 psFree(list); 1371 psFree(insert); 1372 psFree(results); 1373 if (!psDBRollback(config->dbh)) { 1374 psError(PS_ERR_UNKNOWN, false, "database error"); 1375 } 1376 return false; 1377 } 1378 1379 diffRunRow *run = diffRunRowAlloc(0, "reg", workdir, label, reduction, NULL, registered, 1380 tess_id, exp_id, false); // Run to insert 1381 if (!diffRunInsertObject(config->dbh, run)) { 1382 psError(PS_ERR_UNKNOWN, false, "database error"); 1383 psFree(run); 1384 psFree(list); 1385 psFree(insert); 1386 psFree(results); 1387 if (!psDBRollback(config->dbh)) { 1388 psError(PS_ERR_UNKNOWN, false, "database error"); 1389 } 1390 return false; 1391 } 1392 run->diff_id = psDBLastInsertID(config->dbh); // Difference run identifier 1393 1394 // Convert identifiers to string, for insertion into query 1395 psString diff = NULL, input = NULL, template = NULL; // String versions of identifiers 1396 psStringAppend(&diff, "%" PRId64, run->diff_id); 1397 psStringAppend(&input, "%" PRId64, input_id); 1398 psStringAppend(&template, "%" PRId64, template_id); 1399 1400 if (!p_psDBRunQueryF(config->dbh, insert, diff, input, template, input, template)) { 1401 psError(PS_ERR_UNKNOWN, false, "database error"); 1402 psFree(input); 1403 psFree(template); 1404 psFree(diff); 1405 psFree(run); 1406 psFree(list); 1407 psFree(insert); 1408 psFree(results); 1409 if (!psDBRollback(config->dbh)) { 1410 psError(PS_ERR_UNKNOWN, false, "database error"); 1411 } 1412 return false; 1413 } 1414 psFree(input); 1415 psFree(template); 1416 psFree(diff); 1417 1418 if (!setdiffRunState(config, run->diff_id, "new", false)) { 1419 psError(PS_ERR_UNKNOWN, false, "Failed to change diffRun.state for diff_id: %" PRId64, 1420 run->diff_id); 1421 psFree(run); 1422 psFree(list); 1423 psFree(insert); 1424 psFree(results); 1425 if (!psDBRollback(config->dbh)) { 1426 psError(PS_ERR_UNKNOWN, false, "database error"); 1427 } 1428 return false; 1429 } 1430 1431 psArrayAdd(list, list->n, run); 1432 psFree(run); // Drop reference 1433 1434 numGood++; 1435 } 1436 psFree(insert); 1437 psFree(results); 1438 1439 if (!psDBCommit(config->dbh)) { 1440 psError(PS_ERR_UNKNOWN, false, "database error"); 1441 psFree(list); 1442 return false; 1443 } 1444 1445 if (!diffRunPrintObjects(stdout, list, !simple)) { 1446 psError(PS_ERR_UNKNOWN, false, "failed to print object"); 1447 psFree(list); 1448 return false; 1449 } 1450 psFree(list); 1451 1452 return true; 1453 } 1454 1199 1455 1200 1456 static bool pendingcleanuprunMode(pxConfig *config) … … 1453 1709 char sqlFilename[80]; 1454 1710 } ExportTable; 1455 1711 1456 1712 int numExportFiles = 3; 1457 1713 … … 1532 1788 { 1533 1789 unsigned int nFail; 1534 1790 1535 1791 int numImportTables = 2; 1536 1792 1537 1793 char tables[2] [80] = {"diffInputSkyfile", "diffSkyfile"}; 1538 1794 1539 1795 PS_ASSERT_PTR_NON_NULL(config, NULL); 1540 1796 1541 1797 PXOPT_LOOKUP_STR(infile, config->args, "-infile", true, false); 1542 1798 … … 1563 1819 psAssert (item, "entry not in input?"); 1564 1820 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1565 1821 1566 1822 switch (i) { 1567 1823 case 0: … … 1577 1833 } 1578 1834 break; 1579 1835 1580 1836 case 1: 1581 1837 for (int i = 0; i < item->data.list->n; i++) { -
trunk/ippTools/src/difftool.h
r23310 r23502 35 35 DIFFTOOL_MODE_DEFINEPOPRUN, 36 36 DIFFTOOL_MODE_DEFINEBYQUERY, 37 DIFFTOOL_MODE_DEFINEWARPWARP, 37 38 DIFFTOOL_MODE_PENDINGCLEANUPRUN, 38 39 DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE, -
trunk/ippTools/src/difftoolConfig.c
r23388 r23502 165 165 psMetadataAddBool(definebyqueryArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 166 166 167 // -definewarpwarp 168 psMetadata *definewarpwarpArgs = psMetadataAlloc(); 169 psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-warp_id", 0, "search by warp ID", 0); 170 psMetadataAddS64(definewarpwarpArgs, PS_LIST_TAIL, "-exp_id", 0, "search by exposure ID", 0); 171 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-filter", 0, "search by filter", NULL); 172 psMetadataAddF32(definewarpwarpArgs, PS_LIST_TAIL, "-timediff", 0, "limit time difference between input and template", NAN); 173 psMetadataAddF32(definewarpwarpArgs, PS_LIST_TAIL, "-rotdiff", 0, "limit rotator difference between input and template", NAN); 174 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-input_label", 0, "search by warp label for input", NULL); 175 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-template_label", 0, "search by warp label for template", NULL); 176 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-workdir", 0, "define workdir (required)", NULL); 177 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-label", 0, "define label", NULL); 178 psMetadataAddStr(definewarpwarpArgs, PS_LIST_TAIL, "-reduction", 0, "define reduction class", NULL); 179 psMetadataAddTime(definewarpwarpArgs, PS_LIST_TAIL, "-registered", 0, "time detrend run was registered", now); 180 psMetadataAddBool(definewarpwarpArgs, PS_LIST_TAIL, "-rerun", 0, "define new run even if one exists", false); 181 psMetadataAddBool(definewarpwarpArgs, PS_LIST_TAIL, "-available", 0, "define new run even if warpRun has some faults", false); 182 psMetadataAddBool(definewarpwarpArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 183 167 184 // -pendingcleanuprun 168 185 psMetadata *pendingcleanuprunArgs = psMetadataAlloc(); … … 215 232 PXOPT_ADD_MODE("-definepoprun", "", DIFFTOOL_MODE_DEFINEPOPRUN, definepoprunArgs); 216 233 PXOPT_ADD_MODE("-definebyquery", "", DIFFTOOL_MODE_DEFINEBYQUERY, definebyqueryArgs); 234 PXOPT_ADD_MODE("-definewarpwarp", "", DIFFTOOL_MODE_DEFINEWARPWARP, definewarpwarpArgs); 217 235 PXOPT_ADD_MODE("-pendingcleanuprun", "show runs that need to be cleaned up", DIFFTOOL_MODE_PENDINGCLEANUPRUN, pendingcleanuprunArgs); 218 236 PXOPT_ADD_MODE("-pendingcleanupskyfile", "show runs that need to be cleaned up", DIFFTOOL_MODE_PENDINGCLEANUPSKYFILE, pendingcleanupskyfileArgs);
Note:
See TracChangeset
for help on using the changeset viewer.
