IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 33744 for trunk


Ignore:
Timestamp:
Apr 10, 2012, 10:13:17 AM (14 years ago)
Author:
bills
Message:

add sctool -list to list out skycells matching selection criteria

Location:
trunk/ippTools
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippTools/share/Makefile.am

    r33525 r33744  
    450450        vptool_pendingrun.sql \
    451451        vptool_processedcell.sql \
    452         vptool_revertrun.sql
     452        vptool_revertrun.sql \
     453        sctool_list.sql
    453454
  • trunk/ippTools/src/sctool.c

    r33720 r33744  
    3535
    3636static bool defineskycellsMode(pxConfig *config);
     37static bool listMode(pxConfig *config);
    3738
    3839# define MODECASE(caseName, func) \
     
    5354
    5455    switch (config->mode) {
    55         MODECASE(SCTOOL_MODE_DEFINESKYCELLS,         defineskycellsMode);
     56        MODECASE(SCTOOL_MODE_DEFINESKYCELLS,    defineskycellsMode);
     57        MODECASE(SCTOOL_MODE_LIST,              listMode);
    5658        default:
    5759            psAbort("invalid option (this should not happen)");
     
    131133    return true;
    132134}
     135static bool listMode(pxConfig *config)
     136{
     137    PS_ASSERT_PTR_NON_NULL(config, NULL);
     138
     139    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     140    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     141    psMetadata *where = psMetadataAlloc();
     142
     143    PXOPT_COPY_STR(config->args, where, "-skycell_id", "skycell.skycell_id", "LIKE");
     144    PXOPT_COPY_STR(config->args, where, "-tess_id", "skycell.tess_id", "LIKE");
     145    PXOPT_COPY_F32(config->args, where, "-ra_min", "skycell.radeg", ">=");
     146    PXOPT_COPY_F32(config->args, where, "-dec_min", "skycell.decdeg", ">=");
     147    PXOPT_COPY_F32(config->args, where, "-ra_max", "skycell.radeg", "<");
     148    PXOPT_COPY_F32(config->args, where, "-dec_max", "skycell.decdeg", "<");
     149    PXOPT_COPY_F32(config->args, where, "-glong_min", "skycell.glong", ">=");
     150    PXOPT_COPY_F32(config->args, where, "-glat_min", "skycell.glat", ">=");
     151    PXOPT_COPY_F32(config->args, where, "-glong_max", "skycell.glong", "<");
     152    PXOPT_COPY_F32(config->args, where, "-glat_max", "skycell.glat", "<");
     153
     154    psString query = pxDataGet("sctool_list.sql");
     155    if (!query) {
     156        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     157        return false;
     158    }
     159
     160    if (!psListLength(where->list)) {
     161        psError(PXTOOLS_ERR_CONFIG, false, "search paramters are required\n");
     162        psFree(where);
     163        return false;
     164    }
     165    psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     166    psStringAppend(&query, " WHERE %s", whereClause);
     167    psFree(whereClause);
     168
     169    if (limit) {
     170        psString limitString = psDBGenerateLimitSQL(limit);
     171        psStringAppend(&query, " %s", limitString);
     172        psFree(limitString);
     173    }
     174
     175    if (!p_psDBRunQuery(config->dbh, query)) {
     176        psError(PS_ERR_UNKNOWN, false, "database error");
     177        psFree(query);
     178        return false;
     179    }
     180    psFree(query);
     181
     182    psArray *output = p_psDBFetchResult(config->dbh);
     183    if (!output) {
     184        psError(PS_ERR_UNKNOWN, false, "database error");
     185        return false;
     186    }
     187
     188    if (!psArrayLength(output)) {
     189        psTrace("sctool", PS_LOG_INFO, "no rows found");
     190        psFree(output);
     191        return true;
     192    }
     193
     194    if (!ippdbPrintMetadatas(stdout, output, "skycell", !simple)) {
     195        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     196        psFree(output);
     197        return false;
     198    }
     199
     200    psFree(output);
     201
     202
     203    return true;
     204}
  • trunk/ippTools/src/sctool.h

    r33720 r33744  
    2626    SCTOOL_MODE_NONE      = 0x0,
    2727    SCTOOL_MODE_DEFINESKYCELLS,
     28    SCTOOL_MODE_LIST,
    2829} sctoolMode;
    2930
  • trunk/ippTools/src/sctoolConfig.c

    r33730 r33744  
    4848    psMetadataAddStr(defineskycellsArgs, PS_LIST_TAIL, "-input", 0, "file containing skycell data (required)", NULL);
    4949
     50    // -list
     51    psMetadata *listArgs = psMetadataAlloc();
     52    psMetadataAddStr(listArgs,  PS_LIST_TAIL, "-skycell_id",        0, "search by skycell_id (LIKE comparision)", NULL);
     53    psMetadataAddStr(listArgs,  PS_LIST_TAIL, "-tess_id",           0, "search by tess_id (LIKE comparision)", NULL);
     54    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-ra_min",            0, "search by right ascension (degrees)", NAN);
     55    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-dec_min",           0, "search by declination (degrees)", NAN);
     56    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-ra_max",            0, "search by right ascension (degrees)", NAN);
     57    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-dec_max",           0, "search by declination (degrees)", NAN);
     58    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-glong_min",         0, "search by galactic longitude (degrees)", NAN);
     59    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-glat_min",          0, "search by galactic latitude (degrees)", NAN);
     60    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-glong_max",         0, "search by galactic longitude (degrees)", NAN);
     61    psMetadataAddF32(listArgs,  PS_LIST_TAIL, "-glat_max",          0, "search by galactic latitude (degrees)", NAN);
     62    psMetadataAddU64(listArgs,  PS_LIST_TAIL, "-limit",             0, "limit result set to N items", 0);
     63    psMetadataAddBool(listArgs, PS_LIST_TAIL, "-simple",            0, "use the simple output format", false);
     64
    5065    psMetadata *argSets = psMetadataAlloc();
    5166    psMetadata *modes = psMetadataAlloc();
    5267
    53     PXOPT_ADD_MODE("-defineskycells",        "insert skycells from mdc file",       SCTOOL_MODE_DEFINESKYCELLS,        defineskycellsArgs);
     68    PXOPT_ADD_MODE("-defineskycells",        "insert skycells from mdc file",  SCTOOL_MODE_DEFINESKYCELLS,        defineskycellsArgs);
     69    PXOPT_ADD_MODE("-list",                   "list skycell parameters",       SCTOOL_MODE_LIST,        listArgs);
    5470
    5571    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.