IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 15188


Ignore:
Timestamp:
Oct 3, 2007, 12:55:03 PM (19 years ago)
Author:
jhoblitt
Message:

refactor -toprocess to work with the more rigerous pxTreeFromMetadata()

File:
1 edited

Legend:

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

    r14689 r15188  
    296296
    297297
    298 pxNode *pxTreeFromMagicTreeRows(psArray *rows)
    299 {
    300     psHash *nodeNames = psHashAlloc(10);
    301 
    302     for (long i = 0; i < psArrayLength(rows); i++) {
    303         magicTreeRow *row = rows->data[i];
    304         pxNode *parent = psHashLookup(nodeNames, row->dep);
    305         pxNode *node = pxNodeAlloc(row->node, parent);
    306         psHashAdd(nodeNames, row->node, node);
    307         psFree(node);
    308     }
    309 
    310     pxNode *root = psHashLookup(nodeNames, "root");
    311     psFree(nodeNames);
    312 
    313     return root;
    314 }
    315 
    316298static bool toprocessMode(pxConfig *config)
    317299{
     
    325307    }
    326308
    327     psMetadata *where = NULL;
     309    psString query = pxDataGet("magictool_toprocess.sql");
     310    if (!query) {
     311        psError(PXTOOLS_ERR_DATA, false, "failed to retreive SQL statement");
     312        return false;
     313    }
     314
     315
    328316    if (magic_id) {
    329317        psMetadata *where = psMetadataAlloc();
    330318        psMetadataAddS64(where, PS_LIST_TAIL, "magic_id", 0, "==", (psS64)atoll(magic_id));
    331     }
    332 
    333     psArray *rows = magicTreeSelectRowObjects(
    334         config->dbh,
    335         where,
    336         0 // limit
    337     );
    338     psFree(where);
    339 
    340     pxNode *root = pxTreeFromMagicTreeRows(rows);
    341     psFree(rows);
     319        psString whereClause = psDBGenerateWhereSQL(where, NULL);
     320        psFree(where);
     321        psStringAppend(&query, " %s", whereClause);
     322        psFree(whereClause);
     323    }
     324
     325    if (!p_psDBRunQuery(config->dbh, query)) {
     326        psError(PS_ERR_UNKNOWN, false, "database error");
     327        psFree(query);
     328        return false;
     329    }
     330    psFree(query);
     331
     332    psArray *output = p_psDBFetchResult(config->dbh);
     333    if (!output) {
     334        psErrorCode err = psErrorCodeLast();
     335        switch (err) {
     336            case PS_ERR_DB_CLIENT:
     337                psError(PXTOOLS_ERR_SYS, false, "database error");
     338            case PS_ERR_DB_SERVER:
     339                psError(PXTOOLS_ERR_PROG, false, "database error");
     340            default:
     341                psError(PXTOOLS_ERR_PROG, false, "unknown error");
     342        }
     343
     344        return false;
     345    }
     346    if (!psArrayLength(output)) {
     347        psTrace("magictool", PS_LOG_INFO, "no rows found");
     348        psFree(output);
     349        return true;
     350    }
     351
     352    psMetadata *deps = psMetadataAlloc();
     353    // convert the array of metadata into a single flat metadata
     354    for (long i = 0; i < psArrayLength(output); i++) {
     355        psMetadataCopy(deps, output->data[i]);
     356    }
     357    psFree(output);
     358
     359    pxNode *root = pxTreeFromMetadata(deps);
     360    psFree(deps);
     361
    342362    // silence unused warnings...
    343363    if (root) {}
Note: See TracChangeset for help on using the changeset viewer.