- 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/regtool.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/regtool.c
r21402 r23352 44 44 static bool updateprocessedexpMode(pxConfig *config); 45 45 static bool cleardupexpMode(pxConfig *config); 46 static bool exportrunMode(pxConfig *config); 47 static bool importrunMode(pxConfig *config); 46 48 47 49 # define MODECASE(caseName, func) \ … … 76 78 MODECASE(REGTOOL_MODE_UPDATEPROCESSEDEXP, updateprocessedexpMode); 77 79 MODECASE(REGTOOL_MODE_CLEARDUPEXP, cleardupexpMode); 80 MODECASE(CHIPTOOL_MODE_EXPORTRUN, exportrunMode); 81 MODECASE(CHIPTOOL_MODE_IMPORTRUN, importrunMode); 78 82 default: 79 83 psAbort("invalid option (this should not happen)"); … … 1107 1111 return true; 1108 1112 } 1113 1114 bool exportrunMode(pxConfig *config) 1115 { 1116 typedef struct ExportTable { 1117 char tableName[80]; 1118 char sqlFilename[80]; 1119 } ExportTable; 1120 1121 int numExportTables = 2; 1122 1123 PS_ASSERT_PTR_NON_NULL(config, NULL); 1124 1125 PXOPT_LOOKUP_S64(det_id, config->args, "-exp_id", true, false); 1126 PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true, false); 1127 PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false); 1128 1129 FILE *f = fopen (outfile, "w"); 1130 if (f == NULL) { 1131 psError(PS_ERR_UNKNOWN, false, "failed to open output file"); 1132 return false; 1133 } 1134 1135 psMetadata *where = psMetadataAlloc(); 1136 PXOPT_COPY_S64(config->args, where, "-exp_id", "exp_id", "=="); 1137 1138 ExportTable tables [] = { 1139 {"rawExp", "regtool_export_raw__exp.sql"}, 1140 {"rawImfile", "regtool_export_raw_imfile.sql"}, 1141 }; 1142 1143 for (int i=0; i < numExportTables; i++) { 1144 psString query = pxDataGet(tables[i].sqlFilename); 1145 if (!query) { 1146 psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement"); 1147 return false; 1148 } 1149 1150 if (where && psListLength(where->list)) { 1151 psString whereClause = psDBGenerateWhereSQL(where, NULL); 1152 psStringAppend(&query, " %s", whereClause); 1153 psFree(whereClause); 1154 } 1155 1156 // treat limit == 0 as "no limit" 1157 if (limit) { 1158 psString limitString = psDBGenerateLimitSQL(limit); 1159 psStringAppend(&query, " %s", limitString); 1160 psFree(limitString); 1161 } 1162 1163 if (!p_psDBRunQuery(config->dbh, query)) { 1164 psError(PS_ERR_UNKNOWN, false, "database error"); 1165 psFree(query); 1166 return false; 1167 } 1168 psFree(query); 1169 1170 psArray *output = p_psDBFetchResult(config->dbh); 1171 if (!output) { 1172 psError(PS_ERR_UNKNOWN, false, "database error"); 1173 return false; 1174 } 1175 if (!psArrayLength(output)) { 1176 psTrace("regtool", PS_LOG_INFO, "no rows found"); 1177 psFree(output); 1178 return true; 1179 } 1180 1181 // we must write the export table in non-simple (true) format 1182 if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) { 1183 psError(PS_ERR_UNKNOWN, false, "failed to print array"); 1184 psFree(output); 1185 return false; 1186 } 1187 psFree(output); 1188 } 1189 1190 fclose (f); 1191 1192 return true; 1193 } 1194 1195 bool importrunMode(pxConfig *config) 1196 { 1197 unsigned int nFail; 1198 1199 PS_ASSERT_PTR_NON_NULL(config, NULL); 1200 1201 PXOPT_LOOKUP_STR(infile, config->args, "-infile", true, false); 1202 1203 psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false); 1204 1205 fprintf (stdout, "---- input ----\n"); 1206 psMetadataPrint (stderr, input, 1); 1207 1208 psMetadataItem *item = psMetadataLookup (input, "rawExp"); 1209 psAssert (item, "entry not in input?"); 1210 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1211 1212 psMetadataItem *entry = psListGet (item->data.list, 0); 1213 assert (entry); 1214 assert (entry->type == PS_DATA_METADATA); 1215 rawExpRow *rawExp = rawExpObjectFromMetadata (entry->data.md); 1216 rawExpInsertObject (config->dbh, rawExp); 1217 1218 // fprintf (stdout, "---- raw exp ----\n"); 1219 // psMetadataPrint (stderr, entry->data.md, 1); 1220 1221 item = psMetadataLookup (input, "rawImfile"); 1222 psAssert (item, "entry not in input?"); 1223 psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?"); 1224 1225 for (int i = 0; i < item->data.list->n; i++) { 1226 psMetadataItem *entry = psListGet (item->data.list, i); 1227 assert (entry); 1228 assert (entry->type == PS_DATA_METADATA); 1229 rawImfileRow *rawImfile = rawImfileObjectFromMetadata (entry->data.md); 1230 rawImfileInsertObject (config->dbh, rawImfile); 1231 1232 // fprintf (stdout, "---- row %d ----\n", i); 1233 // psMetadataPrint (stderr, entry->data.md, 1); 1234 } 1235 1236 return true; 1237 } 1238
Note:
See TracChangeset
for help on using the changeset viewer.
