IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Sep 25, 2008, 2:05:59 PM (18 years ago)
Author:
bills
Message:

add table pstampProject

File:
1 edited

Legend:

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

    r19219 r19760  
    4444static bool pendingJobMode(pxConfig *config);
    4545static bool updateJobMode(pxConfig *config);
     46static bool addProjectMode(pxConfig *config);
     47static bool projectMode(pxConfig *config);
     48static bool modProjectMode(pxConfig *config);
    4649
    4750# define MODECASE(caseName, func) \
     
    7780        MODECASE(PSTAMPTOOL_MODE_PENDINGJOB, pendingJobMode);
    7881        MODECASE(PSTAMPTOOL_MODE_UPDATEJOB, updateJobMode);
     82        MODECASE(PSTAMPTOOL_MODE_ADDPROJECT, addProjectMode);
     83        MODECASE(PSTAMPTOOL_MODE_MODPROJECT, modProjectMode);
     84        MODECASE(PSTAMPTOOL_MODE_PROJECT, projectMode);
    7985        default:
    8086            psAbort("invalid option (this should not happen)");
     
    718724    return true;
    719725}
     726static bool addProjectMode(pxConfig *config)
     727{
     728    PS_ASSERT_PTR_NON_NULL(config, false);
     729
     730    PXOPT_LOOKUP_STR(name,  config->args, "-name", true, false);
     731    PXOPT_LOOKUP_STR(state,  config->args, "-state", false, false);
     732    PXOPT_LOOKUP_STR(imagedb, config->args, "-imagedb", true, false);
     733    PXOPT_LOOKUP_STR(dvodb,  config->args, "-dvodb", false, false);
     734    PXOPT_LOOKUP_STR(camera, config->args, "-inst", true, false);
     735    PXOPT_LOOKUP_STR(telescope, config->args, "-telescope", true, false);
     736    PXOPT_LOOKUP_BOOL(need_magic, config->args, "-need_magic", false);
     737
     738    if (!pstampProjectInsert(config->dbh,
     739            0,
     740            name,
     741            state,
     742            imagedb,
     743            dvodb,
     744            camera,
     745            telescope,
     746            need_magic
     747        )) {
     748        psError(PS_ERR_UNKNOWN, false, "database error");
     749        return false;
     750    }
     751
     752    return true;
     753}
     754
     755static bool projectMode(pxConfig *config)
     756{
     757    PS_ASSERT_PTR_NON_NULL(config, false);
     758    psMetadata *where = psMetadataAlloc();
     759
     760    PXOPT_COPY_STR(config->args, where, "-name", "name", "==");
     761
     762    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     763
     764    psString query = pxDataGet("pstamptool_project.sql");
     765    if (!query) {
     766        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     767        return false;
     768    }
     769
     770    if (psListLength(where->list)) {
     771        psString whereClause = psDBGenerateWhereSQL(where, NULL);
     772        psStringAppend(&query, " %s", whereClause);
     773        psFree(whereClause);
     774    }
     775    psFree(where);
     776
     777    if (!p_psDBRunQuery(config->dbh, query)) {
     778        psError(PS_ERR_UNKNOWN, false, "database error");
     779        return false;
     780    }
     781
     782    psArray *output = p_psDBFetchResult(config->dbh);
     783    if (!output) {
     784        psError(PS_ERR_UNKNOWN, false, "database error");
     785        return false;
     786    }
     787    if (!psArrayLength(output)) {
     788        psTrace("pstamptool", PS_LOG_INFO, "no rows found");
     789        psFree(output);
     790        return true;
     791    }
     792
     793    // negative simple so the default is true
     794    if (!ippdbPrintMetadatas(stdout, output, "pstampDataStore", !simple)) {
     795        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     796        psFree(output);
     797        return false;
     798    }
     799
     800    psFree(output);
     801
     802    return true;
     803}
     804static bool modProjectMode(pxConfig *config)
     805{
     806    PS_ASSERT_PTR_NON_NULL(config, false);
     807
     808    PXOPT_LOOKUP_S64(proj_id,    config->args, "-proj_id", true, false);
     809    PXOPT_LOOKUP_STR(state,  config->args, "-state", true, false);
     810
     811    char *query = psStringCopy ("UPDATE pstampProject SET");
     812   
     813    psStringAppend(&query, " state = '%s'", state);
     814               
     815    psStringAppend(&query, " WHERE proj_id = %" PRId64, proj_id);
     816
     817    if (!p_psDBRunQuery(config->dbh, query)) {
     818        psError(PS_ERR_UNKNOWN, false, "database error");
     819        psFree(query);
     820        return false;
     821    }
     822
     823    psU64 affected = psDBAffectedRows(config->dbh);
     824    if (affected != 1) {
     825        psError(PS_ERR_UNKNOWN, false, "should have affected one row but %"
     826                                        PRIu64 " rows were modified", affected);
     827        return false;
     828    }
     829
     830    return true;
     831}
     832
Note: See TracChangeset for help on using the changeset viewer.