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/camtool.c

    r21443 r23352  
    4444static bool pendingcleanupexpMode(pxConfig *config);
    4545static bool donecleanupMode(pxConfig *config);
     46static bool exportrunMode(pxConfig *config);
     47static bool importrunMode(pxConfig *config);
    4648
    4749# define MODECASE(caseName, func) \
     
    7779        MODECASE(CAMTOOL_MODE_PENDINGCLEANUPEXP,    pendingcleanupexpMode);
    7880        MODECASE(CAMTOOL_MODE_DONECLEANUP,          donecleanupMode);
     81        MODECASE(CAMTOOL_MODE_EXPORTRUN,            exportrunMode);
     82        MODECASE(CAMTOOL_MODE_IMPORTRUN,            importrunMode);
    7983        default:
    8084            psAbort("invalid option (this should not happen)");
     
    10811085    return true;
    10821086}
     1087
     1088bool 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
     1169bool 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.