IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Jun 30, 2008, 9:54:05 AM (18 years ago)
Author:
bills
Message:

added -completedreq mode to pstamptool

File:
1 edited

Legend:

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

    r18244 r18377  
    3535static bool moddatastoreMode(pxConfig *config);
    3636static bool addReqMode(pxConfig *config);
     37static bool completedReqMode(pxConfig *config);
    3738static bool listReqMode(pxConfig *config);
    3839static bool pendingReqMode(pxConfig *config);
     
    6667        MODECASE(PSTAMPTOOL_MODE_MODDATASTORE, moddatastoreMode);
    6768        MODECASE(PSTAMPTOOL_MODE_ADDREQ, addReqMode);
     69        MODECASE(PSTAMPTOOL_MODE_COMPLETEDREQ, completedReqMode);
    6870        MODECASE(PSTAMPTOOL_MODE_LISTREQ, listReqMode);
    6971        MODECASE(PSTAMPTOOL_MODE_PENDINGREQ, pendingReqMode);
     
    433435    return true;
    434436}
     437static bool completedReqMode(pxConfig *config)
     438{
     439    PS_ASSERT_PTR_NON_NULL(config, false);
     440
     441    bool status = false;
     442    psU64 limit = psMetadataLookupU64(&status, config->args, "-limit");
     443    if (!status) {
     444        psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -limit");
     445        return false;
     446    }
     447
     448    psString query =
     449        "SELECT * FROM pstampRequest WHERE state = 'run' AND "
     450            "(SELECT count(*) FROM pstampJob WHERE pstampJob.req_id = pstampRequest.req_id "
     451            " AND pstampJob.state != 'stop') = 0" ;
     452
     453    // treat limit == 0 as "no limit"
     454    if (limit) {
     455        psString limitString = psDBGenerateLimitSQL(limit);
     456        psStringAppend(&query, " %s", limitString);
     457        psFree(limitString);
     458    }
     459
     460    if (!p_psDBRunQuery(config->dbh, query)) {
     461        psError(PS_ERR_UNKNOWN, false, "database error");
     462        psFree(query);
     463        return false;
     464    }
     465
     466    psArray *output = p_psDBFetchResult(config->dbh);
     467    if (!output) {
     468        psError(PS_ERR_UNKNOWN, false, "database error");
     469        return false;
     470    }
     471
     472    if (!psArrayLength(output)) {
     473        psTrace("pstamptool", PS_LOG_INFO, "no rows found");
     474        psFree(output);
     475        return true;
     476    }
     477
     478    bool simple = false;
     479    {
     480        bool status = false;
     481        simple = psMetadataLookupBool(&status, config->args, "-simple");
     482        if (!status) {
     483            psError(PS_ERR_UNKNOWN, false, "failed to lookup value for -simple");
     484            psFree(output);
     485            return false;
     486        }
     487    }
     488
     489    // negative simple so the default is true
     490    if (!ippdbPrintMetadatas(stdout, output, "pstampRequest", !simple)) {
     491        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     492        psFree(output);
     493        return false;
     494    }
     495
     496    psFree(output);
     497
     498    return true;
     499}
     500
    435501static bool listReqMode(pxConfig *config)
    436502{
Note: See TracChangeset for help on using the changeset viewer.