IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 32771


Ignore:
Timestamp:
Nov 22, 2011, 2:22:43 PM (14 years ago)
Author:
bills
Message:

add table pstampFile to keep track of nebulous files created as part
of postage stamp jobs

Location:
trunk/ippTools
Files:
1 added
5 edited

Legend:

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

    r32703 r32771  
    308308        pstamptool_getdependent.sql \
    309309        pstamptool_listjob.sql \
     310        pstamptool_listfile.sql \
    310311        pstamptool_pendingcleanup.sql \
    311312        pstamptool_pendingdependent.sql \
  • trunk/ippTools/share/pxadmin_create_tables.sql

    r32695 r32771  
    14791479) ENGINE=innodb DEFAULT CHARSET=latin1;
    14801480
     1481CREATE TABLE pstampFile (
     1482    file_id BIGINT AUTO_INCREMENT,
     1483    job_id BIGINT NOT NULL,
     1484    path VARCHAR(255),
     1485    PRIMARY KEY(file_id),
     1486    KEY(job_id)
     1487) ENGINE=innodb DEFAULT CHARSET=latin1;
     1488
    14811489CREATE TABLE pstampWebRequest (
    14821490        num BIGINT AUTO_INCREMENT,
  • trunk/ippTools/src/pstamptool.c

    r32360 r32771  
    5656static bool revertdependentMode(pxConfig *config);
    5757static bool getwebrequestnumMode(pxConfig *config);
     58static bool addfileMode(pxConfig *config);
     59static bool listfileMode(pxConfig *config);
    5860
    5961# define MODECASE(caseName, func) \
     
    103105        MODECASE(PSTAMPTOOL_MODE_REVERTDEPENDENT, revertdependentMode);
    104106        MODECASE(PSTAMPTOOL_MODE_GETWEBREQUESTNUM, getwebrequestnumMode);
     107        MODECASE(PSTAMPTOOL_MODE_ADDFILE, addfileMode);
     108        MODECASE(PSTAMPTOOL_MODE_LISTFILE, listfileMode);
    105109        default:
    106110            psAbort("invalid option (this should not happen)");
     
    14761480    return true;
    14771481}
     1482
     1483static bool addfileMode(pxConfig *config)
     1484{
     1485    PS_ASSERT_PTR_NON_NULL(config, false);
     1486
     1487    PXOPT_LOOKUP_S64(job_id, config->args, "-job_id", true, false);
     1488    PXOPT_LOOKUP_STR(path,   config->args, "-path",   true, false);
     1489
     1490    if (!pstampFileInsert(config->dbh,
     1491            0, // file_id
     1492            job_id,
     1493            path
     1494            )) {
     1495        psError(PS_ERR_UNKNOWN, false, "database error");
     1496        return false;
     1497    }
     1498
     1499    psU64 affected = psDBAffectedRows(config->dbh);
     1500    if (affected != 1) {
     1501        psError(PS_ERR_UNKNOWN, false,
     1502            "should have affected one row but %" PRIu64 " rows were modified",
     1503            affected);
     1504        return false;
     1505    }
     1506
     1507    psS64 file_id = psDBLastInsertID(config->dbh);
     1508    printf("%" PRId64 "\n", file_id);
     1509
     1510    return true;
     1511}
     1512
     1513static bool listfileMode(pxConfig *config)
     1514{
     1515    PS_ASSERT_PTR_NON_NULL(config, false);
     1516
     1517    psMetadata *where = psMetadataAlloc();
     1518    PXOPT_COPY_S64(config->args, where, "-job_id", "job_id", "==");
     1519    PXOPT_COPY_S64(config->args, where, "-req_id", "req_id", "==");
     1520    PXOPT_COPY_S64(config->args, where, "-file_id", "file_id", "==");
     1521
     1522    PXOPT_LOOKUP_U64(limit, config->args, "-limit", false, false);
     1523    PXOPT_LOOKUP_BOOL(simple, config->args, "-simple", false);
     1524
     1525    if (!psListLength(where->list)) {
     1526        fprintf(stderr, "search arguments are required\n");
     1527        exit (1);
     1528    }
     1529
     1530    psString query = pxDataGet("pstamptool_listfile.sql");
     1531    if (!query) {
     1532        psError(PXTOOLS_ERR_SYS, false, "failed to retreive SQL statement");
     1533        return false;
     1534    }
     1535
     1536    // use psDBGenerateWhereSQL because the SQL yields an intermediate table
     1537    if (psListLength(where->list)) {
     1538        psString whereClause = psDBGenerateWhereConditionSQL(where, NULL);
     1539        psStringAppend(&query, " WHERE %s", whereClause);
     1540        psFree(whereClause);
     1541    }
     1542    psFree(where);
     1543
     1544    // treat limit == 0 as "no limit"
     1545    if (limit) {
     1546        psString limitString = psDBGenerateLimitSQL(limit);
     1547        psStringAppend(&query, " %s", limitString);
     1548        psFree(limitString);
     1549    }
     1550
     1551    if (!p_psDBRunQuery(config->dbh, query)) {
     1552        psError(PS_ERR_UNKNOWN, false, "database error");
     1553        psFree(query);
     1554        return false;
     1555    }
     1556    psFree(query);
     1557
     1558    psArray *output = p_psDBFetchResult(config->dbh);
     1559    if (!output) {
     1560        psError(PS_ERR_UNKNOWN, false, "database error");
     1561        return false;
     1562    }
     1563    if (!psArrayLength(output)) {
     1564        psTrace("pstamptool", PS_LOG_INFO, "no rows found");
     1565        psFree(output);
     1566        return true;
     1567    }
     1568
     1569    // negative simple so the default is true
     1570    if (!ippdbPrintMetadatas(stdout, output, "pstampFile", !simple)) {
     1571        psError(PS_ERR_UNKNOWN, false, "failed to print array");
     1572        psFree(output);
     1573        return false;
     1574    }
     1575
     1576    psFree(output);
     1577
     1578    return true;
     1579}
     1580
  • trunk/ippTools/src/pstamptool.h

    r29248 r32771  
    5050    PSTAMPTOOL_MODE_REVERTDEPENDENT,
    5151    PSTAMPTOOL_MODE_GETWEBREQUESTNUM,
     52    PSTAMPTOOL_MODE_ADDFILE,
     53    PSTAMPTOOL_MODE_LISTFILE,
    5254} pstamptoolMode;
    5355
  • trunk/ippTools/src/pstamptoolConfig.c

    r30543 r32771  
    274274    psMetadata *modes = psMetadataAlloc();
    275275
     276    // -addfile
     277    psMetadata *addfileArgs = psMetadataAlloc();
     278    psMetadataAddS64(addfileArgs, PS_LIST_TAIL, "-job_id",       0, "define job ID for file (required)", 0);
     279    psMetadataAddStr(addfileArgs, PS_LIST_TAIL, "-path",         0, "define path for file (required)", NULL);
     280
     281    // -listfile
     282    psMetadata *listfileArgs = psMetadataAlloc();
     283    psMetadataAddS64(listfileArgs, PS_LIST_TAIL, "-file_id",     0, "select by file ID", 0);
     284    psMetadataAddS64(listfileArgs, PS_LIST_TAIL, "-job_id",      0, "select by job ID", 0);
     285    psMetadataAddS64(listfileArgs, PS_LIST_TAIL, "-req_id",      0, "select by request ID", 0);
     286    psMetadataAddU64(listfileArgs, PS_LIST_TAIL, "-limit",       0, "limit result set to N items", 0);
     287    psMetadataAddBool(listfileArgs, PS_LIST_TAIL, "-simple",     0, "use the simple output format", false);
     288
    276289    PXOPT_ADD_MODE("-addreq",          "", PSTAMPTOOL_MODE_ADDREQ,       addreqArgs);
    277290    PXOPT_ADD_MODE("-pendingreq",      "", PSTAMPTOOL_MODE_PENDINGREQ,   pendingreqArgs);
     
    302315    PXOPT_ADD_MODE("-project",         "", PSTAMPTOOL_MODE_PROJECT,    projectArgs);
    303316    PXOPT_ADD_MODE("-getwebrequestnum","", PSTAMPTOOL_MODE_GETWEBREQUESTNUM,   getwebrequestnumArgs);
     317    PXOPT_ADD_MODE("-addfile",         "", PSTAMPTOOL_MODE_ADDFILE,   addfileArgs);
     318    PXOPT_ADD_MODE("-listfile",        "", PSTAMPTOOL_MODE_LISTFILE,   listfileArgs);
    304319
    305320    if (!pxGetOptions(stderr, argc, argv, config, modes, argSets)) {
Note: See TracChangeset for help on using the changeset viewer.