Changeset 27838 for branches/tap_branches/ippTools/src/warptool.c
- Timestamp:
- May 3, 2010, 8:41:49 AM (16 years ago)
- Location:
- branches/tap_branches
- Files:
-
- 3 edited
-
. (modified) (1 prop)
-
ippTools/src (modified) (1 prop)
-
ippTools/src/warptool.c (modified) (35 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/tap_branches
- Property svn:mergeinfo changed
-
branches/tap_branches/ippTools/src
- Property svn:ignore
-
old new 16 16 difftool 17 17 disttool 18 dqstatstool 18 19 faketool 19 20 flatcorr
-
- Property svn:ignore
-
branches/tap_branches/ippTools/src/warptool.c
r25851 r27838 59 59 static bool importrunMode(pxConfig *config); 60 60 static bool runstateMode(pxConfig *config); 61 static bool listrunMode(pxConfig *config); 62 static bool setskyfiletoupdateMode(pxConfig *config); 61 63 62 64 static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile); … … 104 106 MODECASE(WARPTOOL_MODE_TOCLEANEDSKYFILE, tocleanedskyfileMode); 105 107 MODECASE(WARPTOOL_MODE_TOPURGEDSKYFILE, topurgedskyfileMode); 106 MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE, toscrubbedskyfileMode);108 MODECASE(WARPTOOL_MODE_TOSCRUBBEDSKYFILE, toscrubbedskyfileMode); 107 109 MODECASE(WARPTOOL_MODE_TOFULLSKYFILE, tofullskyfileMode); 108 110 MODECASE(WARPTOOL_MODE_UPDATESKYFILE, updateskyfileMode); … … 110 112 MODECASE(WARPTOOL_MODE_IMPORTRUN, importrunMode); 111 113 MODECASE(WARPTOOL_MODE_RUNSTATE, runstateMode); 114 MODECASE(WARPTOOL_MODE_LISTRUN, listrunMode); 115 MODECASE(WARPTOOL_MODE_SETSKYFILETOUPDATE, setskyfiletoupdateMode); 112 116 113 117 default: … … 247 251 PXOPT_COPY_F32(config->args, where, "-sun_angle_max", "rawExp.sun_angle", "<"); 248 252 PXOPT_COPY_STR(config->args, where, "-reduction", "fakeRun.reduction", "=="); 249 pxAddLabelSearchArgs (config, where, "-label", "fakeRun.label", "==");253 pxAddLabelSearchArgs (config, where, "-label", "fakeRun.label", "=="); // define using fake label 250 254 251 255 if (!psListLength(where->list) && 252 256 !psMetadataLookupBool(NULL, config->args, "-all")) { 253 257 psFree(where); 254 psError(PXTOOLS_ERR_ DATA, false, "search parameters are required");258 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required"); 255 259 return false; 256 260 } … … 279 283 psString query = pxDataGet("warptool_definebyquery.sql"); 280 284 if (!query) { 281 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");285 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 282 286 psFree(where); 283 287 return false; … … 383 387 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 384 388 PXOPT_COPY_STR(config->args, where, "-reduction", "warpRun.reduction", "=="); 385 PXOPT_COPY_STR(config->args, where, "-label", "warpRun.label", "==");386 389 PXOPT_COPY_STR(config->args, where, "-state", "warpRun.state", "=="); 387 PXOPT_COPY_STR(config->args, where, "-data_group","warpRun.data_group", "=="); 388 PXOPT_COPY_STR(config->args, where, "-dist_group","warpRun.dist_group", "=="); 390 PXOPT_COPY_STR(config->args, where, "-data_group","warpRun.data_group","=="); 391 PXOPT_COPY_STR(config->args, where, "-dist_group","warpRun.dist_group","=="); 392 pxAddLabelSearchArgs(config, where, "-label", "warpRun.label", "=="); 393 394 PXOPT_COPY_TIME(config->args, where, "-registered_begin", "warpRun.registered", ">="); 395 PXOPT_COPY_TIME(config->args, where, "-registered_end", "warpRun.registered", "<"); 396 397 PXOPT_LOOKUP_BOOL(destreaked, config->args, "-destreaked", false); 398 if (destreaked) { 399 psMetadataAddS64(where, PS_LIST_TAIL, "warpRun.magicked", PS_META_DUPLICATE_OK, ">", 0); 400 } 389 401 390 402 if (!psListLength(where->list)) { 391 403 psFree(where); 392 psError(PXTOOLS_ERR_ DATA, false, "search parameters are required");393 return false; 394 } 395 396 psString query = psStringCopy("UPDATE warpRun JOIN fakeRun USING(fake_id) JOIN camRun USING(cam_id) JOIN chipRun USING(chip_id) JOIN rawExp USING(exp_id)");404 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required"); 405 return false; 406 } 407 408 psString query = psStringCopy("UPDATE warpRun JOIN warpSkyfile USING(warp_id) JOIN fakeRun USING(fake_id) JOIN camRun USING(cam_id) JOIN chipRun USING(chip_id) JOIN rawExp USING(exp_id)"); 397 409 398 410 // pxUpdateRun gets parameters from config->args and updates 399 bool result = pxUpdateRun(config, where, &query, "warpRun", true);411 bool result = pxUpdateRun(config, where, &query, "warpRun", "warp_id", "warpSkyfile", true); 400 412 401 413 psFree(query); … … 419 431 psString query = pxDataGet("warptool_exp.sql"); 420 432 if (!query) { 421 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");433 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 422 434 return false; 423 435 } … … 493 505 psString query = pxDataGet("warptool_imfile.sql"); 494 506 if (!query) { 495 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");507 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 496 508 return false; 497 509 } … … 567 579 psString query = pxDataGet("warptool_tooverlap.sql"); 568 580 if (!query) { 569 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");581 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 570 582 return false; 571 583 } … … 676 688 PXOPT_COPY_STR(config->args, where, "-skycell_id", "warpSkyCellMap.skycell_id", "=="); 677 689 PXOPT_COPY_STR(config->args, where, "-tess_id", "warpSkyCellMap.tess_id", "=="); 678 // PXOPT_COPY_STR(config->args, where, "-label", "warpRun.label", "==");679 690 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "=="); 680 691 PXOPT_COPY_S16(config->args, where, "-fault", "warpSkyCellMap.fault", "=="); … … 683 694 && !psMetadataLookupBool(NULL, config->args, "-all")) { 684 695 psFree(where); 685 psError(PXTOOLS_ERR_ DATA, false, "search parameters are required");696 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required"); 686 697 return false; 687 698 } … … 691 702 psString query = pxDataGet("warptool_revertoverlap.sql"); 692 703 if (!query) { 693 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");704 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 694 705 if (!psDBRollback(config->dbh)) { 695 706 psError(PS_ERR_UNKNOWN, false, "database error"); … … 823 834 psString query = pxDataGet("warptool_scmap.sql"); 824 835 if (!query) { 825 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");836 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 826 837 return false; 827 838 } … … 896 907 psString query = pxDataGet("warptool_towarped.sql"); 897 908 if (!query) { 898 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 899 return false; 900 } 901 909 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 910 return false; 911 } 912 913 psString whereStr = psStringCopy(""); 902 914 if (psListLength(where->list)) { 903 915 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 904 psStringAppend(& query, "AND %s", whereClause);916 psStringAppend(&whereStr, "\n AND %s", whereClause); 905 917 psFree(whereClause); 906 918 } … … 908 920 909 921 // treat limit == 0 as "no limit" 922 psString limitString = psStringCopy("\n"); 910 923 if (limit) { 911 psString limitString = psDBGenerateLimitSQL(limit); 924 // We apply the limit to both sides of the UNION 925 // to avoid slow queries and to the query itself 926 // to satisfy the user's requested limit 927 psStringAppend(&limitString, "%s", psDBGenerateLimitSQL(limit)); 912 928 psStringAppend(&query, " %s", limitString); 913 psFree(limitString); 914 } 915 916 if (!p_psDBRunQuery(config->dbh, query)) { 929 } 930 931 #define TWO_WHERES 932 #ifdef TWO_WHERES 933 if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr, limitString)) { 917 934 psError(PS_ERR_UNKNOWN, false, "database error"); 918 935 psFree(query); 919 936 return false; 920 937 } 938 #else 939 if (!p_psDBRunQueryF(config->dbh, query, whereStr)) { 940 psError(PS_ERR_UNKNOWN, false, "database error"); 941 psFree(query); 942 return false; 943 } 944 #endif 945 psFree(limitString); 946 psFree(whereStr); 921 947 psFree(query); 922 948 … … 977 1003 PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false); 978 1004 PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false); 979 PXOPT_LOOKUP_S64(magicked, config->args, "- magicked", false, false);1005 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 980 1006 981 1007 // default values … … 1040 1066 psString query = pxDataGet("warptool_finished_run_select.sql"); 1041 1067 if (!query) { 1042 psError(PXTOOLS_ERR_ DATA, false, "failed to retrieve SQL statement");1068 psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement"); 1043 1069 return false; 1044 1070 } … … 1116 1142 psString query = pxDataGet("warptool_finished_run_select.sql"); 1117 1143 if (!query) { 1118 psError(PXTOOLS_ERR_ DATA, false, "failed to retrieve SQL statement");1144 psError(PXTOOLS_ERR_SYS, false, "failed to retrieve SQL statement"); 1119 1145 return false; 1120 1146 } … … 1194 1220 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs", ">="); 1195 1221 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 1196 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", " ==");1222 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 1197 1223 PXOPT_COPY_S64(config->args, where, "-magicked", "warpSkyfile.magicked", "=="); 1198 1224 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "LIKE"); 1225 pxAddLabelSearchArgs (config, where, "-data_group", "warpRun.data_group", "LIKE"); 1199 1226 1200 1227 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); … … 1206 1233 psString query = pxDataGet("warptool_warped.sql"); 1207 1234 if (!query) { 1208 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1235 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1209 1236 return false; 1210 1237 } … … 1214 1241 psString where2 = NULL; 1215 1242 if (!pxmagicAddWhere(config, &where2, "warpSkyfile")) { 1216 psError( PXTOOLS_ERR_DATA, false, "pxMagicAddWhere failed");1243 psError(psErrorCodeLast(), false, "pxMagicAddWhere failed"); 1217 1244 return false; 1218 1245 } 1219 1246 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 1220 psError( PXTOOLS_ERR_DATA, false, "pxSpaceAddWhere failed");1247 psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed"); 1221 1248 return false; 1222 1249 } … … 1224 1251 if (psListLength(where->list)) { 1225 1252 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1226 psStringAppend(&query, " AND%s", whereClause);1253 psStringAppend(&query, " WHERE %s", whereClause); 1227 1254 psFree(whereClause); 1228 1255 } else if (!all && !where2) { 1229 psError(PXTOOLS_ERR_DATA, true, "search parameters or -all are required"); 1230 return false; 1256 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 1257 return false; 1258 } 1259 1260 if (where2) { 1261 if (psListLength(where->list)) { 1262 psStringAppend(&query, " %s", where2); 1263 } else { 1264 psStringAppend(&query, " WHERE 1 %s", where2); 1265 } 1231 1266 } 1232 1267 psFree(where); 1233 1234 if (where2) {1235 psStringAppend(&query, " %s", where2);1236 }1237 1268 1238 1269 // treat limit == 0 as "no limit" … … 1294 1325 PXOPT_COPY_STR(config->args, where, "-tess_id", "warpSkyfile.tess_id", "=="); 1295 1326 PXOPT_COPY_STR(config->args, where, "-reduction", "rawExp.reduction", "=="); 1296 // PXOPT_COPY_STR(config->args, where, "-label", "warpRun.label", "==");1297 1327 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "=="); 1298 PXOPT_COPY_S16(config->args, where, "-fault", "warpSkyfile.fault", "==");1328 PXOPT_COPY_S16(config->args, where, "-fault", "warpSkyfile.fault", "=="); 1299 1329 1300 1330 if (!psListLength(where->list) 1301 1331 && !psMetadataLookupBool(NULL, config->args, "-all")) { 1302 1332 psFree(where); 1303 psError(PXTOOLS_ERR_DATA, false, "search parameters are required"); 1304 return false; 1305 } 1306 1307 if (!psDBTransaction(config->dbh)) { 1308 psError(PS_ERR_UNKNOWN, false, "database error"); 1309 psFree(where); 1310 return false; 1311 } 1312 1313 // Delete product 1314 int numDeleted; // Number deleted 1315 { 1316 psString query = pxDataGet("warptool_revertwarped_delete.sql"); 1317 if (!query) { 1318 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1319 if (!psDBRollback(config->dbh)) { 1320 psError(PS_ERR_UNKNOWN, false, "database error"); 1321 } 1322 return false; 1323 } 1324 1325 if (psListLength(where->list)) { 1326 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1327 psStringAppend(&query, " AND %s", whereClause); 1328 psFree(whereClause); 1329 } 1330 1331 if (!p_psDBRunQuery(config->dbh, query)) { 1332 psError(PS_ERR_UNKNOWN, false, "database error"); 1333 psFree(query); 1334 if (!psDBRollback(config->dbh)) { 1335 psError(PS_ERR_UNKNOWN, false, "database error"); 1336 } 1337 return false; 1338 } 1333 psError(PXTOOLS_ERR_CONFIG, false, "search parameters are required"); 1334 return false; 1335 } 1336 1337 psString query = pxDataGet("warptool_revertwarped_delete.sql"); 1338 if (!query) { 1339 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1340 return false; 1341 } 1342 psString query_updated = pxDataGet("warptool_revertwarped_updated.sql"); 1343 if (!query_updated) { 1344 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1345 return false; 1346 } 1347 1348 if (psListLength(where->list)) { 1349 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1350 psStringAppend(&query, " AND %s", whereClause); 1351 psStringAppend(&query_updated, " AND %s", whereClause); 1352 psFree(whereClause); 1353 } 1354 psFree(where); 1355 1356 if (!p_psDBRunQuery(config->dbh, query)) { 1357 psError(PS_ERR_UNKNOWN, false, "database error"); 1339 1358 psFree(query); 1340 1341 numDeleted = psDBAffectedRows(config->dbh); 1342 } 1359 return false; 1360 } 1361 psFree(query); 1362 1363 int numDeleted = psDBAffectedRows(config->dbh); 1343 1364 1344 1365 psLogMsg("warptool", PS_LOG_INFO, "Deleted %d warpSkyfiles", numDeleted); 1345 1366 1346 psFree(where); 1347 1348 if (!psDBCommit(config->dbh)) { 1349 psError(PS_ERR_UNKNOWN, false, "database error"); 1350 return false; 1351 } 1367 // fix any faulted warpSkyfiles in data_state 'update' 1368 1369 if (!p_psDBRunQuery(config->dbh, query_updated)) { 1370 psError(PS_ERR_UNKNOWN, false, "database error"); 1371 psFree(query_updated); 1372 return false; 1373 } 1374 psFree(query_updated); 1375 1376 int numUpdated = psDBAffectedRows(config->dbh); 1377 1378 psLogMsg("warptool", PS_LOG_INFO, "Updated %d warpSkyfiles", numUpdated); 1352 1379 1353 1380 return true; … … 1436 1463 psString query = pxDataGet("warptool_pendingcleanuprun.sql"); 1437 1464 if (!query) { 1438 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1465 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1439 1466 return false; 1440 1467 } … … 1499 1526 psString query = pxDataGet("warptool_pendingcleanupskyfile.sql"); 1500 1527 if (!query) { 1501 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1528 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1502 1529 return false; 1503 1530 } … … 1560 1587 psString query = pxDataGet("warptool_donecleanup.sql"); 1561 1588 if (!query) { 1562 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1589 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1563 1590 return false; 1564 1591 } … … 1648 1675 } 1649 1676 1650 // note only updates if warpRun.state = run_state 1651 // XXX note that we have removed this constraint for now 1652 if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, skycell_id)) { 1677 psString set_magicked_skyfile = psStringCopy(""); 1678 psString set_magicked_run = psStringCopy(""); 1679 if (!strcmp(data_state, "full")) { 1680 // magicked is only an argument for for -tofullskyfile 1681 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 1682 if (magicked) { 1683 psStringAppend(&set_magicked_skyfile, "\n , warpSkyfile.magicked = %" PRId64, magicked); 1684 psStringAppend(&set_magicked_run, "\n, warpRun.magicked = %" PRId64, magicked); 1685 } 1686 } else if (!strcmp(data_state, "cleaned") || !strcmp(data_state, "purged")) { 1687 // if magicked is currently nonzero set it to -1 1688 // Set warpRun.magicked when the first skyfile is cleaned 1689 psStringAppend(&set_magicked_skyfile, "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1), warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)"); 1690 } 1691 1692 if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_skyfile, warp_id, skycell_id)) { 1653 1693 psError(PS_ERR_UNKNOWN, false, "database error"); 1654 1694 // rollback … … 1660 1700 } 1661 1701 psFree(query); 1702 psFree(set_magicked_skyfile); 1662 1703 1663 1704 query = pxDataGet("warptool_change_run_state.sql"); 1664 if (!p_psDBRunQueryF(config->dbh, query, data_state, warp_id, data_state)) {1705 if (!p_psDBRunQueryF(config->dbh, query, data_state, set_magicked_run, warp_id, data_state)) { 1665 1706 // rollback 1666 1707 if (!psDBRollback(config->dbh)) { … … 1670 1711 return false; 1671 1712 } 1713 psFree(set_magicked_run); 1672 1714 1673 1715 if (!psDBCommit(config->dbh)) { … … 1707 1749 if (!state) { 1708 1750 psString query = pxDataGet("warptool_updateskyfile.sql"); 1709 1751 1710 1752 if (!p_psDBRunQueryF(config->dbh, query, fault, warp_id, skycell_id)) { 1711 1753 psError(PS_ERR_UNKNOWN, false, "database error"); … … 1716 1758 else { 1717 1759 if (strcmp(state,"error_cleaned") == 0) { 1718 change_skyfile_data_state(config,"error_cleaned","goto_cleaned");1760 change_skyfile_data_state(config,"error_cleaned","goto_cleaned"); 1719 1761 } 1720 1762 else if (strcmp(state, "error_scrubbed") == 0) { 1721 change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed");1763 change_skyfile_data_state(config,"error_scrubbed","goto_scrubbed"); 1722 1764 } 1723 1765 else if (strcmp(state, "error_purged") == 0) { 1724 change_skyfile_data_state(config,"error_purged","goto_purged");1766 change_skyfile_data_state(config,"error_purged","goto_purged"); 1725 1767 } 1726 1768 else { 1727 psError(PS_ERR_UNKNOWN, false, "unhandled state given");1728 return(false);1769 psError(PS_ERR_UNKNOWN, false, "unhandled state given"); 1770 return(false); 1729 1771 } 1730 1772 } … … 1772 1814 psString query = pxDataGet(tables[i].sqlFilename); 1773 1815 if (!query) { 1774 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1816 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1775 1817 return false; 1776 1818 } … … 1939 1981 psString query = pxDataGet("warptool_runstate.sql"); 1940 1982 if (!query) { 1941 psError(PXTOOLS_ERR_ DATA, false, "failed to retreive SQL statement");1983 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1942 1984 return false; 1943 1985 } … … 1948 1990 psFree(whereClause); 1949 1991 } else { 1950 psError(PXTOOLS_ERR_ DATA, true, "search parameters or -all are required");1992 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 1951 1993 return false; 1952 1994 } … … 2000 2042 return true; 2001 2043 } 2044 2045 static bool listrunMode(pxConfig *config) 2046 { 2047 PS_ASSERT_PTR_NON_NULL(config, false); 2048 2049 psMetadata *where = psMetadataAlloc(); 2050 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 2051 PXOPT_COPY_STR(config->args, where, "-tess_id", "warpRun.tess_id", "=="); 2052 PXOPT_COPY_STR(config->args, where, "-state", "warpRun.state", "=="); 2053 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "=="); 2054 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 2055 PXOPT_COPY_S64(config->args, where, "-fake_id", "fakeRun.fake_id", "=="); 2056 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs", ">="); 2057 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 2058 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 2059 PXOPT_COPY_S64(config->args, where, "-magicked", "warpRun.magicked", "=="); 2060 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "LIKE"); 2061 pxAddLabelSearchArgs (config, where, "-data_group", "warpRun.data_group", "LIKE"); 2062 pxAddLabelSearchArgs (config, where, "-dist_group", "warpRun.dist_group", "LIKE"); 2063 2064 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); 2065 2066 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 2067 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 2068 PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false); 2069 2070 // find all rawImfiles matching the default query 2071 psString query = pxDataGet("warptool_listrun.sql"); 2072 if (!query) { 2073 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2074 return false; 2075 } 2076 2077 // generate where strings for arguments that require extra processing 2078 // beyond PXOPT_COPY* 2079 psString where2 = NULL; 2080 if (!pxmagicAddWhere(config, &where2, "warpRun")) { 2081 psError(psErrorCodeLast(), false, "pxMagicAddWhere failed"); 2082 return false; 2083 } 2084 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 2085 psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed"); 2086 return false; 2087 } 2088 2089 if (psListLength(where->list)) { 2090 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 2091 psStringAppend(&query, " WHERE %s", whereClause); 2092 psFree(whereClause); 2093 } else if (!all && !where2) { 2094 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 2095 return false; 2096 } 2097 2098 if (where2) { 2099 if (psListLength(where->list)) { 2100 psStringAppend(&query, " %s", where2); 2101 } else { 2102 psStringAppend(&query, " WHERE 1 %s", where2); 2103 } 2104 } 2105 psFree(where); 2106 2107 if (pstamp_order) { 2108 // put runs in order of exposure id with newest chip Runs first 2109 // The postage stamp parser depends on this behavior 2110 psStringAppend(&query, "\nORDER by exp_id, warp_id DESC"); 2111 } 2112 2113 2114 // treat limit == 0 as "no limit" 2115 if (limit) { 2116 psString limitString = psDBGenerateLimitSQL(limit); 2117 psStringAppend(&query, " %s", limitString); 2118 psFree(limitString); 2119 } 2120 2121 if (!p_psDBRunQuery(config->dbh, query)) { 2122 psError(PS_ERR_UNKNOWN, false, "database error"); 2123 psFree(query); 2124 return false; 2125 } 2126 psFree(query); 2127 2128 psArray *output = p_psDBFetchResult(config->dbh); 2129 if (!output) { 2130 psErrorCode err = psErrorCodeLast(); 2131 switch (err) { 2132 case PS_ERR_DB_CLIENT: 2133 psError(PXTOOLS_ERR_SYS, false, "database error"); 2134 case PS_ERR_DB_SERVER: 2135 psError(PXTOOLS_ERR_PROG, false, "database error"); 2136 default: 2137 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2138 } 2139 2140 return false; 2141 } 2142 if (!psArrayLength(output)) { 2143 psTrace("warptool", PS_LOG_INFO, "no rows found"); 2144 psFree(output); 2145 return true; 2146 } 2147 2148 if (psArrayLength(output)) { 2149 // negative simple so the default is true 2150 if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) { 2151 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2152 psFree(output); 2153 return false; 2154 } 2155 } 2156 2157 psFree(output); 2158 2159 return true; 2160 } 2161 2162 // a very specfic function to queue a cleaned warpSkyfile to be updated 2163 static bool setskyfiletoupdateMode(pxConfig *config) 2164 { 2165 PS_ASSERT_PTR_NON_NULL(config, NULL); 2166 2167 PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false); 2168 PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false); 2169 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); 2170 2171 psString query = pxDataGet("warptool_setskyfiletoupdate.sql"); 2172 if (!query) { 2173 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2174 return false; 2175 } 2176 2177 psString setHook = psStringCopy(""); 2178 if (label) { 2179 psStringAppend(&setHook, "\n , warpRun.label = '%s'", label); 2180 } 2181 2182 if (skycell_id) { 2183 psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id); 2184 } 2185 2186 if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) { 2187 psError(PS_ERR_UNKNOWN, false, "database error"); 2188 return false; 2189 } 2190 2191 psFree(setHook); 2192 psFree(query); 2193 2194 return true; 2195 }
Note:
See TracChangeset
for help on using the changeset viewer.
