Changeset 27737 for trunk/ippTools/src/warptool.c
- Timestamp:
- Apr 23, 2010, 11:19:20 AM (16 years ago)
- File:
-
- 1 edited
-
trunk/ippTools/src/warptool.c (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/warptool.c
r27503 r27737 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: … … 916 920 917 921 // treat limit == 0 as "no limit" 922 psString limitString = psStringCopy("\n"); 918 923 if (limit) { 919 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, psDBGenerateLimitSQL(limit)); 920 928 psStringAppend(&query, " %s", limitString); 921 psFree(limitString);922 } 923 929 } 930 931 #define TWO_WHERES 924 932 #ifdef TWO_WHERES 925 if (!p_psDBRunQueryF(config->dbh, query, whereStr, whereStr)) {933 if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr, limitString)) { 926 934 psError(PS_ERR_UNKNOWN, false, "database error"); 927 935 psFree(query); … … 935 943 } 936 944 #endif 945 psFree(limitString); 937 946 psFree(whereStr); 938 947 psFree(query); … … 994 1003 PXOPT_LOOKUP_STR(hostname, config->args, "-hostname", false, false); 995 1004 PXOPT_LOOKUP_F32(good_frac, config->args, "-good_frac", false, false); 996 PXOPT_LOOKUP_S64(magicked, config->args, "- magicked", false, false);1005 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 997 1006 998 1007 // default values … … 1242 1251 if (psListLength(where->list)) { 1243 1252 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 1244 psStringAppend(&query, " AND%s", whereClause);1253 psStringAppend(&query, " WHERE %s", whereClause); 1245 1254 psFree(whereClause); 1246 1255 } else if (!all && !where2) { … … 1248 1257 return false; 1249 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 } 1266 } 1250 1267 psFree(where); 1251 1252 if (where2) {1253 psStringAppend(&query, " %s", where2);1254 }1255 1268 1256 1269 // treat limit == 0 as "no limit" … … 1665 1678 } 1666 1679 1667 char *set_magicked_skyfile = "";1668 char *set_magicked_run = "";1680 psString set_magicked_skyfile = psStringCopy(""); 1681 psString set_magicked_run = psStringCopy(""); 1669 1682 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 1683 // magicked is only an argument for for -tofullskyfile 1684 PXOPT_LOOKUP_S64(magicked, config->args, "-set_magicked", false, false); 1685 if (magicked) { 1686 psStringAppend(&set_magicked_skyfile, "\n , warpSkyfile.magicked = %" PRId64, magicked); 1687 psStringAppend(&set_magicked_run, "\n, warpRun.magicked = %" PRId64, magicked); 1688 } 1673 1689 } 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)"; 1690 // if magicked is currently nonzero set it to -1 1691 // Set warpRun.magicked when the first skyfile is cleaned 1692 psStringAppend(&set_magicked_skyfile, "\n, warpSkyfile.magicked = IF(warpSkyfile.magicked = 0, 0, -1), warpRun.magicked = IF(warpRun.magicked = 0, 0, -1)"); 1676 1693 } 1677 1694 … … 1686 1703 } 1687 1704 psFree(query); 1705 psFree(set_magicked_skyfile); 1688 1706 1689 1707 query = pxDataGet("warptool_change_run_state.sql"); … … 1696 1714 return false; 1697 1715 } 1716 psFree(set_magicked_run); 1698 1717 1699 1718 if (!psDBCommit(config->dbh)) { … … 2026 2045 return true; 2027 2046 } 2047 2048 static bool listrunMode(pxConfig *config) 2049 { 2050 PS_ASSERT_PTR_NON_NULL(config, false); 2051 2052 psMetadata *where = psMetadataAlloc(); 2053 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpRun.warp_id", "=="); 2054 PXOPT_COPY_STR(config->args, where, "-tess_id", "warpRun.tess_id", "=="); 2055 PXOPT_COPY_STR(config->args, where, "-state", "warpRun.state", "=="); 2056 PXOPT_COPY_S64(config->args, where, "-exp_id", "rawExp.exp_id", "=="); 2057 PXOPT_COPY_STR(config->args, where, "-exp_name", "rawExp.exp_name", "=="); 2058 PXOPT_COPY_S64(config->args, where, "-fake_id", "fakeRun.fake_id", "=="); 2059 PXOPT_COPY_TIME(config->args, where, "-dateobs_begin", "rawExp.dateobs", ">="); 2060 PXOPT_COPY_TIME(config->args, where, "-dateobs_end", "rawExp.dateobs", "<="); 2061 PXOPT_COPY_STR(config->args, where, "-filter", "rawExp.filter", "LIKE"); 2062 PXOPT_COPY_S64(config->args, where, "-magicked", "warpRun.magicked", "=="); 2063 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "LIKE"); 2064 pxAddLabelSearchArgs (config, where, "-data_group", "warpRun.data_group", "LIKE"); 2065 pxAddLabelSearchArgs (config, where, "-dist_group", "warpRun.dist_group", "LIKE"); 2066 2067 PXOPT_LOOKUP_BOOL(all, config->args, "-all", false); 2068 2069 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 2070 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 2071 PXOPT_LOOKUP_BOOL(pstamp_order, config->args, "-pstamp_order", false); 2072 2073 // find all rawImfiles matching the default query 2074 psString query = pxDataGet("warptool_listrun.sql"); 2075 if (!query) { 2076 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2077 return false; 2078 } 2079 2080 // generate where strings for arguments that require extra processing 2081 // beyond PXOPT_COPY* 2082 psString where2 = NULL; 2083 if (!pxmagicAddWhere(config, &where2, "warpRun")) { 2084 psError(psErrorCodeLast(), false, "pxMagicAddWhere failed"); 2085 return false; 2086 } 2087 if (!pxspaceAddWhere(config, &where2, "rawExp")) { 2088 psError(psErrorCodeLast(), false, "pxSpaceAddWhere failed"); 2089 return false; 2090 } 2091 2092 if (psListLength(where->list)) { 2093 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 2094 psStringAppend(&query, " WHERE %s", whereClause); 2095 psFree(whereClause); 2096 } else if (!all && !where2) { 2097 psError(PXTOOLS_ERR_CONFIG, true, "search parameters or -all are required"); 2098 return false; 2099 } 2100 2101 if (where2) { 2102 if (psListLength(where->list)) { 2103 psStringAppend(&query, " %s", where2); 2104 } else { 2105 psStringAppend(&query, " WHERE 1 %s", where2); 2106 } 2107 } 2108 psFree(where); 2109 2110 if (pstamp_order) { 2111 // put runs in order of exposure id with newest chip Runs first 2112 // The postage stamp parser depends on this behavior 2113 psStringAppend(&query, "\nORDER by exp_id, warp_id DESC"); 2114 } 2115 2116 2117 // treat limit == 0 as "no limit" 2118 if (limit) { 2119 psString limitString = psDBGenerateLimitSQL(limit); 2120 psStringAppend(&query, " %s", limitString); 2121 psFree(limitString); 2122 } 2123 2124 if (!p_psDBRunQuery(config->dbh, query)) { 2125 psError(PS_ERR_UNKNOWN, false, "database error"); 2126 psFree(query); 2127 return false; 2128 } 2129 psFree(query); 2130 2131 psArray *output = p_psDBFetchResult(config->dbh); 2132 if (!output) { 2133 psErrorCode err = psErrorCodeLast(); 2134 switch (err) { 2135 case PS_ERR_DB_CLIENT: 2136 psError(PXTOOLS_ERR_SYS, false, "database error"); 2137 case PS_ERR_DB_SERVER: 2138 psError(PXTOOLS_ERR_PROG, false, "database error"); 2139 default: 2140 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 2141 } 2142 2143 return false; 2144 } 2145 if (!psArrayLength(output)) { 2146 psTrace("warptool", PS_LOG_INFO, "no rows found"); 2147 psFree(output); 2148 return true; 2149 } 2150 2151 if (psArrayLength(output)) { 2152 // negative simple so the default is true 2153 if (!ippdbPrintMetadatas(stdout, output, "warpRun", !simple)) { 2154 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 2155 psFree(output); 2156 return false; 2157 } 2158 } 2159 2160 psFree(output); 2161 2162 return true; 2163 } 2164 2165 // a very specfic function to queue a cleaned warpSkyfile to be updated 2166 static bool setskyfiletoupdateMode(pxConfig *config) 2167 { 2168 PS_ASSERT_PTR_NON_NULL(config, NULL); 2169 2170 PXOPT_LOOKUP_S64(warp_id, config->args, "-warp_id", true, false); 2171 PXOPT_LOOKUP_STR(skycell_id, config->args, "-skycell_id", false, false); 2172 PXOPT_LOOKUP_STR(label, config->args, "-set_label", false, false); 2173 2174 psString query = pxDataGet("warptool_setskyfiletoupdate.sql"); 2175 if (!query) { 2176 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 2177 return false; 2178 } 2179 2180 psString setHook = psStringCopy(""); 2181 if (label) { 2182 psStringAppend(&setHook, "\n , warpRun.label = '%s'", label); 2183 } 2184 2185 if (skycell_id) { 2186 psStringAppend(&query, " AND (warpSkyfile.skycell_id = '%s')", skycell_id); 2187 } 2188 2189 if (!p_psDBRunQueryF(config->dbh, query, setHook, warp_id)) { 2190 psError(PS_ERR_UNKNOWN, false, "database error"); 2191 return false; 2192 } 2193 2194 psFree(setHook); 2195 psFree(query); 2196 2197 return true; 2198 }
Note:
See TracChangeset
for help on using the changeset viewer.
