Changeset 24284 for trunk/ippTools/src
- Timestamp:
- May 30, 2009, 11:58:26 AM (17 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 3 edited
-
magicdstool.c (modified) (3 diffs)
-
magicdstool.h (modified) (1 diff)
-
magicdstoolConfig.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/magicdstool.c
r23974 r24284 38 38 static bool revertdestreakedfileMode(pxConfig *config); 39 39 static bool getskycellsMode(pxConfig *config); 40 static bool toremoveMode(pxConfig *config); 41 static bool torestoreMode(pxConfig *config); 40 42 41 43 static bool setmagicDSRunState(pxConfig *config, psS64 magic_id, const char *state); … … 68 70 MODECASE(MAGICDSTOOL_MODE_REVERTDESTREAKEDFILE,revertdestreakedfileMode); 69 71 MODECASE(MAGICDSTOOL_MODE_GETSKYCELLS, getskycellsMode); 72 MODECASE(MAGICDSTOOL_MODE_TOREMOVE, toremoveMode); 73 MODECASE(MAGICDSTOOL_MODE_TORESTORE, torestoreMode); 70 74 default: 71 75 psAbort("invalid option (this should not happen)"); … … 889 893 } 890 894 895 static bool toremoveMode(pxConfig *config) 896 { 897 PS_ASSERT_PTR_NON_NULL(config, false); 898 899 psMetadata *where = psMetadataAlloc(); 900 PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magic_ds_id", "=="); 901 PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "=="); 902 pxAddLabelSearchArgs (config, where, "-label", "label", "=="); 903 904 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 905 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 906 907 // look for "inputs" that need to processed 908 psString query = pxDataGet("magicdstool_toremove.sql"); 909 if (!query) { 910 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 911 return false; 912 } 913 914 if (psListLength(where->list)) { 915 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 916 psStringAppend(&query, " WHERE %s", whereClause); 917 psFree(whereClause); 918 } 919 psFree(where); 920 921 // treat limit == 0 as "no limit" 922 if (limit) { 923 psString limitString = psDBGenerateLimitSQL(limit); 924 psStringAppend(&query, " %s", limitString); 925 psFree(limitString); 926 } 927 928 if (!p_psDBRunQuery(config->dbh, query)) { 929 psError(PS_ERR_UNKNOWN, false, "database error"); 930 psFree(query); 931 return false; 932 } 933 psFree(query); 934 935 psArray *output = p_psDBFetchResult(config->dbh); 936 if (!output) { 937 psErrorCode err = psErrorCodeLast(); 938 switch (err) { 939 case PS_ERR_DB_CLIENT: 940 psError(PXTOOLS_ERR_SYS, false, "database error"); 941 case PS_ERR_DB_SERVER: 942 psError(PXTOOLS_ERR_PROG, false, "database error"); 943 default: 944 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 945 } 946 947 return false; 948 } 949 if (!psArrayLength(output)) { 950 psTrace("magicdstool", PS_LOG_INFO, "no rows found"); 951 psFree(output); 952 return true; 953 } 954 955 if (psArrayLength(output)) { 956 // negative simple so the default is true 957 if (!ippdbPrintMetadatas(stdout, output, "toremove", !simple)) { 958 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 959 psFree(output); 960 return false; 961 } 962 } 963 964 psFree(output); 965 966 return true; 967 } 968 static bool torestoreMode(pxConfig *config) 969 { 970 PS_ASSERT_PTR_NON_NULL(config, false); 971 972 psMetadata *where = psMetadataAlloc(); 973 PXOPT_COPY_S64(config->args, where, "-magic_ds_id", "magic_ds_id", "=="); 974 PXOPT_COPY_S64(config->args, where, "-magic_id", "magic_id", "=="); 975 pxAddLabelSearchArgs (config, where, "-label", "label", "=="); 976 977 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 978 PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false); 979 980 // look for "inputs" that need to processed 981 psString query = pxDataGet("magicdstool_torestore.sql"); 982 if (!query) { 983 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 984 return false; 985 } 986 987 if (psListLength(where->list)) { 988 psString whereClause = psDBGenerateWhereConditionSQL(where, NULL); 989 psStringAppend(&query, " WHERE %s", whereClause); 990 psFree(whereClause); 991 } 992 psFree(where); 993 994 // treat limit == 0 as "no limit" 995 if (limit) { 996 psString limitString = psDBGenerateLimitSQL(limit); 997 psStringAppend(&query, " %s", limitString); 998 psFree(limitString); 999 } 1000 1001 if (!p_psDBRunQuery(config->dbh, query)) { 1002 psError(PS_ERR_UNKNOWN, false, "database error"); 1003 psFree(query); 1004 return false; 1005 } 1006 psFree(query); 1007 1008 psArray *output = p_psDBFetchResult(config->dbh); 1009 if (!output) { 1010 psErrorCode err = psErrorCodeLast(); 1011 switch (err) { 1012 case PS_ERR_DB_CLIENT: 1013 psError(PXTOOLS_ERR_SYS, false, "database error"); 1014 case PS_ERR_DB_SERVER: 1015 psError(PXTOOLS_ERR_PROG, false, "database error"); 1016 default: 1017 psError(PXTOOLS_ERR_PROG, false, "unknown error"); 1018 } 1019 1020 return false; 1021 } 1022 if (!psArrayLength(output)) { 1023 psTrace("magicdstool", PS_LOG_INFO, "no rows found"); 1024 psFree(output); 1025 return true; 1026 } 1027 1028 if (psArrayLength(output)) { 1029 // negative simple so the default is true 1030 if (!ippdbPrintMetadatas(stdout, output, "torestore", !simple)) { 1031 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1032 psFree(output); 1033 return false; 1034 } 1035 } 1036 1037 psFree(output); 1038 1039 return true; 1040 } -
trunk/ippTools/src/magicdstool.h
r20764 r24284 32 32 MAGICDSTOOL_MODE_REVERTDESTREAKEDFILE, 33 33 MAGICDSTOOL_MODE_GETSKYCELLS, 34 MAGICDSTOOL_MODE_TOREMOVE, 35 MAGICDSTOOL_MODE_TORESTORE, 34 36 } MAGICDStoolMode; 35 37 -
trunk/ippTools/src/magicdstoolConfig.c
r23974 r24284 114 114 psMetadataAddBool(getskycellsArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 115 115 116 // -toremove 117 psMetadata *toremoveArgs = psMetadataAlloc(); 118 psMetadataAddS64(toremoveArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0); 119 psMetadataAddS64(toremoveArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0); 120 psMetadataAddStr(toremoveArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL); 121 psMetadataAddU64(toremoveArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0); 122 psMetadataAddBool(toremoveArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 123 124 // -torestore 125 psMetadata *torestoreArgs = psMetadataAlloc(); 126 psMetadataAddS64(torestoreArgs, PS_LIST_TAIL, "-magic_ds_id", 0, "search by magic Destreak ID", 0); 127 psMetadataAddS64(torestoreArgs, PS_LIST_TAIL, "-magic_id", 0, "search by magic ID", 0); 128 psMetadataAddStr(torestoreArgs, PS_LIST_TAIL, "-label", PS_META_DUPLICATE_OK, "define label", NULL); 129 psMetadataAddU64(torestoreArgs, PS_LIST_TAIL, "-limit", 0, "limit result set to N items", 0); 130 psMetadataAddBool(torestoreArgs, PS_LIST_TAIL, "-simple", 0, "use the simple output format", false); 131 116 132 psFree(now); 117 133 … … 133 149 PXOPT_ADD_MODE("-getskycells", "get skycell files ", 134 150 MAGICDSTOOL_MODE_GETSKYCELLS, getskycellsArgs); 151 PXOPT_ADD_MODE("-toremove", "backup images pending removal", 152 MAGICDSTOOL_MODE_TOREMOVE, toremoveArgs); 153 PXOPT_ADD_MODE("-torestore", "images pending restore of exicsed streak pixels", 154 MAGICDSTOOL_MODE_TORESTORE, torestoreArgs); 135 155 136 156 if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note:
See TracChangeset
for help on using the changeset viewer.
