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

    r21402 r23352  
    5454static bool tofullskyfileMode(pxConfig *config);
    5555static bool updateskyfileMode(pxConfig *config);
     56static bool exportrunMode(pxConfig *config);
     57static bool importrunMode(pxConfig *config);
    5658
    5759static bool parseAndInsertSkyCellMap(pxConfig *config, const char *mapfile);
     
    99101        MODECASE(WARPTOOL_MODE_TOFULLSKYFILE,      tofullskyfileMode);
    100102        MODECASE(WARPTOOL_MODE_UPDATESKYFILE,      updateskyfileMode);
     103        MODECASE(WARPTOOL_MODE_EXPORTRUN,          exportrunMode);
     104        MODECASE(WARPTOOL_MODE_IMPORTRUN,          importrunMode);
    101105
    102106        default:
     
    16801684    return true;
    16811685}
     1686
     1687bool exportrunMode(pxConfig *config)
     1688{
     1689  typedef struct ExportTable {
     1690    char tableName[80];
     1691    char sqlFilename[80];
     1692  } ExportTable;
     1693
     1694    PS_ASSERT_PTR_NON_NULL(config, NULL);
     1695
     1696    PXOPT_LOOKUP_S64(det_id, config->args, "-warp_id", true,  false);
     1697    PXOPT_LOOKUP_STR(outfile, config->args, "-outfile", true,  false);
     1698    PXOPT_LOOKUP_U64(limit,   config->args, "-limit",   false, false);
     1699
     1700    FILE *f = fopen (outfile, "w");
     1701    if (f == NULL) {
     1702        psError(PS_ERR_UNKNOWN, false, "failed to open output file");
     1703        return false;
     1704    }
     1705
     1706    psMetadata *where = psMetadataAlloc();
     1707    PXOPT_COPY_S64(config->args, where, "-warp_id", "warp_id", "==");
     1708
     1709    ExportTable tables [] = {
     1710      {"warpRun", "warptool_export_run.sql"},
     1711      {"warpImfile", "warptool_export_imfile.sql"},
     1712      {"warpSkyfile", "warptool_export_skyfile.sql"},
     1713      {"warpSkyCellMap", "warptool_export_sky_cell_map.sql"},
     1714    };
     1715
     1716
     1717    for (int i=0; i < sizeof(tables); i++) {
     1718      psString query = pxDataGet(tables[i].sqlFilename);
     1719      if (!query) {
     1720          psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     1721          return false;
     1722      }
     1723
     1724      if (where && psListLength(where->list)) {
     1725          psString whereClause = psDBGenerateWhereSQL(where, NULL);
     1726          psStringAppend(&query, " %s", whereClause);
     1727          psFree(whereClause);
     1728      }
     1729
     1730      // treat limit == 0 as "no limit"
     1731      if (limit) {
     1732        psString limitString = psDBGenerateLimitSQL(limit);
     1733        psStringAppend(&query, " %s", limitString);
     1734        psFree(limitString);
     1735      }
     1736
     1737      if (!p_psDBRunQuery(config->dbh, query)) {
     1738        psError(PS_ERR_UNKNOWN, false, "database error");
     1739        psFree(query);
     1740        return false;
     1741      }
     1742      psFree(query);
     1743
     1744      psArray *output = p_psDBFetchResult(config->dbh);
     1745      if (!output) {
     1746          psError(PS_ERR_UNKNOWN, false, "database error");
     1747          return false;
     1748      }
     1749      if (!psArrayLength(output)) {
     1750        psTrace("regtool", PS_LOG_INFO, "no rows found");
     1751        psFree(output);
     1752        return true;
     1753      }
     1754
     1755      // we must write the export table in non-simple (true) format
     1756      if (!ippdbPrintMetadatas(f, output, tables[i].tableName, true)) {
     1757        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1758        psFree(output);
     1759        return false;
     1760      }
     1761      psFree(output);
     1762    }
     1763
     1764    fclose (f);
     1765
     1766    return true;
     1767}
     1768
     1769bool importrunMode(pxConfig *config)
     1770{
     1771  unsigned int nFail;
     1772
     1773  int numImportTables = 3;
     1774 
     1775  char tables[3] [80] = {"warpImfile", "warpSkyfile", "warpSkyCellMap"};
     1776
     1777  PS_ASSERT_PTR_NON_NULL(config, NULL);
     1778 
     1779  PXOPT_LOOKUP_STR(infile, config->args, "-infile", true,  false);
     1780
     1781  psMetadata *input = psMetadataConfigRead (NULL, &nFail, infile, false);
     1782
     1783  fprintf (stdout, "---- input ----\n");
     1784  psMetadataPrint (stderr, input, 1);
     1785
     1786  psMetadataItem *item = psMetadataLookup (input, "warpRun");
     1787  psAssert (item, "entry not in input?");
     1788  psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1789 
     1790  psMetadataItem *entry = psListGet (item->data.list, 0);
     1791  assert (entry);
     1792  assert (entry->type == PS_DATA_METADATA);
     1793  warpRunRow *warpRun = warpRunObjectFromMetadata (entry->data.md);
     1794  warpRunInsertObject (config->dbh, warpRun);
     1795
     1796  // fprintf (stdout, "---- warp run ----\n");
     1797  // psMetadataPrint (stderr, entry->data.md, 1);
     1798
     1799  for (int i = 0; i < numImportTables; i++) {
     1800    item = psMetadataLookup (input, tables[i]);
     1801    psAssert (item, "entry not in input?");
     1802    psAssert (item->type == PS_DATA_METADATA_MULTI, "entry not multi?");
     1803   
     1804    switch (i) {
     1805      case 0: 
     1806        for (int i = 0; i < item->data.list->n; i++) {
     1807          entry = psListGet (item->data.list, i);
     1808          assert (entry);
     1809          assert (entry->type == PS_DATA_METADATA);
     1810          warpImfileRow *warpImfile = warpImfileObjectFromMetadata (entry->data.md);
     1811          warpImfileInsertObject (config->dbh, warpImfile);
     1812
     1813          // fprintf (stdout, "---- row %d ----\n", i);
     1814          // psMetadataPrint (stderr, entry->data.md, 1);
     1815        }
     1816        break;
     1817       
     1818      case 1: 
     1819        for (int i = 0; i < item->data.list->n; i++) {
     1820          entry = psListGet (item->data.list, i);
     1821          assert (entry);
     1822          assert (entry->type == PS_DATA_METADATA);
     1823          warpSkyfileRow *warpSkyfile = warpSkyfileObjectFromMetadata (entry->data.md);
     1824          warpSkyfileInsertObject (config->dbh, warpSkyfile);
     1825
     1826          // fprintf (stdout, "---- row %d ----\n", i);
     1827          // psMetadataPrint (stderr, entry->data.md, 1);
     1828        }
     1829        break;
     1830       
     1831      case 2: 
     1832        for (int i = 0; i < item->data.list->n; i++) {
     1833          entry = psListGet (item->data.list, i);
     1834          assert (entry);
     1835          assert (entry->type == PS_DATA_METADATA);
     1836          warpSkyCellMapRow *warpSkyCellMap = warpSkyCellMapObjectFromMetadata (entry->data.md);
     1837          warpSkyCellMapInsertObject (config->dbh, warpSkyCellMap);
     1838
     1839          // fprintf (stdout, "---- row %d ----\n", i);
     1840          // psMetadataPrint (stderr, entry->data.md, 1);
     1841        }
     1842        break;
     1843    }
     1844  }
     1845  return true;
     1846}
Note: See TracChangeset for help on using the changeset viewer.