IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 2, 2006, 1:49:11 PM (20 years ago)
Author:
jhoblitt
Message:

VERSION 0.0.39

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippdb/src/ippdb.c

    r9054 r9107  
    6363#define DETPROCESSEDIMFILE_TABLE_NAME "detProcessedImfile"
    6464#define DETPROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
     65#define DETPROCESSEDEXP_TABLE_NAME "detProcessedExp"
     66#define DETPROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
    6567#define DETSTACKEDIMFILE_TABLE_NAME "detStackedImfile"
    6668#define DETSTACKEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
     
    1430114303    return true;
    1430214304}
     14305static void detProcessedExpRowFree(detProcessedExpRow *object);
     14306
     14307detProcessedExpRow *detProcessedExpRowAlloc(psS32 det_id, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
     14308{
     14309    detProcessedExpRow *object;
     14310
     14311    object = psAlloc(sizeof(detProcessedExpRow));
     14312    psMemSetDeallocator(object, (psFreeFunc)detProcessedExpRowFree);
     14313
     14314    object->det_id = det_id;
     14315    object->exp_tag = psStringCopy(exp_tag);
     14316    object->recipe = psStringCopy(recipe);
     14317    object->bg = bg;
     14318    object->bg_stdev = bg_stdev;
     14319    object->bg_mean_stdev = bg_mean_stdev;
     14320    object->b1_uri = psStringCopy(b1_uri);
     14321    object->b2_uri = psStringCopy(b2_uri);
     14322
     14323    return object;
     14324}
     14325
     14326static void detProcessedExpRowFree(detProcessedExpRow *object)
     14327{
     14328    psFree(object->exp_tag);
     14329    psFree(object->recipe);
     14330    psFree(object->b1_uri);
     14331    psFree(object->b2_uri);
     14332}
     14333
     14334bool detProcessedExpCreateTable(psDB *dbh)
     14335{
     14336    psMetadata      *md;
     14337    bool            status;
     14338
     14339    md = psMetadataAlloc();
     14340    if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
     14341        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDEXP_INDEX_NAME);
     14342        psFree(md);
     14343        return false;
     14344    }
     14345    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     14346        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     14347        psFree(md);
     14348        return false;
     14349    }
     14350    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     14351        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
     14352        psFree(md);
     14353        return false;
     14354    }
     14355    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     14356        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     14357        psFree(md);
     14358        return false;
     14359    }
     14360    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     14361        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14362        psFree(md);
     14363        return false;
     14364    }
     14365    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     14366        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14367        psFree(md);
     14368        return false;
     14369    }
     14370    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     14371        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     14372        psFree(md);
     14373        return false;
     14374    }
     14375    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "64")) {
     14376        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     14377        psFree(md);
     14378        return false;
     14379    }
     14380    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "64")) {
     14381        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     14382        psFree(md);
     14383        return false;
     14384    }
     14385
     14386    status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
     14387
     14388    psFree(md);
     14389
     14390    return status;
     14391}
     14392
     14393bool detProcessedExpDropTable(psDB *dbh)
     14394{
     14395    return psDBDropTable(dbh, DETPROCESSEDEXP_TABLE_NAME);
     14396}
     14397
     14398bool detProcessedExpInsert(psDB * dbh, psS32 det_id, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
     14399{
     14400    psMetadata      *md;
     14401    bool            status;
     14402
     14403    md = psMetadataAlloc();
     14404    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     14405        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     14406        psFree(md);
     14407        return false;
     14408    }
     14409    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     14410        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
     14411        psFree(md);
     14412        return false;
     14413    }
     14414    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     14415        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     14416        psFree(md);
     14417        return false;
     14418    }
     14419    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     14420        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14421        psFree(md);
     14422        return false;
     14423    }
     14424    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     14425        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14426        psFree(md);
     14427        return false;
     14428    }
     14429    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     14430        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     14431        psFree(md);
     14432        return false;
     14433    }
     14434    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     14435        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     14436        psFree(md);
     14437        return false;
     14438    }
     14439    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     14440        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     14441        psFree(md);
     14442        return false;
     14443    }
     14444
     14445    status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
     14446    psFree(md);
     14447
     14448    return status;
     14449}
     14450
     14451long long detProcessedExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     14452{
     14453    long long       deleted = 0;
     14454
     14455    long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit);
     14456    if (count < 0) {
     14457        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp");
     14458        return count;
     14459
     14460        deleted += count;
     14461    }
     14462
     14463    return deleted;
     14464}
     14465bool detProcessedExpPop(psDB *dbh, psS32 *det_id, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
     14466{
     14467    psArray         *rowSet;
     14468    psMetadata      *row;
     14469    psMetadata      *popped;
     14470    long            deleted;
     14471    bool            status;
     14472    int             rowID;
     14473
     14474    rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, NULL, 1);
     14475    if (!rowSet) {
     14476        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);
     14477        psFree(rowSet);
     14478        return NULL;
     14479    }
     14480
     14481    row = psArrayGet(rowSet, 0);
     14482    psMemIncrRefCounter(row);
     14483    if (!row) {
     14484        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     14485        return NULL;
     14486    }
     14487    psFree(rowSet);
     14488
     14489    rowID = psMetadataLookupS32(&status, row, DETPROCESSEDEXP_INDEX_NAME);
     14490    if (!status) {
     14491        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);
     14492        psFree(row);
     14493        return NULL;
     14494    }
     14495
     14496    popped = psMetadataAlloc();
     14497    psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);
     14498
     14499    deleted = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, popped, 0);
     14500    if (deleted != 1) {
     14501        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
     14502        psFree(popped);
     14503        psFree(row);
     14504        return NULL;
     14505    }
     14506
     14507    psFree(popped);
     14508
     14509    *det_id = psMetadataLookupS32(&status, row, "det_id");
     14510    if (!status) {
     14511        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     14512        psFree(row);
     14513        return false;
     14514    }
     14515    *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");
     14516    if (!status) {
     14517        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
     14518        psFree(row);
     14519        return false;
     14520    }
     14521    *recipe = psMetadataLookupPtr(&status, row, "recipe");
     14522    if (!status) {
     14523        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
     14524        psFree(row);
     14525        return false;
     14526    }
     14527    *bg = psMetadataLookupF64(&status, row, "bg");
     14528    if (!status) {
     14529        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     14530        psFree(row);
     14531        return false;
     14532    }
     14533    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     14534    if (!status) {
     14535        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     14536        psFree(row);
     14537        return false;
     14538    }
     14539    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     14540    if (!status) {
     14541        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     14542        psFree(row);
     14543        return false;
     14544    }
     14545    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
     14546    if (!status) {
     14547        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     14548        psFree(row);
     14549        return false;
     14550    }
     14551    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
     14552    if (!status) {
     14553        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     14554        psFree(row);
     14555        return false;
     14556    }
     14557
     14558    psFree(row);
     14559
     14560    return true;
     14561}
     14562
     14563bool detProcessedExpInsertObject(psDB *dbh, detProcessedExpRow *object)
     14564{
     14565    return detProcessedExpInsert(dbh, object->det_id, object->exp_tag, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri);
     14566}
     14567
     14568bool detProcessedExpInsertObjects(psDB *dbh, psArray *objects)
     14569{
     14570    for (long i = 0; i < psArrayLength(objects); i++) {
     14571        if (!detProcessedExpInsertObject(dbh, objects->data[i])) {
     14572            return false;
     14573        }
     14574    }
     14575
     14576    return true;
     14577}
     14578
     14579detProcessedExpRow *detProcessedExpPopObject(psDB *dbh)
     14580{
     14581    psS32           det_id;
     14582    char            exp_tag[256];
     14583    char            recipe[256];
     14584    psF64           bg;
     14585    psF64           bg_stdev;
     14586    psF64           bg_mean_stdev;
     14587    char            b1_uri[256];
     14588    char            b2_uri[256];
     14589
     14590    if (!detProcessedExpPop(dbh, &det_id, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
     14591        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
     14592        return NULL;
     14593    }
     14594
     14595    return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
     14596}
     14597
     14598bool detProcessedExpInsertFits(psDB *dbh, const psFits *fits)
     14599{
     14600    psArray         *rowSet;
     14601
     14602    // move to (the first?) extension named  DETPROCESSEDEXP_TABLE_NAME
     14603    if (!psFitsMoveExtName(fits, DETPROCESSEDEXP_TABLE_NAME)) {
     14604        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETPROCESSEDEXP_TABLE_NAME);
     14605        return false;
     14606    }
     14607
     14608    // check HDU type
     14609    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     14610        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     14611        return false;
     14612    }
     14613
     14614    // read fits table
     14615    rowSet = psFitsReadTable(fits);
     14616    if (!rowSet) {
     14617        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     14618        psFree(rowSet);
     14619        return false;
     14620    }
     14621
     14622    if (!psDBInsertRows(dbh, DETPROCESSEDEXP_TABLE_NAME, rowSet)) {
     14623        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     14624        psFree(rowSet);
     14625        return false;
     14626    }
     14627
     14628    psFree(rowSet);
     14629
     14630    return true;
     14631}
     14632
     14633bool detProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
     14634{
     14635    char            query[MAX_STRING_LENGTH];
     14636
     14637    if (!detProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {
     14638        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     14639        return false;
     14640    }
     14641
     14642    // remove limit rows from the end of the database
     14643    if (snprintf(query, MAX_STRING_LENGTH,
     14644                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
     14645                DETPROCESSEDEXP_TABLE_NAME, DETPROCESSEDEXP_INDEX_NAME, limit) < 0) {
     14646        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
     14647        return false;
     14648    }
     14649           
     14650    if (!p_psDBRunQuery(dbh, query)) {
     14651        psError(PS_ERR_UNKNOWN, false, "database query failed");
     14652        return false;
     14653    }
     14654
     14655    return true;
     14656}
     14657
     14658bool detProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     14659{
     14660    psArray         *rowSet;
     14661    psU64           i;
     14662
     14663    rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit);
     14664    if (!rowSet) {
     14665        return false;
     14666    }
     14667
     14668    // strip index column
     14669    for (i = 0; i < rowSet->n; i++) {
     14670        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDEXP_INDEX_NAME)) {
     14671            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);
     14672            psFree(rowSet);
     14673            return false;
     14674        }
     14675    }
     14676
     14677    // output to fits
     14678    if (!psFitsWriteTable(fits, NULL, rowSet, DETPROCESSEDEXP_TABLE_NAME)) {
     14679        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     14680        psFree(rowSet);
     14681        return false;
     14682    }
     14683
     14684    psFree(rowSet);
     14685
     14686    return true;
     14687}
     14688
     14689psMetadata *detProcessedExpMetadataFromObject(const detProcessedExpRow *object)
     14690{
     14691    psMetadata      *md;
     14692
     14693    md = psMetadataAlloc();
     14694    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     14695        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     14696        psFree(md);
     14697        return NULL;
     14698    }
     14699    if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     14700        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
     14701        psFree(md);
     14702        return NULL;
     14703    }
     14704    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     14705        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     14706        psFree(md);
     14707        return NULL;
     14708    }
     14709    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     14710        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     14711        psFree(md);
     14712        return NULL;
     14713    }
     14714    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     14715        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     14716        psFree(md);
     14717        return NULL;
     14718    }
     14719    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     14720        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     14721        psFree(md);
     14722        return NULL;
     14723    }
     14724    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     14725        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     14726        psFree(md);
     14727        return NULL;
     14728    }
     14729    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     14730        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     14731        psFree(md);
     14732        return NULL;
     14733    }
     14734
     14735    return md;
     14736}
     14737
     14738detProcessedExpRow *detProcessedExpObjectFromMetadata(psMetadata *md)
     14739{
     14740    bool            status;
     14741    psS32           det_id;
     14742    char            *exp_tag;
     14743    char            *recipe;
     14744    psF64           bg;
     14745    psF64           bg_stdev;
     14746    psF64           bg_mean_stdev;
     14747    char            *b1_uri;
     14748    char            *b2_uri;
     14749
     14750    det_id = psMetadataLookupS32(&status, md, "det_id");
     14751    if (!status) {
     14752        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     14753        return false;
     14754    }
     14755    exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     14756    if (!status) {
     14757        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
     14758        return false;
     14759    }
     14760    recipe = psMetadataLookupPtr(&status, md, "recipe");
     14761    if (!status) {
     14762        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
     14763        return false;
     14764    }
     14765    bg = psMetadataLookupF64(&status, md, "bg");
     14766    if (!status) {
     14767        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     14768        return false;
     14769    }
     14770    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     14771    if (!status) {
     14772        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     14773        return false;
     14774    }
     14775    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     14776    if (!status) {
     14777        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     14778        return false;
     14779    }
     14780    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     14781    if (!status) {
     14782        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     14783        return false;
     14784    }
     14785    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     14786    if (!status) {
     14787        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     14788        return false;
     14789    }
     14790
     14791    return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
     14792}
     14793psArray *detProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     14794{
     14795    psArray         *rowSet;
     14796    psArray         *returnSet;
     14797    psU64           i;
     14798
     14799    rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit);
     14800    if (!rowSet) {
     14801        return NULL;
     14802    }
     14803
     14804    // strip index column
     14805    for (i = 0; i < rowSet->n; i++) {
     14806        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDEXP_INDEX_NAME)) {
     14807            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);
     14808            psFree(rowSet);
     14809            return false;
     14810        }
     14811    }
     14812
     14813    // convert psMetadata rows to row objects
     14814
     14815    returnSet = psArrayAlloc(rowSet->n);
     14816    returnSet->n = 0;
     14817
     14818    for (i = 0; i < rowSet->n; i++) {
     14819        detProcessedExpRow *object = detProcessedExpObjectFromMetadata(rowSet->data[i]);
     14820        psArrayAdd(returnSet, 0, object);
     14821        psFree(object);
     14822    }
     14823
     14824    psFree(rowSet);
     14825
     14826    return returnSet;
     14827}
     14828bool detProcessedExpDeleteObject(psDB *dbh, const detProcessedExpRow *object)
     14829{
     14830    psMetadata *where = detProcessedExpMetadataFromObject(object);
     14831    long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, 0);
     14832    psFree(where)
     14833    if (count < 0) {
     14834        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp");
     14835        return false;
     14836    }
     14837    if (count > 1) {
     14838        // XXX should this be a psAbort() instead?  It is possible that
     14839        // having an object match multiple rows was by design.
     14840        psError(PS_ERR_UNKNOWN, true, "detProcessedExpRow object matched more then one row.  Check your database schema");
     14841        return false;
     14842    }
     14843
     14844    return true;
     14845}
     14846long long detProcessedExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     14847{
     14848    long long       deleted = 0;
     14849
     14850    for (long long i = 0; i < objects->n; i++) {
     14851        detProcessedExpRow *object = objects->data[i];
     14852        psMetadata *where = detProcessedExpMetadataFromObject(object);
     14853        long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit);
     14854        psFree(where)
     14855        if (count < 0) {
     14856            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp");
     14857            return count;
     14858        }
     14859
     14860        deleted += count;
     14861    }
     14862
     14863    return deleted;
     14864}
     14865bool detProcessedExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     14866{
     14867    PS_ASSERT_PTR_NON_NULL(objects, false);
     14868
     14869    psMetadata *output = psMetadataAlloc();
     14870    for (long i = 0; i < psArrayLength(objects); i++) {
     14871        psMetadata *md = detProcessedExpMetadataFromObject(objects->data[i]);
     14872        if (!psMetadataAddMetadata(
     14873            output,
     14874            PS_LIST_TAIL,
     14875            DETPROCESSEDEXP_TABLE_NAME,
     14876            PS_META_DUPLICATE_OK,
     14877            NULL,
     14878            md
     14879        )) {
     14880            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     14881            psFree(md);
     14882            psFree(output);
     14883            return false;
     14884        }
     14885        psFree(md);
     14886    }
     14887
     14888    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     14889        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     14890        psFree(output);
     14891    }
     14892    psFree(output);
     14893
     14894    return true;
     14895}
    1430314896static void detStackedImfileRowFree(detStackedImfileRow *object);
    1430414897
    14305 detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool normalize)
     14898detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev)
    1430614899{
    1430714900    detStackedImfileRow *object;
     
    1431814911    object->bg_stdev = bg_stdev;
    1431914912    object->bg_mean_stdev = bg_mean_stdev;
    14320     object->normalize = normalize;
    1432114913
    1432214914    return object;
     
    1438114973        return false;
    1438214974    }
    14383     if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, false)) {
    14384         psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");
    14385         psFree(md);
    14386         return false;
    14387     }
    1438814975
    1438914976    status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
     
    1439914986}
    1440014987
    14401 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool normalize)
     14988bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev)
    1440214989{
    1440314990    psMetadata      *md;
     
    1444215029    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
    1444315030        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    14444         psFree(md);
    14445         return false;
    14446     }
    14447     if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, normalize)) {
    14448         psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");
    1444915031        psFree(md);
    1445015032        return false;
     
    1447115053    return deleted;
    1447215054}
    14473 bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, bool *normalize)
     15055bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev)
    1447415056{
    1447515057    psArray         *rowSet;
     
    1456315145        return false;
    1456415146    }
    14565     *normalize = psMetadataLookupBool(&status, row, "normalize");
    14566     if (!status) {
    14567         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item normalize");
    14568         psFree(row);
    14569         return false;
    14570     }
    1457115147
    1457215148    psFree(row);
     
    1457715153bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object)
    1457815154{
    14579     return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->normalize);
     15155    return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev);
    1458015156}
    1458115157
     
    1460115177    psF64           bg_stdev;
    1460215178    psF64           bg_mean_stdev;
    14603     bool            normalize;
    14604 
    14605     if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, &normalize)) {
     15179
     15180    if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) {
    1460615181        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
    1460715182        return NULL;
    1460815183    }
    1460915184
    14610     return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, normalize);
     15185    return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);
    1461115186}
    1461215187
     
    1474415319    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
    1474515320        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    14746         psFree(md);
    14747         return NULL;
    14748     }
    14749     if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, object->normalize)) {
    14750         psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");
    1475115321        psFree(md);
    1475215322        return NULL;
     
    1476715337    psF64           bg_stdev;
    1476815338    psF64           bg_mean_stdev;
    14769     bool            normalize;
    1477015339
    1477115340    det_id = psMetadataLookupS32(&status, md, "det_id");
     
    1480915378        return false;
    1481015379    }
    14811     normalize = psMetadataLookupBool(&status, md, "normalize");
    14812     if (!status) {
    14813         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item normalize");
    14814         return false;
    14815     }
    14816 
    14817     return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, normalize);
     15380
     15381    return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);
    1481815382}
    1481915383psArray *detStackedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Note: See TracChangeset for help on using the changeset viewer.