Changeset 29717
- Timestamp:
- Nov 9, 2010, 12:31:36 PM (16 years ago)
- Location:
- trunk/ippTools
- Files:
-
- 1 added
- 2 edited
-
share/Makefile.am (modified) (1 diff)
-
share/warptool_towarped_labels.sql (added)
-
src/warptool.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/share/Makefile.am
r29671 r29717 385 385 warptool_tooverlap.sql \ 386 386 warptool_towarped.sql \ 387 warptool_towarped_labels.sql \ 387 388 warptool_updateskyfile.sql \ 388 389 warptool_warped.sql \ -
trunk/ippTools/src/warptool.c
r29416 r29717 924 924 925 925 psMetadata *where = psMetadataAlloc(); 926 926 927 PXOPT_COPY_S64(config->args, where, "-warp_id", "warpSkyCellMap.warp_id", "=="); 927 pxAddLabelSearchArgs (config, where, "-label", "warpRun.label", "==");928 928 929 929 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 930 930 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 931 931 932 // find all rawImfiles matching the default query 933 psString query = pxDataGet("warptool_towarped.sql"); 934 if (!query) { 932 // First find Label's with warpRuns in state new in priority order 933 psMetadata *labelWhere = psMetadataAlloc(); 934 pxAddLabelSearchArgs (config, labelWhere, "-label", "warpRun.label", "=="); 935 936 psString labelQuery = pxDataGet("warptool_towarped_labels.sql"); 937 if (!labelQuery) { 935 938 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 936 939 return false; 937 940 } 938 939 psString whereStr = psStringCopy(""); 941 psString labelWhereStr = psStringCopy(""); 942 if (psListLength(labelWhere->list)) { 943 psString whereClause = psDBGenerateWhereConditionSQL(labelWhere, NULL); 944 psStringAppend(&labelWhereStr, "\n AND %s", whereClause); 945 psFree(whereClause); 946 } 947 psFree(labelWhere); 948 949 if (!p_psDBRunQueryF(config->dbh, labelQuery, labelWhereStr)) { 950 psError(PS_ERR_UNKNOWN, false, "database error"); 951 psFree(labelQuery); 952 return false; 953 } 954 psFree(labelQuery); 955 psFree(labelWhereStr); 956 957 psArray *labelOutput = p_psDBFetchResult(config->dbh); 958 if (psArrayLength(labelOutput) == 0) { 959 psTrace("warptool", PS_LOG_INFO, "no labels with pending warps found."); 960 return true; 961 } 962 963 psString originalQuery = pxDataGet("warptool_towarped.sql"); 964 if (!originalQuery) { 965 psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement"); 966 return false; 967 } 968 969 psString whereStr = NULL; 940 970 if (psListLength(where->list)) { 941 971 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); … … 945 975 psFree(where); 946 976 947 // treat limit == 0 as "no limit" 948 psString limitString = psStringCopy("\nORDER BY priority DESC, warp_id"); 949 if (limit) { 950 // We apply the limit to both sides of the UNION to avoid slow queries 951 // and to the query itself to satisfy the user's requested limit 952 psStringAppend(&limitString, "%s", psDBGenerateLimitSQL(limit)); 953 psStringAppend(&query, " %s", limitString); 954 } 955 956 if (!p_psDBRunQueryF(config->dbh, query, whereStr, limitString, whereStr, limitString)) { 957 psError(PS_ERR_UNKNOWN, false, "database error"); 977 // Now loop over the labels and query each individually 978 for (long i = 0; i < psArrayLength(labelOutput); i++) { 979 psMetadata *labelRow = labelOutput->data[i]; 980 981 bool status; 982 psString label = psMetadataLookupStr(&status, labelRow, "label"); 983 984 psString query = psStringCopy(originalQuery); 985 986 // treat limit == 0 as "no limit" 987 psString limitString = psStringCopy(""); 988 if (limit) { 989 // We apply the limit to both sides of the UNION to avoid slow queries 990 // and to the query itself to satisfy the user's requested limit 991 psStringAppend(&limitString, "\n%s", psDBGenerateLimitSQL(limit)); 992 psStringAppend(&query, "%s", limitString); 993 } 994 psString thisWhere = NULL; 995 if (whereStr) { 996 psStringAppend(&thisWhere, whereStr); 997 } 998 psStringAppend(&thisWhere, "\nAND warpRun.label = '%s'", label); 999 1000 if (!p_psDBRunQueryF(config->dbh, query, thisWhere, limitString, thisWhere, limitString)) { 1001 psError(PS_ERR_UNKNOWN, false, "database error"); 1002 psFree(query); 1003 return false; 1004 } 1005 psFree(limitString); 1006 psFree(thisWhere); 958 1007 psFree(query); 959 return false; 960 } 961 psFree(limitString); 1008 1009 psArray *output = p_psDBFetchResult(config->dbh); 1010 if (!output) { 1011 psErrorCode err = psErrorCodeLast(); 1012 switch (err) { 1013 case PS_ERR_DB_CLIENT: 1014 psError(PXTOOLS_ERR_SYS, false, "database error"); 1015 case PS_ERR_DB_SERVER: 1016 psError(PXTOOLS_ERR_PROG, false, "database error"); 1017 default: 1018 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1019 } 1020 1021 return false; 1022 } 1023 long outputLength = psArrayLength(output); 1024 if (outputLength) { 1025 // negative simple so the default is true 1026 if (!ippdbPrintMetadatas(stdout, output, "warpPendingSkyCell", !simple)) { 1027 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1028 psFree(output); 1029 return false; 1030 } 1031 } else { 1032 psTrace("warptool", PS_LOG_INFO, "no rows found for %s", label); 1033 psFree(output); 1034 continue; 1035 } 1036 psFree(output); 1037 1038 if (limit) { 1039 limit -= outputLength; 1040 if (limit <= 0) { 1041 // All done 1042 break; 1043 } 1044 } 1045 } 1046 psFree(labelOutput); 962 1047 psFree(whereStr); 963 psFree(query); 964 965 psArray *output = p_psDBFetchResult(config->dbh); 966 if (!output) { 967 psErrorCode err = psErrorCodeLast(); 968 switch (err) { 969 case PS_ERR_DB_CLIENT: 970 psError(PXTOOLS_ERR_SYS, false, "database error"); 971 case PS_ERR_DB_SERVER: 972 psError(PXTOOLS_ERR_PROG, false, "database error"); 973 default: 974 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 975 } 976 977 return false; 978 } 979 if (!psArrayLength(output)) { 980 psTrace("warptool", PS_LOG_INFO, "no rows found"); 981 psFree(output); 982 return true; 983 } 984 985 if (psArrayLength(output)) { 986 // negative simple so the default is true 987 if (!ippdbPrintMetadatas(stdout, output, "warpPendingSkyCell", !simple)) { 988 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 989 psFree(output); 990 return false; 991 } 992 } 993 994 psFree(output); 1048 psFree(originalQuery); 995 1049 996 1050 return true;
Note:
See TracChangeset
for help on using the changeset viewer.
