- Timestamp:
- Mar 17, 2009, 12:08:50 PM (17 years ago)
- Location:
- branches/cnb_branches/cnb_branch_20090301
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
ippTools/src/camtool.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/cnb_branches/cnb_branch_20090301
-
Property svn:mergeinfo
set to (toggle deleted branches)
/trunk merged eligible /branches/eam_branches/eam_branch_20090303 23158-23228
-
Property svn:mergeinfo
set to (toggle deleted branches)
-
branches/cnb_branches/cnb_branch_20090301/ippTools/src/camtool.c
r21443 r23352 44 44 static bool pendingcleanupexpMode(pxConfig *config); 45 45 static bool donecleanupMode(pxConfig *config); 46 static bool exportrunMode(pxConfig *config); 47 static bool importrunMode(pxConfig *config); 46 48 47 49 # define MODECASE(caseName, func) \ … … 77 79 MODECASE(CAMTOOL_MODE_PENDINGCLEANUPEXP, pendingcleanupexpMode); 78 80 MODECASE(CAMTOOL_MODE_DONECLEANUP, donecleanupMode); 81 MODECASE(CAMTOOL_MODE_EXPORTRUN, exportrunMode); 82 MODECASE(CAMTOOL_MODE_IMPORTRUN, importrunMode); 79 83 default: 80 84 psAbort("invalid option (this should not happen)"); … … 1081 1085 return true; 1082 1086 } 1087 1088 bool exportrunMode(pxConfig *config) 1089 { 1090 typedef struct ExportTable { 1091 char tableName[80]; 1092 char sqlFilename[80]; 1093 } ExportTable; 1094 1095 int numExportTables = 2; 1096 1097 PS_ASSERT_PTR_NON_NULL(config, NULL); 1098 1099 PXOPT_LOOKUP_S64(det_id, config->args, "-cam_id", true, false); 1100 PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true, false); 1101 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1102 1103 FILE *f = fopen (outfile, "w"); 1104 if (f == NULL) { 1105 psError(PS_ERR_UNKNOWN, false, "failed to open output file"); 1106 return false; 1107 } 1108 1109 psMetadata *where = psMetadataAlloc(); 1110 PXOPT_COPY_S64(config->args, where, "-cam_id", "cam_id", "=="); 1111 1112 ExportTable tables [] = { 1113 {"camRun", "camtool_export_run.sql"}, 1114 {"camProcessedExp", "camtool_export_processed_exp.sql"}, 1115 }; 1116 1117 for (int i=0; i < numExportTables; i++) { 1118 psString query = pxDataGet(tables[i].sqlFilename); 1119 if (!query) { 1120 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1121 return false; 1122 } 1123 1124 if (where && psListLength(where->list)) { 1125 psString whereClause = psDBGenerateWhereSQL(where, NULL); 1126 psStringAppend(&query, " %s", whereClause); 1127 psFree(whereClause); 1128 } 1129 1130 // treat limit == 0 as "no limit" 1131 if (limit) { 1132 psString limitString = psDBGenerateLimitSQL(limit); 1133 psStringAppend(&query, " %s", limitString); 1134 psFree(limitString); 1135 } 1136 1137 if (!p_psDBRunQuery(config->dbh, query)) { 1138 psError(PS_ERR_UNKNOWN, false, "database error"); 1139 psFree(query); 1140 return false; 1141 } 1142 psFree(query); 1143 1144 psArray *output = p_psDBFetchResult(config->dbh); 1145 if (!output) { 1146 psError(PS_ERR_UNKNOWN, false, "database error"); 1147 return false; 1148 } 1149 if (!psArrayLength(output)) { 1150 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1151 psFree(output); 1152 return true; 1153 } 1154 1155 // we must write the export table in non-simple (true) format 1156 if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) { 1157 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1158 psFree(output); 1159 return false; 1160 } 1161 psFree(output); 1162 } 1163 1164 fclose (f); 1165 1166 return true; 1167 } 1168 1169 bool importrunMode(pxConfig *config) 1170 { 1171 unsigned int nFail; 1172 1173 PS_ASSERT_PTR_NON_NULL(config, NULL); 1174 1175 PXOPT_LOOKUP_STR(infile, config->args, "-infile", true, false); 1176 1177 psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false); 1178 1179 fprintf (stdout, "---- input ----\n"); 1180 psMetadataPrint (stderr, input, 1); 1181 1182 psMetadataItem *item = psMetadataLookup (input, "camRun"); 1183 psAssert (item, "entry not in input?"); 1184 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1185 1186 psMetadataItem *entry = psListGet (item->data.list, 0); 1187 assert (entry); 1188 assert (entry->type == PS_DATA_METADATA); 1189 camRunRow *camRun = camRunObjectFromMetadata (entry->data.md); 1190 camRunInsertObject (config->dbh, camRun); 1191 1192 // fprintf (stdout, "---- cam run ----\n"); 1193 // psMetadataPrint (stderr, entry->data.md, 1); 1194 1195 item = psMetadataLookup (input, "camProcessedImfile"); 1196 psAssert (item, "entry not in input?"); 1197 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1198 1199 for (int i = 0; i < item->data.list->n; i++) { 1200 psMetadataItem *entry = psListGet (item->data.list, i); 1201 assert (entry); 1202 assert (entry->type == PS_DATA_METADATA); 1203 camProcessedExpRow *camProcessedExp = camProcessedExpObjectFromMetadata (entry->data.md); 1204 camProcessedExpInsertObject (config->dbh, camProcessedExp); 1205 1206 // fprintf (stdout, "---- row %d ----\n", i); 1207 // psMetadataPrint (stderr, entry->data.md, 1); 1208 } 1209 1210 return true; 1211 }
Note:
See TracChangeset
for help on using the changeset viewer.
