Changeset 28003 for branches/pap/ippTools/src/warptool.c
- Timestamp:
- May 18, 2010, 12:49:05 PM (16 years ago)
- Location:
- branches/pap
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippTools/src/warptool.c (modified) (15 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/pap
- Property svn:mergeinfo changed
-
branches/pap/ippTools/src/warptool.c
r27503 r28003 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); … … 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: … … 244 248 PXOPT_COPY_F64(config->args, where, "-posang_max", "rawExp.posang", "<"); 245 249 PXOPT_COPY_STR(config->args, where, "-object", "rawExp.object", "=="); 250 PXOPT_COPY_STR(config->args, where, "-comment", "rawExp.comment", "LIKE"); 251 PXOPT_COPY_STR(config->args, where, "-obs_mode", "rawExp.obs_mode", "LIKE"); 246 252 PXOPT_COPY_F32(config->args, where, "-sun_angle_min", "rawExp.sun_angle", ">="); 247 253 PXOPT_COPY_F32(config->args, where, "-sun_angle_max", "rawExp.sun_angle", "<"); … … 269 275 PXOPT_LOOKUP_TIME(registered, config->args, "-registered", false, false); 270 276 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 277 PXOPT_LOOKUP_BOOL(pretend, config->args, "-pretend", false); 271 278 272 279 // check mode … … 306 313 if (!psArrayLength(output)) { 307 314 psTrace("warptool", PS_LOG_INFO, "no rows found"); 315 psFree(output); 316 return true; 317 } 318 319 if (pretend) { 320 // negative simple so the default is true 321 if (!ippdbPrintMetadatas(stdout, output, "rawExp", !simple)) { 322 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 323 psFree(output); 324 return false; 325 } 308 326 psFree(output); 309 327 return true; … … 916 934 917 935 // treat limit == 0 as "no limit" 936 psString limitString = psStringCopy("\n"); 918 937 if (limit) { 919 psString limitString = psDBGenerateLimitSQL(limit); 938 // We apply the limit to both sides of the UNION 939 // to avoid slow queries and to the query itself 940 // to satisfy the user's requested limit 941 psStringAppend(&limitString, "%s", psDBGenerateLimitSQL(limit)); 920 942 psStringAppend(&query, " %s", limitString); 921 psFree(limitString);922 } 923 943 } 944 945 #define TWO_WHERES 924 946 #ifdef TWO_WHERES 925 if (!p_psDBRunQueryF(config->dbh, query, whereStr, whereStr)) {947 if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr, limitString)) { 926 948 psError(PS_ERR_UNKNOWN, false, "database error"); 927 949 psFree(query); … … 935 957 } 936 958 #endif 959 psFree(limitString); 937 960 psFree(whereStr); 938 961 psFree(query); … … 994 1017 PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false); 995 1018 PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false); 996 PXOPT_LOOKUP_S64(magicked, config->args, "- magicked", false, false);1019 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 997 1020 998 1021 // default values … … 1242 1265 if (psListLength(where->list)) { 1243 1266 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1244 psStringAppend(&query, " AND%s", whereClause);1267 psStringAppend(&query, " WHERE %s", whereClause); 1245 1268 psFree(whereClause); 1246 1269 } else if (!all && !where2) { … … 1248 1271 return false; 1249 1272 } 1273 1274 if (where2) { 1275 if (psListLength(where->list)) { 1276 psStringAppend(&query, " %s", where2); 1277 } else { 1278 psStringAppend(&query, " WHERE 1 %s", where2); 1279 } 1280 } 1250 1281 psFree(where); 1251 1252 if (where2) {1253 psStringAppend(&query, " %s", where2);1254 }1255 1282 1256 1283 // treat limit == 0 as "no limit" … … 1322 1349 } 1323 1350 1324 if (!psDBTransaction(config->dbh)) { 1325 psError(PS_ERR_UNKNOWN, false, "database error"); 1326 psFree(where); 1327 return false; 1328 } 1329 1330 // Delete product 1331 int numDeleted; // Number deleted 1332 { 1333 psString query = pxDataGet("warptool_revertwarped_delete.sql"); 1334 if (!query) { 1335 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1336 if (!psDBRollback(config->dbh)) { 1337 psError(PS_ERR_UNKNOWN, false, "database error"); 1338 } 1339 return false; 1340 } 1341 1342 if (psListLength(where->list)) { 1343 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1344 psStringAppend(&query, " AND %s", whereClause); 1345 psFree(whereClause); 1346 } 1347 1348 if (!p_psDBRunQuery(config->dbh, query)) { 1349 psError(PS_ERR_UNKNOWN, false, "database error"); 1350 psFree(query); 1351 if (!psDBRollback(config->dbh)) { 1352 psError(PS_ERR_UNKNOWN, false, "database error"); 1353 } 1354 return false; 1355 } 1351 psString query = pxDataGet("warptool_revertwarped_delete.sql"); 1352 if (!query) { 1353 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1354 return false; 1355 } 1356 psString query_updated = pxDataGet("warptool_revertwarped_updated.sql"); 1357 if (!query_updated) { 1358 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 1359 return false; 1360 } 1361 1362 if (psListLength(where->list)) { 1363 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1364 psStringAppend(&query, " AND %s", whereClause); 1365 psStringAppend(&query_updated, " AND %s", whereClause); 1366 psFree(whereClause); 1367 } 1368 psFree(where); 1369 1370 if (!p_psDBRunQuery(config->dbh, query)) { 1371 psError(PS_ERR_UNKNOWN, false, "database error"); 1356 1372 psFree(query); 1357 1358 numDeleted = psDBAffectedRows(config->dbh); 1359 } 1373 return false; 1374 } 1375 psFree(query); 1376 1377 int numDeleted = psDBAffectedRows(config->dbh); 1360 1378 1361 1379 psLogMsg("warptool", PS_LOG_INFO, "Deleted %d warpSkyfiles", numDeleted); 1362 1380 1363 psFree(where); 1364 1365 if (!psDBCommit(config->dbh)) { 1366 psError(PS_ERR_UNKNOWN, false, "database error"); 1367 return false; 1368 } 1381 // fix any faulted warpSkyfiles in data_state 'update' 1382 1383 if (!p_psDBRunQuery(config->dbh, query_updated)) { 1384 psError(PS_ERR_UNKNOWN, false, "database error"); 1385 psFree(query_updated); 1386 return false; 1387 } 1388 psFree(query_updated); 1389 1390 int numUpdated = psDBAffectedRows(config->dbh); 1391 1392 psLogMsg("warptool", PS_LOG_INFO, "Updated %d warpSkyfiles", numUpdated); 1369 1393 1370 1394 return true; … … 1665 1689 } 1666 1690 1667 char *set_magicked_skyfile = "";1668 char *set_magicked_run = "";1691 psString set_magicked_skyfile = psStringCopy(""); 1692 psString set_magicked_run = psStringCopy(""); 1669 1693 if (!strcmp(data_state, "full")) { 1670 set_magicked_skyfile = "\n , warpSkyfile.magicked = IF((warpSkyfile.magicked < 0 AND chipRun.magicked = 0), warpSkyfile.magicked, chipRun.magicked)"; 1671 set_magicked_run = "\n, warpRun.magicked = IF((warpRun.magicked < 0 AND chipRun.magicked = 0), warpRun.magicked, chipRun.magicked)"; 1672 1694 // magicked is only an argument for for -tofullskyfile 1695 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 1696 if (magicked) { 1697 psStringAppend(&set_magicked_skyfile, "\n , warpSkyfile.magicked = %" PRId64, magicked); 1698 psStringAppend(&set_magicked_run, "\n, warpRun.magicked = %" PRId64, magicked); 1699 } 1673 1700 } else if (!strcmp(data_state, "cleaned") || !strcmp(data_state, "purged")) { 1674 set_magicked_skyfile = "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1)"; 1675 set_magicked_run = "\n, warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)"; 1701 // if magicked is currently nonzero set it to -1 1702 // Set warpRun.magicked when the first skyfile is cleaned 1703 psStringAppend(&set_magicked_skyfile, "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1), warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)"); 1676 1704 } 1677 1705 … … 1686 1714 } 1687 1715 psFree(query); 1716 psFree(set_magicked_skyfile); 1688 1717 1689 1718 query = pxDataGet("warptool_change_run_state.sql"); … … 1696 1725 return false; 1697 1726 } 1727 psFree(set_magicked_run); 1698 1728 1699 1729 if (!psDBCommit(config->dbh)) { … … 2026 2056 return true; 2027 2057 } 2058 2059 static bool listrunMode(pxConfig *config) 2060 { 2061 PS_ASSERT_PTR_NON_NULL(config, false); 2062 2063 psMetadata *where = psMetadataAlloc(); 2064 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 2065 PXOPT_COPY_STR(config->args, where, "-tess_id", "warpRun.tess_id", "=="); 2066 PXOPT_COPY_STR(config->args, where, "-state", "warpRun.state", "=="); 2067 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "=="); 2068 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 2069 PXOPT_COPY_S64(config->args, where, "-fake_id", "fakeRun.fake_id", "=="); 2070 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs", ">="); 2071 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 2072 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 2073 PXOPT_COPY_S64(config->args, where, "-magicked", "warpRun.magicked", "=="); 2074 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "LIKE"); 2075 pxAddLabelSearchArgs (config, where, "-data_group", "warpRun.data_group", "LIKE"); 2076 pxAddLabelSearchArgs (config, where, "-dist_group", "warpRun.dist_group", "LIKE"); 2077 2078 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); 2079 2080 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 2081 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 2082 PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false); 2083 2084 // find all rawImfiles matching the default query 2085 psString query = pxDataGet("warptool_listrun.sql"); 2086 if (!query) { 2087 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2088 return false; 2089 } 2090 2091 // generate where strings for arguments that require extra processing 2092 // beyond PXOPT_COPY* 2093 psString where2 = NULL; 2094 if (!pxmagicAddWhere(config, &where2, "warpRun")) { 2095 psError(psErrorCodeLast(), false, "pxMagicAddWhere failed"); 2096 return false; 2097 } 2098 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 2099 psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed"); 2100 return false; 2101 } 2102 2103 if (psListLength(where->list)) { 2104 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 2105 psStringAppend(&query, " WHERE %s", whereClause); 2106 psFree(whereClause); 2107 } else if (!all && !where2) { 2108 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 2109 return false; 2110 } 2111 2112 if (where2) { 2113 if (psListLength(where->list)) { 2114 psStringAppend(&query, " %s", where2); 2115 } else { 2116 psStringAppend(&query, " WHERE 1 %s", where2); 2117 } 2118 } 2119 psFree(where); 2120 2121 if (pstamp_order) { 2122 // put runs in order of exposure id with newest chip Runs first 2123 // The postage stamp parser depends on this behavior 2124 psStringAppend(&query, "\nORDER by exp_id, warp_id DESC"); 2125 } 2126 2127 2128 // treat limit == 0 as "no limit" 2129 if (limit) { 2130 psString limitString = psDBGenerateLimitSQL(limit); 2131 psStringAppend(&query, " %s", limitString); 2132 psFree(limitString); 2133 } 2134 2135 if (!p_psDBRunQuery(config->dbh, query)) { 2136 psError(PS_ERR_UNKNOWN, false, "database error"); 2137 psFree(query); 2138 return false; 2139 } 2140 psFree(query); 2141 2142 psArray *output = p_psDBFetchResult(config->dbh); 2143 if (!output) { 2144 psErrorCode err = psErrorCodeLast(); 2145 switch (err) { 2146 case PS_ERR_DB_CLIENT: 2147 psError(PXTOOLS_ERR_SYS, false, "database error"); 2148 case PS_ERR_DB_SERVER: 2149 psError(PXTOOLS_ERR_PROG, false, "database error"); 2150 default: 2151 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2152 } 2153 2154 return false; 2155 } 2156 if (!psArrayLength(output)) { 2157 psTrace("warptool", PS_LOG_INFO, "no rows found"); 2158 psFree(output); 2159 return true; 2160 } 2161 2162 if (psArrayLength(output)) { 2163 // negative simple so the default is true 2164 if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) { 2165 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2166 psFree(output); 2167 return false; 2168 } 2169 } 2170 2171 psFree(output); 2172 2173 return true; 2174 } 2175 2176 // a very specfic function to queue a cleaned warpSkyfile to be updated 2177 static bool setskyfiletoupdateMode(pxConfig *config) 2178 { 2179 PS_ASSERT_PTR_NON_NULL(config, NULL); 2180 2181 PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false); 2182 PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false); 2183 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); 2184 2185 psString query = pxDataGet("warptool_setskyfiletoupdate.sql"); 2186 if (!query) { 2187 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2188 return false; 2189 } 2190 2191 psString setHook = psStringCopy(""); 2192 if (label) { 2193 psStringAppend(&setHook, "\n , warpRun.label = '%s'", label); 2194 } 2195 2196 if (skycell_id) { 2197 psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id); 2198 } 2199 2200 if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) { 2201 psError(PS_ERR_UNKNOWN, false, "database error"); 2202 return false; 2203 } 2204 2205 psFree(setHook); 2206 psFree(query); 2207 2208 return true; 2209 }
Note:
See TracChangeset
for help on using the changeset viewer.
