IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Mar 12, 2009, 3:42:47 PM (17 years ago)
Author:
giebink
Message:

added -exportrun and -importrun

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/src/flatcorr.c

    r21402 r23310  
    4646static bool inputexpMode(pxConfig *config);
    4747static bool inputimfileMode(pxConfig *config);
     48static bool exportrunMode(pxConfig *config);
     49static bool importrunMode(pxConfig *config);
    4850
    4951static bool setflatcorrRunState(pxConfig *config, psS64 corr_id, const char *state);
     
    7880        MODECASE(FLATCORR_MODE_INPUTEXP,       inputexpMode);
    7981        MODECASE(FLATCORR_MODE_INPUTIMFILE,    inputimfileMode);
     82        MODECASE(FLATCORR_MODE_EXPORTRUN,      exportrunMode);
     83        MODECASE(FLATCORR_MODE_IMPORTRUN,      importrunMode);
    8084        default:
    8185            psAbort("invalid option (this should not happen)");
     
    734738    return true;
    735739}
     740
     741bool exportrunMode(pxConfig *config)
     742{
     743  typedef struct ExportTable {
     744    char tableName[80];
     745    char sqlFilename[80];
     746  } ExportTable;
     747 
     748  int numExportTables = 3;
     749
     750  PS_ASSERT_PTR_NON_NULL(config, NULL);
     751
     752  PXOPT_LOOKUP_S64(det_id, config->args, "-corr_id", true,  false);
     753  PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     754  PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     755
     756  FILE *f = fopen (outfile, "w");
     757  if (f == NULL) {
     758    psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     759    return false;
     760  }
     761
     762  psMetadata *where = psMetadataAlloc();
     763  PXOPT_COPY_S64(config->args, where, "-coor_id", "corr_id", "==");
     764
     765  ExportTable tables [] = {
     766    {"flatcorrRun", "flatcorrtool_export_run.sql"},
     767    {"flatcorrCamLink", "flatcorrtool_export_cam_link.sql"},
     768    {"flatcorrChipLink", "flatcorr_export_chip_link.sql"},
     769  };
     770
     771  for (int i=0; i < numExportTables; i++) {
     772    psString query = pxDataGet(tables[i].sqlFilename);
     773    if (!query) {
     774      psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     775      return false;
     776    }
     777
     778    if (where && psListLength(where->list)) {
     779      psString whereClause = psDBGenerateWhereSQL(where, NULL);
     780      psStringAppend(&query, " %s", whereClause);
     781      psFree(whereClause);
     782    }
     783
     784    // treat limit == 0 as "no limit"
     785    if (limit) {
     786      psString limitString = psDBGenerateLimitSQL(limit);
     787      psStringAppend(&query, " %s", limitString);
     788      psFree(limitString);
     789    }
     790
     791    if (!p_psDBRunQuery(config->dbh, query)) {
     792      psError(PS_ERR_UNKNOWN, false, "database error");
     793      psFree(query);
     794      return false;
     795    }
     796    psFree(query);
     797
     798    psArray *output = p_psDBFetchResult(config->dbh);
     799    if (!output) {
     800      psError(PS_ERR_UNKNOWN, false, "database error");
     801      return false;
     802    }
     803    if (!psArrayLength(output)) {
     804      psTrace("regtool", PS_LOG_INFO, "no rows found");
     805      psFree(output);
     806      return true;
     807    }
     808
     809    // we must write the export table in non-simple (true) format
     810    if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     811      psError(PS_ERR_UNKNOWN, false, "failed to print array");
     812      psFree(output);
     813      return false;
     814    }
     815    psFree(output);
     816  }
     817
     818    fclose (f);
     819
     820    return true;
     821}
     822
     823bool importrunMode(pxConfig *config)
     824{
     825  unsigned int nFail;
     826  psMetadataItem *item, *entry;
     827 
     828  int numImportTables = 3;
     829 
     830  char tables[3] [80] = {"flatcorrRun", "flatcorrCamLink", "flatcorrChipLink"};
     831
     832  PS_ASSERT_PTR_NON_NULL(config, NULL);
     833 
     834  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     835
     836  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     837
     838  fprintf (stdout, "---- input ----\n");
     839  psMetadataPrint (stderr, input, 1);
     840
     841  for (int i = 0; i < numImportTables; i++) {
     842    item = psMetadataLookup (input, tables[i]);
     843    psAssert (item, "entry not in input?");
     844    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     845   
     846    entry = psListGet (item->data.list, 0);
     847    assert (entry);
     848    assert (entry->type == PS_DATA_METADATA);
     849 
     850    switch (i) {
     851      case 0:
     852      {
     853        flatcorrRunRow *flatcorrRun = flatcorrRunObjectFromMetadata (entry->data.md);
     854        flatcorrRunInsertObject (config->dbh, flatcorrRun);
     855
     856        // fprintf (stdout, "---- flatcorr run ----\n");
     857        // psMetadataPrint (stderr, entry->data.md, 1);
     858        break;
     859      }
     860      case 1:
     861      {
     862        flatcorrCamLinkRow *flatcorrCamLink = flatcorrCamLinkObjectFromMetadata (entry->data.md);
     863        flatcorrCamLinkInsertObject (config->dbh, flatcorrCamLink);
     864
     865        // fprintf (stdout, "---- flatcorr cam link ----\n");
     866        // psMetadataPrint (stderr, entry->data.md, 1);
     867        break;
     868      }
     869      case 2:
     870      {
     871        flatcorrChipLinkRow *flatcorrChipLink = flatcorrChipLinkObjectFromMetadata (entry->data.md);
     872        flatcorrChipLinkInsertObject (config->dbh, flatcorrChipLink);
     873
     874        // fprintf (stdout, "---- flatcorr chip link ----\n");
     875        // psMetadataPrint (stderr, entry->data.md, 1);
     876        break;
     877      }
     878    }
     879  }
     880  return true;
     881}
Note: See TracChangeset for help on using the changeset viewer.