IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 17, 2009, 12:08:50 PM (17 years ago)
Author:
beaumont
Message:

merged with head

Location:
branches/cnb_branches/cnb_branch_20090301
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/cnb_branches/cnb_branch_20090301

  • branches/cnb_branches/cnb_branch_20090301/ippTools/src/regtool.c

    r21402 r23352  
    4444static bool updateprocessedexpMode(pxConfig *config);
    4545static bool cleardupexpMode(pxConfig *config);
     46static bool exportrunMode(pxConfig *config);
     47static bool importrunMode(pxConfig *config);
    4648
    4749# define MODECASE(caseName, func) \
     
    7678        MODECASE(REGTOOL_MODE_UPDATEPROCESSEDEXP,    updateprocessedexpMode);
    7779        MODECASE(REGTOOL_MODE_CLEARDUPEXP,           cleardupexpMode);
     80        MODECASE(CHIPTOOL_MODE_EXPORTRUN,            exportrunMode);
     81        MODECASE(CHIPTOOL_MODE_IMPORTRUN,            importrunMode);
    7882        default:
    7983            psAbort("invalid option (this should not happen)");
     
    11071111    return true;
    11081112}
     1113
     1114bool 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
     1195bool 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.