IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 20, 2006, 2:38:16 PM (20 years ago)
Author:
jhoblitt
Message:

VERSION 0.0.50

File:
1 edited

Legend:

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

    r9423 r9684  
    3131#include "ippdb.h"
    3232
    33 #define WEATHER_TABLE_NAME "weather"
    34 #define SKYP_TRANSPARENCY_TABLE_NAME "skyp_transparency"
    35 #define SKYP_ABSORPTION_TABLE_NAME "skyp_absorption"
    36 #define SKYP_EMISSION_TABLE_NAME "skyp_emission"
    37 #define DIMM_TABLE_NAME "dimm"
    38 #define SKYP_IR_TABLE_NAME "skyp_ir"
    39 #define DOME_TABLE_NAME "dome"
    40 #define TELESCOPE_TABLE_NAME "telescope"
    4133#define SUMMITEXP_TABLE_NAME "summitExp"
    4234#define PZPENDINGEXP_TABLE_NAME "pzPendingExp"
     
    228220}
    229221
    230 static void weatherRowFree(weatherRow *object);
    231 
    232 weatherRow *weatherRowAlloc(psF32 temp01, psF32 humi01, psF32 temp02, psF32 humi02, psF32 temp03, psF32 humi03, psF32 pressure)
    233 {
    234     weatherRow      *_object;
    235 
    236     _object = psAlloc(sizeof(weatherRow));
    237     psMemSetDeallocator(_object, (psFreeFunc)weatherRowFree);
    238 
    239     _object->temp01 = temp01;
    240     _object->humi01 = humi01;
    241     _object->temp02 = temp02;
    242     _object->humi02 = humi02;
    243     _object->temp03 = temp03;
    244     _object->humi03 = humi03;
    245     _object->pressure = pressure;
     222static void summitExpRowFree(summitExpRow *object);
     223
     224summitExpRow *summitExpRowAlloc(const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
     225{
     226    summitExpRow    *_object;
     227
     228    _object = psAlloc(sizeof(summitExpRow));
     229    psMemSetDeallocator(_object, (psFreeFunc)summitExpRowFree);
     230
     231    _object->exp_id = psStringCopy(exp_id);
     232    _object->camera = psStringCopy(camera);
     233    _object->telescope = psStringCopy(telescope);
     234    _object->exp_type = psStringCopy(exp_type);
     235    _object->uri = psStringCopy(uri);
    246236
    247237    return _object;
    248238}
    249239
    250 static void weatherRowFree(weatherRow *object)
    251 {
    252 }
    253 
    254 bool weatherCreateTable(psDB *dbh)
    255 {
    256     psMetadata      *md;
    257     bool            status;
    258 
    259     md = psMetadataAlloc();
    260     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, 0.0)) {
    261         psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
    262         psFree(md);
    263         return false;
    264     }
    265     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, 0.0)) {
    266         psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
    267         psFree(md);
    268         return false;
    269     }
    270     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, 0.0)) {
    271         psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
    272         psFree(md);
    273         return false;
    274     }
    275     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, 0.0)) {
    276         psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
    277         psFree(md);
    278         return false;
    279     }
    280     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, 0.0)) {
    281         psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
    282         psFree(md);
    283         return false;
    284     }
    285     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, 0.0)) {
    286         psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
    287         psFree(md);
    288         return false;
    289     }
    290     if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, 0.0)) {
    291         psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
    292         psFree(md);
    293         return false;
    294     }
    295 
    296     status = psDBCreateTable(dbh, WEATHER_TABLE_NAME, md);
     240static void summitExpRowFree(summitExpRow *object)
     241{
     242    psFree(object->exp_id);
     243    psFree(object->camera);
     244    psFree(object->telescope);
     245    psFree(object->exp_type);
     246    psFree(object->uri);
     247}
     248
     249bool summitExpCreateTable(psDB *dbh)
     250{
     251    psMetadata *md = psMetadataAlloc();
     252    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
     253        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
     254        psFree(md);
     255        return false;
     256    }
     257    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
     258        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
     259        psFree(md);
     260        return false;
     261    }
     262    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
     263        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
     264        psFree(md);
     265        return false;
     266    }
     267    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
     268        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
     269        psFree(md);
     270        return false;
     271    }
     272    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
     273        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     274        psFree(md);
     275        return false;
     276    }
     277
     278    bool status = psDBCreateTable(dbh, SUMMITEXP_TABLE_NAME, md);
    297279
    298280    psFree(md);
     
    301283}
    302284
    303 bool weatherDropTable(psDB *dbh)
    304 {
    305     return psDBDropTable(dbh, WEATHER_TABLE_NAME);
    306 }
    307 
    308 bool weatherInsert(psDB * dbh, psF32 temp01, psF32 humi01, psF32 temp02, psF32 humi02, psF32 temp03, psF32 humi03, psF32 pressure)
    309 {
    310     psMetadata      *md;
    311     bool            status;
    312 
    313     md = psMetadataAlloc();
    314     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, temp01)) {
    315         psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
    316         psFree(md);
    317         return false;
    318     }
    319     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, humi01)) {
    320         psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
    321         psFree(md);
    322         return false;
    323     }
    324     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, temp02)) {
    325         psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
    326         psFree(md);
    327         return false;
    328     }
    329     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, humi02)) {
    330         psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
    331         psFree(md);
    332         return false;
    333     }
    334     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, temp03)) {
    335         psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
    336         psFree(md);
    337         return false;
    338     }
    339     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, humi03)) {
    340         psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
    341         psFree(md);
    342         return false;
    343     }
    344     if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, pressure)) {
    345         psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
    346         psFree(md);
    347         return false;
    348     }
    349 
    350     status = psDBInsertOneRow(dbh, WEATHER_TABLE_NAME, md);
     285bool summitExpDropTable(psDB *dbh)
     286{
     287    return psDBDropTable(dbh, SUMMITEXP_TABLE_NAME);
     288}
     289
     290bool summitExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
     291{
     292    psMetadata *md = psMetadataAlloc();
     293    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
     294        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
     295        psFree(md);
     296        return false;
     297    }
     298    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
     299        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
     300        psFree(md);
     301        return false;
     302    }
     303    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
     304        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
     305        psFree(md);
     306        return false;
     307    }
     308    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
     309        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
     310        psFree(md);
     311        return false;
     312    }
     313    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
     314        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
     315        psFree(md);
     316        return false;
     317    }
     318
     319    bool status = psDBInsertOneRow(dbh, SUMMITEXP_TABLE_NAME, md);
    351320    psFree(md);
    352321
     
    354323}
    355324
    356 long long weatherDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     325long long summitExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    357326{
    358327    long long       deleted = 0;
    359328
    360     long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, limit);
     329    long long count = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, where, limit);
    361330    if (count < 0) {
    362         psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
     331        psError(PS_ERR_UNKNOWN, true, "failed to delete row from summitExp");
    363332        return count;
    364333
     
    368337    return deleted;
    369338}
    370 bool weatherInsertObject(psDB *dbh, weatherRow *object)
    371 {
    372     return weatherInsert(dbh, object->temp01, object->humi01, object->temp02, object->humi02, object->temp03, object->humi03, object->pressure);
    373 }
    374 
    375 bool weatherInsertObjects(psDB *dbh, psArray *objects)
     339bool summitExpInsertObject(psDB *dbh, summitExpRow *object)
     340{
     341    return summitExpInsert(dbh, object->exp_id, object->camera, object->telescope, object->exp_type, object->uri);
     342}
     343
     344bool summitExpInsertObjects(psDB *dbh, psArray *objects)
    376345{
    377346    for (long i = 0; i < psArrayLength(objects); i++) {
    378         if (!weatherInsertObject(dbh, objects->data[i])) {
     347        if (!summitExpInsertObject(dbh, objects->data[i])) {
    379348            return false;
    380349        }
     
    384353}
    385354
    386 bool weatherInsertFits(psDB *dbh, const psFits *fits)
     355bool summitExpInsertFits(psDB *dbh, const psFits *fits)
    387356{
    388357    psArray         *rowSet;
    389358
    390     // move to (the first?) extension named  WEATHER_TABLE_NAME
    391     if (!psFitsMoveExtName(fits, WEATHER_TABLE_NAME)) {
    392         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", WEATHER_TABLE_NAME);
     359    // move to (the first?) extension named  SUMMITEXP_TABLE_NAME
     360    if (!psFitsMoveExtName(fits, SUMMITEXP_TABLE_NAME)) {
     361        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SUMMITEXP_TABLE_NAME);
    393362        return false;
    394363    }
     
    408377    }
    409378
    410     if (!psDBInsertRows(dbh, WEATHER_TABLE_NAME, rowSet)) {
    411         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    412         psFree(rowSet);
    413         return false;
    414     }
    415 
    416     psFree(rowSet);
    417 
    418     return true;
    419 }
    420 
    421 bool weatherSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    422 {
    423     psArray         *rowSet;
    424 
    425     rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit);
    426     if (!rowSet) {
    427         return false;
    428     }
    429 
    430     // output to fits
    431     if (!psFitsWriteTable(fits, NULL, rowSet, WEATHER_TABLE_NAME)) {
    432         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    433         psFree(rowSet);
    434         return false;
    435     }
    436 
    437     psFree(rowSet);
    438 
    439     return true;
    440 }
    441 
    442 psMetadata *weatherMetadataFromObject(const weatherRow *object)
    443 {
    444     psMetadata      *md;
    445 
    446     md = psMetadataAlloc();
    447     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, object->temp01)) {
    448         psError(PS_ERR_UNKNOWN, false, "failed to add item temp01");
    449         psFree(md);
    450         return NULL;
    451     }
    452     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, object->humi01)) {
    453         psError(PS_ERR_UNKNOWN, false, "failed to add item humi01");
    454         psFree(md);
    455         return NULL;
    456     }
    457     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, object->temp02)) {
    458         psError(PS_ERR_UNKNOWN, false, "failed to add item temp02");
    459         psFree(md);
    460         return NULL;
    461     }
    462     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, object->humi02)) {
    463         psError(PS_ERR_UNKNOWN, false, "failed to add item humi02");
    464         psFree(md);
    465         return NULL;
    466     }
    467     if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, object->temp03)) {
    468         psError(PS_ERR_UNKNOWN, false, "failed to add item temp03");
    469         psFree(md);
    470         return NULL;
    471     }
    472     if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, object->humi03)) {
    473         psError(PS_ERR_UNKNOWN, false, "failed to add item humi03");
    474         psFree(md);
    475         return NULL;
    476     }
    477     if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, object->pressure)) {
    478         psError(PS_ERR_UNKNOWN, false, "failed to add item pressure");
    479         psFree(md);
    480         return NULL;
    481     }
    482 
    483     return md;
    484 }
    485 
    486 weatherRow *weatherObjectFromMetadata(psMetadata *md)
    487 {
    488     bool            status;
    489     psF32           temp01;
    490     psF32           humi01;
    491     psF32           temp02;
    492     psF32           humi02;
    493     psF32           temp03;
    494     psF32           humi03;
    495     psF32           pressure;
    496 
    497     temp01 = psMetadataLookupF32(&status, md, "temp01");
    498     if (!status) {
    499         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp01");
    500         return false;
    501     }
    502     humi01 = psMetadataLookupF32(&status, md, "humi01");
    503     if (!status) {
    504         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi01");
    505         return false;
    506     }
    507     temp02 = psMetadataLookupF32(&status, md, "temp02");
    508     if (!status) {
    509         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp02");
    510         return false;
    511     }
    512     humi02 = psMetadataLookupF32(&status, md, "humi02");
    513     if (!status) {
    514         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi02");
    515         return false;
    516     }
    517     temp03 = psMetadataLookupF32(&status, md, "temp03");
    518     if (!status) {
    519         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp03");
    520         return false;
    521     }
    522     humi03 = psMetadataLookupF32(&status, md, "humi03");
    523     if (!status) {
    524         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi03");
    525         return false;
    526     }
    527     pressure = psMetadataLookupF32(&status, md, "pressure");
    528     if (!status) {
    529         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pressure");
    530         return false;
    531     }
    532 
    533     return weatherRowAlloc(temp01, humi01, temp02, humi02, temp03, humi03, pressure);
    534 }
    535 psArray *weatherSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    536 {
    537     psArray         *rowSet;
    538     psArray         *returnSet;
    539     psU64           i;
    540 
    541     rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit);
    542     if (!rowSet) {
    543         return NULL;
    544     }
    545 
    546     // convert psMetadata rows to row objects
    547 
    548     returnSet = psArrayAlloc(rowSet->n);
    549     returnSet->n = 0;
    550 
    551     for (i = 0; i < rowSet->n; i++) {
    552         weatherRow *object = weatherObjectFromMetadata(rowSet->data[i]);
    553         psArrayAdd(returnSet, 0, object);
    554         psFree(object);
    555     }
    556 
    557     psFree(rowSet);
    558 
    559     return returnSet;
    560 }
    561 bool weatherDeleteObject(psDB *dbh, const weatherRow *object)
    562 {
    563     psMetadata *where = weatherMetadataFromObject(object);
    564     long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, 0);
    565     psFree(where)
    566     if (count < 0) {
    567         psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
    568         return false;
    569     }
    570     if (count > 1) {
    571         // XXX should this be a psAbort() instead?  It is possible that
    572         // having an object match multiple rows was by design.
    573         psError(PS_ERR_UNKNOWN, true, "weatherRow object matched more then one row.  Check your database schema");
    574         return false;
    575     }
    576 
    577     return true;
    578 }
    579 long long weatherDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    580 {
    581     long long       deleted = 0;
    582 
    583     for (long long i = 0; i < objects->n; i++) {
    584         weatherRow *object = objects->data[i];
    585         psMetadata *where = weatherMetadataFromObject(object);
    586         long long count = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, where, limit);
    587         psFree(where)
    588         if (count < 0) {
    589             psError(PS_ERR_UNKNOWN, true, "failed to delete row from weather");
    590             return count;
    591         }
    592 
    593         deleted += count;
    594     }
    595 
    596     return deleted;
    597 }
    598 bool weatherPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    599 {
    600     PS_ASSERT_PTR_NON_NULL(objects, false);
    601 
    602     psMetadata *output = psMetadataAlloc();
    603     for (long i = 0; i < psArrayLength(objects); i++) {
    604         psMetadata *md = weatherMetadataFromObject(objects->data[i]);
    605         if (!psMetadataAddMetadata(
    606             output,
    607             PS_LIST_TAIL,
    608             WEATHER_TABLE_NAME,
    609             PS_META_DUPLICATE_OK,
    610             NULL,
    611             md
    612         )) {
    613             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    614             psFree(md);
    615             psFree(output);
    616             return false;
    617         }
    618         psFree(md);
    619     }
    620 
    621     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    622         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    623         psFree(output);
    624     }
    625     psFree(output);
    626 
    627     return true;
    628 }
    629 static void skyp_transparencyRowFree(skyp_transparencyRow *object);
    630 
    631 skyp_transparencyRow *skyp_transparencyRowAlloc(const char *filter, psF64 trans, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
    632 {
    633     skyp_transparencyRow *_object;
    634 
    635     _object = psAlloc(sizeof(skyp_transparencyRow));
    636     psMemSetDeallocator(_object, (psFreeFunc)skyp_transparencyRowFree);
    637 
    638     _object->filter = psStringCopy(filter);
    639     _object->trans = trans;
    640     _object->nstars = nstars;
    641     _object->ra = ra;
    642     _object->decl = decl;
    643     _object->exptime = exptime;
    644     _object->sky_bright = sky_bright;
    645 
    646     return _object;
    647 }
    648 
    649 static void skyp_transparencyRowFree(skyp_transparencyRow *object)
    650 {
    651     psFree(object->filter);
    652 }
    653 
    654 bool skyp_transparencyCreateTable(psDB *dbh)
    655 {
    656     psMetadata      *md;
    657     bool            status;
    658 
    659     md = psMetadataAlloc();
    660     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
    661         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    662         psFree(md);
    663         return false;
    664     }
    665     if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, 0.0)) {
    666         psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
    667         psFree(md);
    668         return false;
    669     }
    670     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, 0)) {
    671         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    672         psFree(md);
    673         return false;
    674     }
    675     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
    676         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    677         psFree(md);
    678         return false;
    679     }
    680     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
    681         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    682         psFree(md);
    683         return false;
    684     }
    685     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
    686         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    687         psFree(md);
    688         return false;
    689     }
    690     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
    691         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    692         psFree(md);
    693         return false;
    694     }
    695 
    696     status = psDBCreateTable(dbh, SKYP_TRANSPARENCY_TABLE_NAME, md);
    697 
    698     psFree(md);
    699 
    700     return status;
    701 }
    702 
    703 bool skyp_transparencyDropTable(psDB *dbh)
    704 {
    705     return psDBDropTable(dbh, SKYP_TRANSPARENCY_TABLE_NAME);
    706 }
    707 
    708 bool skyp_transparencyInsert(psDB * dbh, const char *filter, psF64 trans, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
    709 {
    710     psMetadata      *md;
    711     bool            status;
    712 
    713     md = psMetadataAlloc();
    714     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
    715         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    716         psFree(md);
    717         return false;
    718     }
    719     if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, trans)) {
    720         psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
    721         psFree(md);
    722         return false;
    723     }
    724     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, nstars)) {
    725         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    726         psFree(md);
    727         return false;
    728     }
    729     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
    730         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    731         psFree(md);
    732         return false;
    733     }
    734     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
    735         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    736         psFree(md);
    737         return false;
    738     }
    739     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
    740         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    741         psFree(md);
    742         return false;
    743     }
    744     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
    745         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    746         psFree(md);
    747         return false;
    748     }
    749 
    750     status = psDBInsertOneRow(dbh, SKYP_TRANSPARENCY_TABLE_NAME, md);
    751     psFree(md);
    752 
    753     return status;
    754 }
    755 
    756 long long skyp_transparencyDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    757 {
    758     long long       deleted = 0;
    759 
    760     long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
    761     if (count < 0) {
    762         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
    763         return count;
    764 
    765         deleted += count;
    766     }
    767 
    768     return deleted;
    769 }
    770 bool skyp_transparencyInsertObject(psDB *dbh, skyp_transparencyRow *object)
    771 {
    772     return skyp_transparencyInsert(dbh, object->filter, object->trans, object->nstars, object->ra, object->decl, object->exptime, object->sky_bright);
    773 }
    774 
    775 bool skyp_transparencyInsertObjects(psDB *dbh, psArray *objects)
    776 {
    777     for (long i = 0; i < psArrayLength(objects); i++) {
    778         if (!skyp_transparencyInsertObject(dbh, objects->data[i])) {
    779             return false;
    780         }
    781     }
    782 
    783     return true;
    784 }
    785 
    786 bool skyp_transparencyInsertFits(psDB *dbh, const psFits *fits)
    787 {
    788     psArray         *rowSet;
    789 
    790     // move to (the first?) extension named  SKYP_TRANSPARENCY_TABLE_NAME
    791     if (!psFitsMoveExtName(fits, SKYP_TRANSPARENCY_TABLE_NAME)) {
    792         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_TRANSPARENCY_TABLE_NAME);
    793         return false;
    794     }
    795 
    796     // check HDU type
    797     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    798         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    799         return false;
    800     }
    801 
    802     // read fits table
    803     rowSet = psFitsReadTable(fits);
    804     if (!rowSet) {
    805         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    806         psFree(rowSet);
    807         return false;
    808     }
    809 
    810     if (!psDBInsertRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, rowSet)) {
    811         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    812         psFree(rowSet);
    813         return false;
    814     }
    815 
    816     psFree(rowSet);
    817 
    818     return true;
    819 }
    820 
    821 bool skyp_transparencySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    822 {
    823     psArray         *rowSet;
    824 
    825     rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
    826     if (!rowSet) {
    827         return false;
    828     }
    829 
    830     // output to fits
    831     if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_TRANSPARENCY_TABLE_NAME)) {
    832         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    833         psFree(rowSet);
    834         return false;
    835     }
    836 
    837     psFree(rowSet);
    838 
    839     return true;
    840 }
    841 
    842 psMetadata *skyp_transparencyMetadataFromObject(const skyp_transparencyRow *object)
    843 {
    844     psMetadata      *md;
    845 
    846     md = psMetadataAlloc();
    847     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
    848         psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    849         psFree(md);
    850         return NULL;
    851     }
    852     if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, object->trans)) {
    853         psError(PS_ERR_UNKNOWN, false, "failed to add item trans");
    854         psFree(md);
    855         return NULL;
    856     }
    857     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, object->nstars)) {
    858         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    859         psFree(md);
    860         return NULL;
    861     }
    862     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
    863         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    864         psFree(md);
    865         return NULL;
    866     }
    867     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
    868         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    869         psFree(md);
    870         return NULL;
    871     }
    872     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
    873         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    874         psFree(md);
    875         return NULL;
    876     }
    877     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
    878         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    879         psFree(md);
    880         return NULL;
    881     }
    882 
    883     return md;
    884 }
    885 
    886 skyp_transparencyRow *skyp_transparencyObjectFromMetadata(psMetadata *md)
    887 {
    888     bool            status;
    889     char            *filter;
    890     psF64           trans;
    891     psS32           nstars;
    892     psF64           ra;
    893     psF64           decl;
    894     psF32           exptime;
    895     psF64           sky_bright;
    896 
    897     filter = psMetadataLookupPtr(&status, md, "filter");
    898     if (!status) {
    899         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
    900         return false;
    901     }
    902     trans = psMetadataLookupF64(&status, md, "trans");
    903     if (!status) {
    904         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item trans");
    905         return false;
    906     }
    907     nstars = psMetadataLookupS32(&status, md, "nstars");
    908     if (!status) {
    909         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
    910         return false;
    911     }
    912     ra = psMetadataLookupF64(&status, md, "ra");
    913     if (!status) {
    914         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    915         return false;
    916     }
    917     decl = psMetadataLookupF64(&status, md, "decl");
    918     if (!status) {
    919         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    920         return false;
    921     }
    922     exptime = psMetadataLookupF32(&status, md, "exptime");
    923     if (!status) {
    924         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
    925         return false;
    926     }
    927     sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
    928     if (!status) {
    929         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
    930         return false;
    931     }
    932 
    933     return skyp_transparencyRowAlloc(filter, trans, nstars, ra, decl, exptime, sky_bright);
    934 }
    935 psArray *skyp_transparencySelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    936 {
    937     psArray         *rowSet;
    938     psArray         *returnSet;
    939     psU64           i;
    940 
    941     rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
    942     if (!rowSet) {
    943         return NULL;
    944     }
    945 
    946     // convert psMetadata rows to row objects
    947 
    948     returnSet = psArrayAlloc(rowSet->n);
    949     returnSet->n = 0;
    950 
    951     for (i = 0; i < rowSet->n; i++) {
    952         skyp_transparencyRow *object = skyp_transparencyObjectFromMetadata(rowSet->data[i]);
    953         psArrayAdd(returnSet, 0, object);
    954         psFree(object);
    955     }
    956 
    957     psFree(rowSet);
    958 
    959     return returnSet;
    960 }
    961 bool skyp_transparencyDeleteObject(psDB *dbh, const skyp_transparencyRow *object)
    962 {
    963     psMetadata *where = skyp_transparencyMetadataFromObject(object);
    964     long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, 0);
    965     psFree(where)
    966     if (count < 0) {
    967         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
    968         return false;
    969     }
    970     if (count > 1) {
    971         // XXX should this be a psAbort() instead?  It is possible that
    972         // having an object match multiple rows was by design.
    973         psError(PS_ERR_UNKNOWN, true, "skyp_transparencyRow object matched more then one row.  Check your database schema");
    974         return false;
    975     }
    976 
    977     return true;
    978 }
    979 long long skyp_transparencyDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    980 {
    981     long long       deleted = 0;
    982 
    983     for (long long i = 0; i < objects->n; i++) {
    984         skyp_transparencyRow *object = objects->data[i];
    985         psMetadata *where = skyp_transparencyMetadataFromObject(object);
    986         long long count = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit);
    987         psFree(where)
    988         if (count < 0) {
    989             psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_transparency");
    990             return count;
    991         }
    992 
    993         deleted += count;
    994     }
    995 
    996     return deleted;
    997 }
    998 bool skyp_transparencyPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    999 {
    1000     PS_ASSERT_PTR_NON_NULL(objects, false);
    1001 
    1002     psMetadata *output = psMetadataAlloc();
    1003     for (long i = 0; i < psArrayLength(objects); i++) {
    1004         psMetadata *md = skyp_transparencyMetadataFromObject(objects->data[i]);
    1005         if (!psMetadataAddMetadata(
    1006             output,
    1007             PS_LIST_TAIL,
    1008             SKYP_TRANSPARENCY_TABLE_NAME,
    1009             PS_META_DUPLICATE_OK,
    1010             NULL,
    1011             md
    1012         )) {
    1013             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    1014             psFree(md);
    1015             psFree(output);
    1016             return false;
    1017         }
    1018         psFree(md);
    1019     }
    1020 
    1021     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    1022         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    1023         psFree(output);
    1024     }
    1025     psFree(output);
    1026 
    1027     return true;
    1028 }
    1029 static void skyp_absorptionRowFree(skyp_absorptionRow *object);
    1030 
    1031 skyp_absorptionRow *skyp_absorptionRowAlloc(const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
    1032 {
    1033     skyp_absorptionRow *_object;
    1034 
    1035     _object = psAlloc(sizeof(skyp_absorptionRow));
    1036     psMemSetDeallocator(_object, (psFreeFunc)skyp_absorptionRowFree);
    1037 
    1038     _object->disperser_id = psStringCopy(disperser_id);
    1039     _object->atmcomp1 = atmcomp1;
    1040     _object->atmcomp2 = atmcomp2;
    1041     _object->atmcomp3 = atmcomp3;
    1042     _object->nstars = nstars;
    1043     _object->ra = ra;
    1044     _object->decl = decl;
    1045     _object->exptime = exptime;
    1046     _object->sky_bright = sky_bright;
    1047 
    1048     return _object;
    1049 }
    1050 
    1051 static void skyp_absorptionRowFree(skyp_absorptionRow *object)
    1052 {
    1053     psFree(object->disperser_id);
    1054 }
    1055 
    1056 bool skyp_absorptionCreateTable(psDB *dbh)
    1057 {
    1058     psMetadata      *md;
    1059     bool            status;
    1060 
    1061     md = psMetadataAlloc();
    1062     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
    1063         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1064         psFree(md);
    1065         return false;
    1066     }
    1067     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 0.0)) {
    1068         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1069         psFree(md);
    1070         return false;
    1071     }
    1072     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 0.0)) {
    1073         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1074         psFree(md);
    1075         return false;
    1076     }
    1077     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 0.0)) {
    1078         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1079         psFree(md);
    1080         return false;
    1081     }
    1082     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, 0)) {
    1083         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    1084         psFree(md);
    1085         return false;
    1086     }
    1087     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
    1088         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    1089         psFree(md);
    1090         return false;
    1091     }
    1092     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
    1093         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    1094         psFree(md);
    1095         return false;
    1096     }
    1097     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
    1098         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1099         psFree(md);
    1100         return false;
    1101     }
    1102     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
    1103         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    1104         psFree(md);
    1105         return false;
    1106     }
    1107 
    1108     status = psDBCreateTable(dbh, SKYP_ABSORPTION_TABLE_NAME, md);
    1109 
    1110     psFree(md);
    1111 
    1112     return status;
    1113 }
    1114 
    1115 bool skyp_absorptionDropTable(psDB *dbh)
    1116 {
    1117     return psDBDropTable(dbh, SKYP_ABSORPTION_TABLE_NAME);
    1118 }
    1119 
    1120 bool skyp_absorptionInsert(psDB * dbh, const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psS32 nstars, psF64 ra, psF64 decl, psF32 exptime, psF64 sky_bright)
    1121 {
    1122     psMetadata      *md;
    1123     bool            status;
    1124 
    1125     md = psMetadataAlloc();
    1126     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, disperser_id)) {
    1127         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1128         psFree(md);
    1129         return false;
    1130     }
    1131     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, atmcomp1)) {
    1132         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1133         psFree(md);
    1134         return false;
    1135     }
    1136     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, atmcomp2)) {
    1137         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1138         psFree(md);
    1139         return false;
    1140     }
    1141     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, atmcomp3)) {
    1142         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1143         psFree(md);
    1144         return false;
    1145     }
    1146     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, nstars)) {
    1147         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    1148         psFree(md);
    1149         return false;
    1150     }
    1151     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
    1152         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    1153         psFree(md);
    1154         return false;
    1155     }
    1156     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
    1157         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    1158         psFree(md);
    1159         return false;
    1160     }
    1161     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
    1162         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1163         psFree(md);
    1164         return false;
    1165     }
    1166     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
    1167         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    1168         psFree(md);
    1169         return false;
    1170     }
    1171 
    1172     status = psDBInsertOneRow(dbh, SKYP_ABSORPTION_TABLE_NAME, md);
    1173     psFree(md);
    1174 
    1175     return status;
    1176 }
    1177 
    1178 long long skyp_absorptionDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    1179 {
    1180     long long       deleted = 0;
    1181 
    1182     long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
    1183     if (count < 0) {
    1184         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
    1185         return count;
    1186 
    1187         deleted += count;
    1188     }
    1189 
    1190     return deleted;
    1191 }
    1192 bool skyp_absorptionInsertObject(psDB *dbh, skyp_absorptionRow *object)
    1193 {
    1194     return skyp_absorptionInsert(dbh, object->disperser_id, object->atmcomp1, object->atmcomp2, object->atmcomp3, object->nstars, object->ra, object->decl, object->exptime, object->sky_bright);
    1195 }
    1196 
    1197 bool skyp_absorptionInsertObjects(psDB *dbh, psArray *objects)
    1198 {
    1199     for (long i = 0; i < psArrayLength(objects); i++) {
    1200         if (!skyp_absorptionInsertObject(dbh, objects->data[i])) {
    1201             return false;
    1202         }
    1203     }
    1204 
    1205     return true;
    1206 }
    1207 
    1208 bool skyp_absorptionInsertFits(psDB *dbh, const psFits *fits)
    1209 {
    1210     psArray         *rowSet;
    1211 
    1212     // move to (the first?) extension named  SKYP_ABSORPTION_TABLE_NAME
    1213     if (!psFitsMoveExtName(fits, SKYP_ABSORPTION_TABLE_NAME)) {
    1214         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_ABSORPTION_TABLE_NAME);
    1215         return false;
    1216     }
    1217 
    1218     // check HDU type
    1219     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    1220         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    1221         return false;
    1222     }
    1223 
    1224     // read fits table
    1225     rowSet = psFitsReadTable(fits);
    1226     if (!rowSet) {
    1227         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    1228         psFree(rowSet);
    1229         return false;
    1230     }
    1231 
    1232     if (!psDBInsertRows(dbh, SKYP_ABSORPTION_TABLE_NAME, rowSet)) {
    1233         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    1234         psFree(rowSet);
    1235         return false;
    1236     }
    1237 
    1238     psFree(rowSet);
    1239 
    1240     return true;
    1241 }
    1242 
    1243 bool skyp_absorptionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    1244 {
    1245     psArray         *rowSet;
    1246 
    1247     rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
    1248     if (!rowSet) {
    1249         return false;
    1250     }
    1251 
    1252     // output to fits
    1253     if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_ABSORPTION_TABLE_NAME)) {
    1254         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    1255         psFree(rowSet);
    1256         return false;
    1257     }
    1258 
    1259     psFree(rowSet);
    1260 
    1261     return true;
    1262 }
    1263 
    1264 psMetadata *skyp_absorptionMetadataFromObject(const skyp_absorptionRow *object)
    1265 {
    1266     psMetadata      *md;
    1267 
    1268     md = psMetadataAlloc();
    1269     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, object->disperser_id)) {
    1270         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1271         psFree(md);
    1272         return NULL;
    1273     }
    1274     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, object->atmcomp1)) {
    1275         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1276         psFree(md);
    1277         return NULL;
    1278     }
    1279     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, object->atmcomp2)) {
    1280         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1281         psFree(md);
    1282         return NULL;
    1283     }
    1284     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, object->atmcomp3)) {
    1285         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1286         psFree(md);
    1287         return NULL;
    1288     }
    1289     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, object->nstars)) {
    1290         psError(PS_ERR_UNKNOWN, false, "failed to add item nstars");
    1291         psFree(md);
    1292         return NULL;
    1293     }
    1294     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
    1295         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    1296         psFree(md);
    1297         return NULL;
    1298     }
    1299     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
    1300         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    1301         psFree(md);
    1302         return NULL;
    1303     }
    1304     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
    1305         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1306         psFree(md);
    1307         return NULL;
    1308     }
    1309     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
    1310         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    1311         psFree(md);
    1312         return NULL;
    1313     }
    1314 
    1315     return md;
    1316 }
    1317 
    1318 skyp_absorptionRow *skyp_absorptionObjectFromMetadata(psMetadata *md)
    1319 {
    1320     bool            status;
    1321     char            *disperser_id;
    1322     psF32           atmcomp1;
    1323     psF32           atmcomp2;
    1324     psF32           atmcomp3;
    1325     psS32           nstars;
    1326     psF64           ra;
    1327     psF64           decl;
    1328     psF32           exptime;
    1329     psF64           sky_bright;
    1330 
    1331     disperser_id = psMetadataLookupPtr(&status, md, "disperser_id");
    1332     if (!status) {
    1333         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
    1334         return false;
    1335     }
    1336     atmcomp1 = psMetadataLookupF32(&status, md, "atmcomp1");
    1337     if (!status) {
    1338         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
    1339         return false;
    1340     }
    1341     atmcomp2 = psMetadataLookupF32(&status, md, "atmcomp2");
    1342     if (!status) {
    1343         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
    1344         return false;
    1345     }
    1346     atmcomp3 = psMetadataLookupF32(&status, md, "atmcomp3");
    1347     if (!status) {
    1348         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
    1349         return false;
    1350     }
    1351     nstars = psMetadataLookupS32(&status, md, "nstars");
    1352     if (!status) {
    1353         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");
    1354         return false;
    1355     }
    1356     ra = psMetadataLookupF64(&status, md, "ra");
    1357     if (!status) {
    1358         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    1359         return false;
    1360     }
    1361     decl = psMetadataLookupF64(&status, md, "decl");
    1362     if (!status) {
    1363         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    1364         return false;
    1365     }
    1366     exptime = psMetadataLookupF32(&status, md, "exptime");
    1367     if (!status) {
    1368         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
    1369         return false;
    1370     }
    1371     sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
    1372     if (!status) {
    1373         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
    1374         return false;
    1375     }
    1376 
    1377     return skyp_absorptionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, nstars, ra, decl, exptime, sky_bright);
    1378 }
    1379 psArray *skyp_absorptionSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    1380 {
    1381     psArray         *rowSet;
    1382     psArray         *returnSet;
    1383     psU64           i;
    1384 
    1385     rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
    1386     if (!rowSet) {
    1387         return NULL;
    1388     }
    1389 
    1390     // convert psMetadata rows to row objects
    1391 
    1392     returnSet = psArrayAlloc(rowSet->n);
    1393     returnSet->n = 0;
    1394 
    1395     for (i = 0; i < rowSet->n; i++) {
    1396         skyp_absorptionRow *object = skyp_absorptionObjectFromMetadata(rowSet->data[i]);
    1397         psArrayAdd(returnSet, 0, object);
    1398         psFree(object);
    1399     }
    1400 
    1401     psFree(rowSet);
    1402 
    1403     return returnSet;
    1404 }
    1405 bool skyp_absorptionDeleteObject(psDB *dbh, const skyp_absorptionRow *object)
    1406 {
    1407     psMetadata *where = skyp_absorptionMetadataFromObject(object);
    1408     long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, 0);
    1409     psFree(where)
    1410     if (count < 0) {
    1411         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
    1412         return false;
    1413     }
    1414     if (count > 1) {
    1415         // XXX should this be a psAbort() instead?  It is possible that
    1416         // having an object match multiple rows was by design.
    1417         psError(PS_ERR_UNKNOWN, true, "skyp_absorptionRow object matched more then one row.  Check your database schema");
    1418         return false;
    1419     }
    1420 
    1421     return true;
    1422 }
    1423 long long skyp_absorptionDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    1424 {
    1425     long long       deleted = 0;
    1426 
    1427     for (long long i = 0; i < objects->n; i++) {
    1428         skyp_absorptionRow *object = objects->data[i];
    1429         psMetadata *where = skyp_absorptionMetadataFromObject(object);
    1430         long long count = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit);
    1431         psFree(where)
    1432         if (count < 0) {
    1433             psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_absorption");
    1434             return count;
    1435         }
    1436 
    1437         deleted += count;
    1438     }
    1439 
    1440     return deleted;
    1441 }
    1442 bool skyp_absorptionPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    1443 {
    1444     PS_ASSERT_PTR_NON_NULL(objects, false);
    1445 
    1446     psMetadata *output = psMetadataAlloc();
    1447     for (long i = 0; i < psArrayLength(objects); i++) {
    1448         psMetadata *md = skyp_absorptionMetadataFromObject(objects->data[i]);
    1449         if (!psMetadataAddMetadata(
    1450             output,
    1451             PS_LIST_TAIL,
    1452             SKYP_ABSORPTION_TABLE_NAME,
    1453             PS_META_DUPLICATE_OK,
    1454             NULL,
    1455             md
    1456         )) {
    1457             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    1458             psFree(md);
    1459             psFree(output);
    1460             return false;
    1461         }
    1462         psFree(md);
    1463     }
    1464 
    1465     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    1466         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    1467         psFree(output);
    1468     }
    1469     psFree(output);
    1470 
    1471     return true;
    1472 }
    1473 static void skyp_emissionRowFree(skyp_emissionRow *object);
    1474 
    1475 skyp_emissionRow *skyp_emissionRowAlloc(const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psF32 continuum, psF32 exptime)
    1476 {
    1477     skyp_emissionRow *_object;
    1478 
    1479     _object = psAlloc(sizeof(skyp_emissionRow));
    1480     psMemSetDeallocator(_object, (psFreeFunc)skyp_emissionRowFree);
    1481 
    1482     _object->disperser_id = psStringCopy(disperser_id);
    1483     _object->atmcomp1 = atmcomp1;
    1484     _object->atmcomp2 = atmcomp2;
    1485     _object->atmcomp3 = atmcomp3;
    1486     _object->continuum = continuum;
    1487     _object->exptime = exptime;
    1488 
    1489     return _object;
    1490 }
    1491 
    1492 static void skyp_emissionRowFree(skyp_emissionRow *object)
    1493 {
    1494     psFree(object->disperser_id);
    1495 }
    1496 
    1497 bool skyp_emissionCreateTable(psDB *dbh)
    1498 {
    1499     psMetadata      *md;
    1500     bool            status;
    1501 
    1502     md = psMetadataAlloc();
    1503     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) {
    1504         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1505         psFree(md);
    1506         return false;
    1507     }
    1508     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 0.0)) {
    1509         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1510         psFree(md);
    1511         return false;
    1512     }
    1513     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 0.0)) {
    1514         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1515         psFree(md);
    1516         return false;
    1517     }
    1518     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 0.0)) {
    1519         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1520         psFree(md);
    1521         return false;
    1522     }
    1523     if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, 0.0)) {
    1524         psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
    1525         psFree(md);
    1526         return false;
    1527     }
    1528     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 0.0)) {
    1529         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1530         psFree(md);
    1531         return false;
    1532     }
    1533 
    1534     status = psDBCreateTable(dbh, SKYP_EMISSION_TABLE_NAME, md);
    1535 
    1536     psFree(md);
    1537 
    1538     return status;
    1539 }
    1540 
    1541 bool skyp_emissionDropTable(psDB *dbh)
    1542 {
    1543     return psDBDropTable(dbh, SKYP_EMISSION_TABLE_NAME);
    1544 }
    1545 
    1546 bool skyp_emissionInsert(psDB * dbh, const char *disperser_id, psF32 atmcomp1, psF32 atmcomp2, psF32 atmcomp3, psF32 continuum, psF32 exptime)
    1547 {
    1548     psMetadata      *md;
    1549     bool            status;
    1550 
    1551     md = psMetadataAlloc();
    1552     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, disperser_id)) {
    1553         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1554         psFree(md);
    1555         return false;
    1556     }
    1557     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, atmcomp1)) {
    1558         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1559         psFree(md);
    1560         return false;
    1561     }
    1562     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, atmcomp2)) {
    1563         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1564         psFree(md);
    1565         return false;
    1566     }
    1567     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, atmcomp3)) {
    1568         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1569         psFree(md);
    1570         return false;
    1571     }
    1572     if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, continuum)) {
    1573         psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
    1574         psFree(md);
    1575         return false;
    1576     }
    1577     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, exptime)) {
    1578         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1579         psFree(md);
    1580         return false;
    1581     }
    1582 
    1583     status = psDBInsertOneRow(dbh, SKYP_EMISSION_TABLE_NAME, md);
    1584     psFree(md);
    1585 
    1586     return status;
    1587 }
    1588 
    1589 long long skyp_emissionDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    1590 {
    1591     long long       deleted = 0;
    1592 
    1593     long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
    1594     if (count < 0) {
    1595         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
    1596         return count;
    1597 
    1598         deleted += count;
    1599     }
    1600 
    1601     return deleted;
    1602 }
    1603 bool skyp_emissionInsertObject(psDB *dbh, skyp_emissionRow *object)
    1604 {
    1605     return skyp_emissionInsert(dbh, object->disperser_id, object->atmcomp1, object->atmcomp2, object->atmcomp3, object->continuum, object->exptime);
    1606 }
    1607 
    1608 bool skyp_emissionInsertObjects(psDB *dbh, psArray *objects)
    1609 {
    1610     for (long i = 0; i < psArrayLength(objects); i++) {
    1611         if (!skyp_emissionInsertObject(dbh, objects->data[i])) {
    1612             return false;
    1613         }
    1614     }
    1615 
    1616     return true;
    1617 }
    1618 
    1619 bool skyp_emissionInsertFits(psDB *dbh, const psFits *fits)
    1620 {
    1621     psArray         *rowSet;
    1622 
    1623     // move to (the first?) extension named  SKYP_EMISSION_TABLE_NAME
    1624     if (!psFitsMoveExtName(fits, SKYP_EMISSION_TABLE_NAME)) {
    1625         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_EMISSION_TABLE_NAME);
    1626         return false;
    1627     }
    1628 
    1629     // check HDU type
    1630     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    1631         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    1632         return false;
    1633     }
    1634 
    1635     // read fits table
    1636     rowSet = psFitsReadTable(fits);
    1637     if (!rowSet) {
    1638         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    1639         psFree(rowSet);
    1640         return false;
    1641     }
    1642 
    1643     if (!psDBInsertRows(dbh, SKYP_EMISSION_TABLE_NAME, rowSet)) {
    1644         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    1645         psFree(rowSet);
    1646         return false;
    1647     }
    1648 
    1649     psFree(rowSet);
    1650 
    1651     return true;
    1652 }
    1653 
    1654 bool skyp_emissionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    1655 {
    1656     psArray         *rowSet;
    1657 
    1658     rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
    1659     if (!rowSet) {
    1660         return false;
    1661     }
    1662 
    1663     // output to fits
    1664     if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_EMISSION_TABLE_NAME)) {
    1665         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    1666         psFree(rowSet);
    1667         return false;
    1668     }
    1669 
    1670     psFree(rowSet);
    1671 
    1672     return true;
    1673 }
    1674 
    1675 psMetadata *skyp_emissionMetadataFromObject(const skyp_emissionRow *object)
    1676 {
    1677     psMetadata      *md;
    1678 
    1679     md = psMetadataAlloc();
    1680     if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, object->disperser_id)) {
    1681         psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id");
    1682         psFree(md);
    1683         return NULL;
    1684     }
    1685     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, object->atmcomp1)) {
    1686         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp1");
    1687         psFree(md);
    1688         return NULL;
    1689     }
    1690     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, object->atmcomp2)) {
    1691         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp2");
    1692         psFree(md);
    1693         return NULL;
    1694     }
    1695     if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, object->atmcomp3)) {
    1696         psError(PS_ERR_UNKNOWN, false, "failed to add item atmcomp3");
    1697         psFree(md);
    1698         return NULL;
    1699     }
    1700     if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, object->continuum)) {
    1701         psError(PS_ERR_UNKNOWN, false, "failed to add item continuum");
    1702         psFree(md);
    1703         return NULL;
    1704     }
    1705     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, object->exptime)) {
    1706         psError(PS_ERR_UNKNOWN, false, "failed to add item exptime");
    1707         psFree(md);
    1708         return NULL;
    1709     }
    1710 
    1711     return md;
    1712 }
    1713 
    1714 skyp_emissionRow *skyp_emissionObjectFromMetadata(psMetadata *md)
    1715 {
    1716     bool            status;
    1717     char            *disperser_id;
    1718     psF32           atmcomp1;
    1719     psF32           atmcomp2;
    1720     psF32           atmcomp3;
    1721     psF32           continuum;
    1722     psF32           exptime;
    1723 
    1724     disperser_id = psMetadataLookupPtr(&status, md, "disperser_id");
    1725     if (!status) {
    1726         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");
    1727         return false;
    1728     }
    1729     atmcomp1 = psMetadataLookupF32(&status, md, "atmcomp1");
    1730     if (!status) {
    1731         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");
    1732         return false;
    1733     }
    1734     atmcomp2 = psMetadataLookupF32(&status, md, "atmcomp2");
    1735     if (!status) {
    1736         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");
    1737         return false;
    1738     }
    1739     atmcomp3 = psMetadataLookupF32(&status, md, "atmcomp3");
    1740     if (!status) {
    1741         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");
    1742         return false;
    1743     }
    1744     continuum = psMetadataLookupF32(&status, md, "continuum");
    1745     if (!status) {
    1746         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item continuum");
    1747         return false;
    1748     }
    1749     exptime = psMetadataLookupF32(&status, md, "exptime");
    1750     if (!status) {
    1751         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");
    1752         return false;
    1753     }
    1754 
    1755     return skyp_emissionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, continuum, exptime);
    1756 }
    1757 psArray *skyp_emissionSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    1758 {
    1759     psArray         *rowSet;
    1760     psArray         *returnSet;
    1761     psU64           i;
    1762 
    1763     rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
    1764     if (!rowSet) {
    1765         return NULL;
    1766     }
    1767 
    1768     // convert psMetadata rows to row objects
    1769 
    1770     returnSet = psArrayAlloc(rowSet->n);
    1771     returnSet->n = 0;
    1772 
    1773     for (i = 0; i < rowSet->n; i++) {
    1774         skyp_emissionRow *object = skyp_emissionObjectFromMetadata(rowSet->data[i]);
    1775         psArrayAdd(returnSet, 0, object);
    1776         psFree(object);
    1777     }
    1778 
    1779     psFree(rowSet);
    1780 
    1781     return returnSet;
    1782 }
    1783 bool skyp_emissionDeleteObject(psDB *dbh, const skyp_emissionRow *object)
    1784 {
    1785     psMetadata *where = skyp_emissionMetadataFromObject(object);
    1786     long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, 0);
    1787     psFree(where)
    1788     if (count < 0) {
    1789         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
    1790         return false;
    1791     }
    1792     if (count > 1) {
    1793         // XXX should this be a psAbort() instead?  It is possible that
    1794         // having an object match multiple rows was by design.
    1795         psError(PS_ERR_UNKNOWN, true, "skyp_emissionRow object matched more then one row.  Check your database schema");
    1796         return false;
    1797     }
    1798 
    1799     return true;
    1800 }
    1801 long long skyp_emissionDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    1802 {
    1803     long long       deleted = 0;
    1804 
    1805     for (long long i = 0; i < objects->n; i++) {
    1806         skyp_emissionRow *object = objects->data[i];
    1807         psMetadata *where = skyp_emissionMetadataFromObject(object);
    1808         long long count = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit);
    1809         psFree(where)
    1810         if (count < 0) {
    1811             psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_emission");
    1812             return count;
    1813         }
    1814 
    1815         deleted += count;
    1816     }
    1817 
    1818     return deleted;
    1819 }
    1820 bool skyp_emissionPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    1821 {
    1822     PS_ASSERT_PTR_NON_NULL(objects, false);
    1823 
    1824     psMetadata *output = psMetadataAlloc();
    1825     for (long i = 0; i < psArrayLength(objects); i++) {
    1826         psMetadata *md = skyp_emissionMetadataFromObject(objects->data[i]);
    1827         if (!psMetadataAddMetadata(
    1828             output,
    1829             PS_LIST_TAIL,
    1830             SKYP_EMISSION_TABLE_NAME,
    1831             PS_META_DUPLICATE_OK,
    1832             NULL,
    1833             md
    1834         )) {
    1835             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    1836             psFree(md);
    1837             psFree(output);
    1838             return false;
    1839         }
    1840         psFree(md);
    1841     }
    1842 
    1843     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    1844         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    1845         psFree(output);
    1846     }
    1847     psFree(output);
    1848 
    1849     return true;
    1850 }
    1851 static void dimmRowFree(dimmRow *object);
    1852 
    1853 dimmRow *dimmRowAlloc(psF32 sigmax, psF32 sigmay, psF32 fwhm, psF64 ra, psF64 decl, psF32 expttime, const char *telescope_id)
    1854 {
    1855     dimmRow         *_object;
    1856 
    1857     _object = psAlloc(sizeof(dimmRow));
    1858     psMemSetDeallocator(_object, (psFreeFunc)dimmRowFree);
    1859 
    1860     _object->sigmax = sigmax;
    1861     _object->sigmay = sigmay;
    1862     _object->fwhm = fwhm;
    1863     _object->ra = ra;
    1864     _object->decl = decl;
    1865     _object->expttime = expttime;
    1866     _object->telescope_id = psStringCopy(telescope_id);
    1867 
    1868     return _object;
    1869 }
    1870 
    1871 static void dimmRowFree(dimmRow *object)
    1872 {
    1873     psFree(object->telescope_id);
    1874 }
    1875 
    1876 bool dimmCreateTable(psDB *dbh)
    1877 {
    1878     psMetadata      *md;
    1879     bool            status;
    1880 
    1881     md = psMetadataAlloc();
    1882     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, 0.0)) {
    1883         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
    1884         psFree(md);
    1885         return false;
    1886     }
    1887     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, 0.0)) {
    1888         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
    1889         psFree(md);
    1890         return false;
    1891     }
    1892     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, 0.0)) {
    1893         psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
    1894         psFree(md);
    1895         return false;
    1896     }
    1897     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
    1898         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    1899         psFree(md);
    1900         return false;
    1901     }
    1902     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
    1903         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    1904         psFree(md);
    1905         return false;
    1906     }
    1907     if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, 0.0)) {
    1908         psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
    1909         psFree(md);
    1910         return false;
    1911     }
    1912     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, "255")) {
    1913         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
    1914         psFree(md);
    1915         return false;
    1916     }
    1917 
    1918     status = psDBCreateTable(dbh, DIMM_TABLE_NAME, md);
    1919 
    1920     psFree(md);
    1921 
    1922     return status;
    1923 }
    1924 
    1925 bool dimmDropTable(psDB *dbh)
    1926 {
    1927     return psDBDropTable(dbh, DIMM_TABLE_NAME);
    1928 }
    1929 
    1930 bool dimmInsert(psDB * dbh, psF32 sigmax, psF32 sigmay, psF32 fwhm, psF64 ra, psF64 decl, psF32 expttime, const char *telescope_id)
    1931 {
    1932     psMetadata      *md;
    1933     bool            status;
    1934 
    1935     md = psMetadataAlloc();
    1936     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, sigmax)) {
    1937         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
    1938         psFree(md);
    1939         return false;
    1940     }
    1941     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, sigmay)) {
    1942         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
    1943         psFree(md);
    1944         return false;
    1945     }
    1946     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, fwhm)) {
    1947         psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
    1948         psFree(md);
    1949         return false;
    1950     }
    1951     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
    1952         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    1953         psFree(md);
    1954         return false;
    1955     }
    1956     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
    1957         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    1958         psFree(md);
    1959         return false;
    1960     }
    1961     if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, expttime)) {
    1962         psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
    1963         psFree(md);
    1964         return false;
    1965     }
    1966     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, telescope_id)) {
    1967         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
    1968         psFree(md);
    1969         return false;
    1970     }
    1971 
    1972     status = psDBInsertOneRow(dbh, DIMM_TABLE_NAME, md);
    1973     psFree(md);
    1974 
    1975     return status;
    1976 }
    1977 
    1978 long long dimmDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    1979 {
    1980     long long       deleted = 0;
    1981 
    1982     long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, limit);
    1983     if (count < 0) {
    1984         psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
    1985         return count;
    1986 
    1987         deleted += count;
    1988     }
    1989 
    1990     return deleted;
    1991 }
    1992 bool dimmInsertObject(psDB *dbh, dimmRow *object)
    1993 {
    1994     return dimmInsert(dbh, object->sigmax, object->sigmay, object->fwhm, object->ra, object->decl, object->expttime, object->telescope_id);
    1995 }
    1996 
    1997 bool dimmInsertObjects(psDB *dbh, psArray *objects)
    1998 {
    1999     for (long i = 0; i < psArrayLength(objects); i++) {
    2000         if (!dimmInsertObject(dbh, objects->data[i])) {
    2001             return false;
    2002         }
    2003     }
    2004 
    2005     return true;
    2006 }
    2007 
    2008 bool dimmInsertFits(psDB *dbh, const psFits *fits)
    2009 {
    2010     psArray         *rowSet;
    2011 
    2012     // move to (the first?) extension named  DIMM_TABLE_NAME
    2013     if (!psFitsMoveExtName(fits, DIMM_TABLE_NAME)) {
    2014         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DIMM_TABLE_NAME);
    2015         return false;
    2016     }
    2017 
    2018     // check HDU type
    2019     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    2020         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    2021         return false;
    2022     }
    2023 
    2024     // read fits table
    2025     rowSet = psFitsReadTable(fits);
    2026     if (!rowSet) {
    2027         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    2028         psFree(rowSet);
    2029         return false;
    2030     }
    2031 
    2032     if (!psDBInsertRows(dbh, DIMM_TABLE_NAME, rowSet)) {
    2033         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    2034         psFree(rowSet);
    2035         return false;
    2036     }
    2037 
    2038     psFree(rowSet);
    2039 
    2040     return true;
    2041 }
    2042 
    2043 bool dimmSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    2044 {
    2045     psArray         *rowSet;
    2046 
    2047     rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit);
    2048     if (!rowSet) {
    2049         return false;
    2050     }
    2051 
    2052     // output to fits
    2053     if (!psFitsWriteTable(fits, NULL, rowSet, DIMM_TABLE_NAME)) {
    2054         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    2055         psFree(rowSet);
    2056         return false;
    2057     }
    2058 
    2059     psFree(rowSet);
    2060 
    2061     return true;
    2062 }
    2063 
    2064 psMetadata *dimmMetadataFromObject(const dimmRow *object)
    2065 {
    2066     psMetadata      *md;
    2067 
    2068     md = psMetadataAlloc();
    2069     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, object->sigmax)) {
    2070         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax");
    2071         psFree(md);
    2072         return NULL;
    2073     }
    2074     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, object->sigmay)) {
    2075         psError(PS_ERR_UNKNOWN, false, "failed to add item sigmay");
    2076         psFree(md);
    2077         return NULL;
    2078     }
    2079     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, object->fwhm)) {
    2080         psError(PS_ERR_UNKNOWN, false, "failed to add item fwhm");
    2081         psFree(md);
    2082         return NULL;
    2083     }
    2084     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
    2085         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    2086         psFree(md);
    2087         return NULL;
    2088     }
    2089     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
    2090         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    2091         psFree(md);
    2092         return NULL;
    2093     }
    2094     if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, object->expttime)) {
    2095         psError(PS_ERR_UNKNOWN, false, "failed to add item expttime");
    2096         psFree(md);
    2097         return NULL;
    2098     }
    2099     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, object->telescope_id)) {
    2100         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope_id");
    2101         psFree(md);
    2102         return NULL;
    2103     }
    2104 
    2105     return md;
    2106 }
    2107 
    2108 dimmRow *dimmObjectFromMetadata(psMetadata *md)
    2109 {
    2110     bool            status;
    2111     psF32           sigmax;
    2112     psF32           sigmay;
    2113     psF32           fwhm;
    2114     psF64           ra;
    2115     psF64           decl;
    2116     psF32           expttime;
    2117     char            *telescope_id;
    2118 
    2119     sigmax = psMetadataLookupF32(&status, md, "sigmax");
    2120     if (!status) {
    2121         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmax");
    2122         return false;
    2123     }
    2124     sigmay = psMetadataLookupF32(&status, md, "sigmay");
    2125     if (!status) {
    2126         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmay");
    2127         return false;
    2128     }
    2129     fwhm = psMetadataLookupF32(&status, md, "fwhm");
    2130     if (!status) {
    2131         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm");
    2132         return false;
    2133     }
    2134     ra = psMetadataLookupF64(&status, md, "ra");
    2135     if (!status) {
    2136         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    2137         return false;
    2138     }
    2139     decl = psMetadataLookupF64(&status, md, "decl");
    2140     if (!status) {
    2141         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    2142         return false;
    2143     }
    2144     expttime = psMetadataLookupF32(&status, md, "expttime");
    2145     if (!status) {
    2146         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item expttime");
    2147         return false;
    2148     }
    2149     telescope_id = psMetadataLookupPtr(&status, md, "telescope_id");
    2150     if (!status) {
    2151         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope_id");
    2152         return false;
    2153     }
    2154 
    2155     return dimmRowAlloc(sigmax, sigmay, fwhm, ra, decl, expttime, telescope_id);
    2156 }
    2157 psArray *dimmSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    2158 {
    2159     psArray         *rowSet;
    2160     psArray         *returnSet;
    2161     psU64           i;
    2162 
    2163     rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit);
    2164     if (!rowSet) {
    2165         return NULL;
    2166     }
    2167 
    2168     // convert psMetadata rows to row objects
    2169 
    2170     returnSet = psArrayAlloc(rowSet->n);
    2171     returnSet->n = 0;
    2172 
    2173     for (i = 0; i < rowSet->n; i++) {
    2174         dimmRow *object = dimmObjectFromMetadata(rowSet->data[i]);
    2175         psArrayAdd(returnSet, 0, object);
    2176         psFree(object);
    2177     }
    2178 
    2179     psFree(rowSet);
    2180 
    2181     return returnSet;
    2182 }
    2183 bool dimmDeleteObject(psDB *dbh, const dimmRow *object)
    2184 {
    2185     psMetadata *where = dimmMetadataFromObject(object);
    2186     long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, 0);
    2187     psFree(where)
    2188     if (count < 0) {
    2189         psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
    2190         return false;
    2191     }
    2192     if (count > 1) {
    2193         // XXX should this be a psAbort() instead?  It is possible that
    2194         // having an object match multiple rows was by design.
    2195         psError(PS_ERR_UNKNOWN, true, "dimmRow object matched more then one row.  Check your database schema");
    2196         return false;
    2197     }
    2198 
    2199     return true;
    2200 }
    2201 long long dimmDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    2202 {
    2203     long long       deleted = 0;
    2204 
    2205     for (long long i = 0; i < objects->n; i++) {
    2206         dimmRow *object = objects->data[i];
    2207         psMetadata *where = dimmMetadataFromObject(object);
    2208         long long count = psDBDeleteRows(dbh, DIMM_TABLE_NAME, where, limit);
    2209         psFree(where)
    2210         if (count < 0) {
    2211             psError(PS_ERR_UNKNOWN, true, "failed to delete row from dimm");
    2212             return count;
    2213         }
    2214 
    2215         deleted += count;
    2216     }
    2217 
    2218     return deleted;
    2219 }
    2220 bool dimmPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    2221 {
    2222     PS_ASSERT_PTR_NON_NULL(objects, false);
    2223 
    2224     psMetadata *output = psMetadataAlloc();
    2225     for (long i = 0; i < psArrayLength(objects); i++) {
    2226         psMetadata *md = dimmMetadataFromObject(objects->data[i]);
    2227         if (!psMetadataAddMetadata(
    2228             output,
    2229             PS_LIST_TAIL,
    2230             DIMM_TABLE_NAME,
    2231             PS_META_DUPLICATE_OK,
    2232             NULL,
    2233             md
    2234         )) {
    2235             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    2236             psFree(md);
    2237             psFree(output);
    2238             return false;
    2239         }
    2240         psFree(md);
    2241     }
    2242 
    2243     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    2244         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    2245         psFree(output);
    2246     }
    2247     psFree(output);
    2248 
    2249     return true;
    2250 }
    2251 static void skyp_irRowFree(skyp_irRow *object);
    2252 
    2253 skyp_irRow *skyp_irRowAlloc(psF64 sky_bright, psF64 sky_var, psF64 ra, psF64 decl, psF32 fov_x, psF32 fov_y)
    2254 {
    2255     skyp_irRow      *_object;
    2256 
    2257     _object = psAlloc(sizeof(skyp_irRow));
    2258     psMemSetDeallocator(_object, (psFreeFunc)skyp_irRowFree);
    2259 
    2260     _object->sky_bright = sky_bright;
    2261     _object->sky_var = sky_var;
    2262     _object->ra = ra;
    2263     _object->decl = decl;
    2264     _object->fov_x = fov_x;
    2265     _object->fov_y = fov_y;
    2266 
    2267     return _object;
    2268 }
    2269 
    2270 static void skyp_irRowFree(skyp_irRow *object)
    2271 {
    2272 }
    2273 
    2274 bool skyp_irCreateTable(psDB *dbh)
    2275 {
    2276     psMetadata      *md;
    2277     bool            status;
    2278 
    2279     md = psMetadataAlloc();
    2280     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) {
    2281         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    2282         psFree(md);
    2283         return false;
    2284     }
    2285     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, 0.0)) {
    2286         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
    2287         psFree(md);
    2288         return false;
    2289     }
    2290     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
    2291         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    2292         psFree(md);
    2293         return false;
    2294     }
    2295     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
    2296         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    2297         psFree(md);
    2298         return false;
    2299     }
    2300     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, 0.0)) {
    2301         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
    2302         psFree(md);
    2303         return false;
    2304     }
    2305     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, 0.0)) {
    2306         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
    2307         psFree(md);
    2308         return false;
    2309     }
    2310 
    2311     status = psDBCreateTable(dbh, SKYP_IR_TABLE_NAME, md);
    2312 
    2313     psFree(md);
    2314 
    2315     return status;
    2316 }
    2317 
    2318 bool skyp_irDropTable(psDB *dbh)
    2319 {
    2320     return psDBDropTable(dbh, SKYP_IR_TABLE_NAME);
    2321 }
    2322 
    2323 bool skyp_irInsert(psDB * dbh, psF64 sky_bright, psF64 sky_var, psF64 ra, psF64 decl, psF32 fov_x, psF32 fov_y)
    2324 {
    2325     psMetadata      *md;
    2326     bool            status;
    2327 
    2328     md = psMetadataAlloc();
    2329     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, sky_bright)) {
    2330         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    2331         psFree(md);
    2332         return false;
    2333     }
    2334     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, sky_var)) {
    2335         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
    2336         psFree(md);
    2337         return false;
    2338     }
    2339     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
    2340         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    2341         psFree(md);
    2342         return false;
    2343     }
    2344     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
    2345         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    2346         psFree(md);
    2347         return false;
    2348     }
    2349     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, fov_x)) {
    2350         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
    2351         psFree(md);
    2352         return false;
    2353     }
    2354     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, fov_y)) {
    2355         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
    2356         psFree(md);
    2357         return false;
    2358     }
    2359 
    2360     status = psDBInsertOneRow(dbh, SKYP_IR_TABLE_NAME, md);
    2361     psFree(md);
    2362 
    2363     return status;
    2364 }
    2365 
    2366 long long skyp_irDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    2367 {
    2368     long long       deleted = 0;
    2369 
    2370     long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
    2371     if (count < 0) {
    2372         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
    2373         return count;
    2374 
    2375         deleted += count;
    2376     }
    2377 
    2378     return deleted;
    2379 }
    2380 bool skyp_irInsertObject(psDB *dbh, skyp_irRow *object)
    2381 {
    2382     return skyp_irInsert(dbh, object->sky_bright, object->sky_var, object->ra, object->decl, object->fov_x, object->fov_y);
    2383 }
    2384 
    2385 bool skyp_irInsertObjects(psDB *dbh, psArray *objects)
    2386 {
    2387     for (long i = 0; i < psArrayLength(objects); i++) {
    2388         if (!skyp_irInsertObject(dbh, objects->data[i])) {
    2389             return false;
    2390         }
    2391     }
    2392 
    2393     return true;
    2394 }
    2395 
    2396 bool skyp_irInsertFits(psDB *dbh, const psFits *fits)
    2397 {
    2398     psArray         *rowSet;
    2399 
    2400     // move to (the first?) extension named  SKYP_IR_TABLE_NAME
    2401     if (!psFitsMoveExtName(fits, SKYP_IR_TABLE_NAME)) {
    2402         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SKYP_IR_TABLE_NAME);
    2403         return false;
    2404     }
    2405 
    2406     // check HDU type
    2407     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    2408         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    2409         return false;
    2410     }
    2411 
    2412     // read fits table
    2413     rowSet = psFitsReadTable(fits);
    2414     if (!rowSet) {
    2415         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    2416         psFree(rowSet);
    2417         return false;
    2418     }
    2419 
    2420     if (!psDBInsertRows(dbh, SKYP_IR_TABLE_NAME, rowSet)) {
    2421         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    2422         psFree(rowSet);
    2423         return false;
    2424     }
    2425 
    2426     psFree(rowSet);
    2427 
    2428     return true;
    2429 }
    2430 
    2431 bool skyp_irSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    2432 {
    2433     psArray         *rowSet;
    2434 
    2435     rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
    2436     if (!rowSet) {
    2437         return false;
    2438     }
    2439 
    2440     // output to fits
    2441     if (!psFitsWriteTable(fits, NULL, rowSet, SKYP_IR_TABLE_NAME)) {
    2442         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    2443         psFree(rowSet);
    2444         return false;
    2445     }
    2446 
    2447     psFree(rowSet);
    2448 
    2449     return true;
    2450 }
    2451 
    2452 psMetadata *skyp_irMetadataFromObject(const skyp_irRow *object)
    2453 {
    2454     psMetadata      *md;
    2455 
    2456     md = psMetadataAlloc();
    2457     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, object->sky_bright)) {
    2458         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright");
    2459         psFree(md);
    2460         return NULL;
    2461     }
    2462     if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, object->sky_var)) {
    2463         psError(PS_ERR_UNKNOWN, false, "failed to add item sky_var");
    2464         psFree(md);
    2465         return NULL;
    2466     }
    2467     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
    2468         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    2469         psFree(md);
    2470         return NULL;
    2471     }
    2472     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
    2473         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    2474         psFree(md);
    2475         return NULL;
    2476     }
    2477     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, object->fov_x)) {
    2478         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_x");
    2479         psFree(md);
    2480         return NULL;
    2481     }
    2482     if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, object->fov_y)) {
    2483         psError(PS_ERR_UNKNOWN, false, "failed to add item fov_y");
    2484         psFree(md);
    2485         return NULL;
    2486     }
    2487 
    2488     return md;
    2489 }
    2490 
    2491 skyp_irRow *skyp_irObjectFromMetadata(psMetadata *md)
    2492 {
    2493     bool            status;
    2494     psF64           sky_bright;
    2495     psF64           sky_var;
    2496     psF64           ra;
    2497     psF64           decl;
    2498     psF32           fov_x;
    2499     psF32           fov_y;
    2500 
    2501     sky_bright = psMetadataLookupF64(&status, md, "sky_bright");
    2502     if (!status) {
    2503         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");
    2504         return false;
    2505     }
    2506     sky_var = psMetadataLookupF64(&status, md, "sky_var");
    2507     if (!status) {
    2508         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_var");
    2509         return false;
    2510     }
    2511     ra = psMetadataLookupF64(&status, md, "ra");
    2512     if (!status) {
    2513         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    2514         return false;
    2515     }
    2516     decl = psMetadataLookupF64(&status, md, "decl");
    2517     if (!status) {
    2518         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    2519         return false;
    2520     }
    2521     fov_x = psMetadataLookupF32(&status, md, "fov_x");
    2522     if (!status) {
    2523         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_x");
    2524         return false;
    2525     }
    2526     fov_y = psMetadataLookupF32(&status, md, "fov_y");
    2527     if (!status) {
    2528         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_y");
    2529         return false;
    2530     }
    2531 
    2532     return skyp_irRowAlloc(sky_bright, sky_var, ra, decl, fov_x, fov_y);
    2533 }
    2534 psArray *skyp_irSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    2535 {
    2536     psArray         *rowSet;
    2537     psArray         *returnSet;
    2538     psU64           i;
    2539 
    2540     rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
    2541     if (!rowSet) {
    2542         return NULL;
    2543     }
    2544 
    2545     // convert psMetadata rows to row objects
    2546 
    2547     returnSet = psArrayAlloc(rowSet->n);
    2548     returnSet->n = 0;
    2549 
    2550     for (i = 0; i < rowSet->n; i++) {
    2551         skyp_irRow *object = skyp_irObjectFromMetadata(rowSet->data[i]);
    2552         psArrayAdd(returnSet, 0, object);
    2553         psFree(object);
    2554     }
    2555 
    2556     psFree(rowSet);
    2557 
    2558     return returnSet;
    2559 }
    2560 bool skyp_irDeleteObject(psDB *dbh, const skyp_irRow *object)
    2561 {
    2562     psMetadata *where = skyp_irMetadataFromObject(object);
    2563     long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, 0);
    2564     psFree(where)
    2565     if (count < 0) {
    2566         psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
    2567         return false;
    2568     }
    2569     if (count > 1) {
    2570         // XXX should this be a psAbort() instead?  It is possible that
    2571         // having an object match multiple rows was by design.
    2572         psError(PS_ERR_UNKNOWN, true, "skyp_irRow object matched more then one row.  Check your database schema");
    2573         return false;
    2574     }
    2575 
    2576     return true;
    2577 }
    2578 long long skyp_irDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    2579 {
    2580     long long       deleted = 0;
    2581 
    2582     for (long long i = 0; i < objects->n; i++) {
    2583         skyp_irRow *object = objects->data[i];
    2584         psMetadata *where = skyp_irMetadataFromObject(object);
    2585         long long count = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, where, limit);
    2586         psFree(where)
    2587         if (count < 0) {
    2588             psError(PS_ERR_UNKNOWN, true, "failed to delete row from skyp_ir");
    2589             return count;
    2590         }
    2591 
    2592         deleted += count;
    2593     }
    2594 
    2595     return deleted;
    2596 }
    2597 bool skyp_irPrintObjects(FILE *stream, psArray *objects, bool mdcf)
    2598 {
    2599     PS_ASSERT_PTR_NON_NULL(objects, false);
    2600 
    2601     psMetadata *output = psMetadataAlloc();
    2602     for (long i = 0; i < psArrayLength(objects); i++) {
    2603         psMetadata *md = skyp_irMetadataFromObject(objects->data[i]);
    2604         if (!psMetadataAddMetadata(
    2605             output,
    2606             PS_LIST_TAIL,
    2607             SKYP_IR_TABLE_NAME,
    2608             PS_META_DUPLICATE_OK,
    2609             NULL,
    2610             md
    2611         )) {
    2612             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    2613             psFree(md);
    2614             psFree(output);
    2615             return false;
    2616         }
    2617         psFree(md);
    2618     }
    2619 
    2620     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    2621         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    2622         psFree(output);
    2623     }
    2624     psFree(output);
    2625 
    2626     return true;
    2627 }
    2628 static void domeRowFree(domeRow *object);
    2629 
    2630 domeRow *domeRowAlloc(psF32 az, bool open, bool light, bool track)
    2631 {
    2632     domeRow         *_object;
    2633 
    2634     _object = psAlloc(sizeof(domeRow));
    2635     psMemSetDeallocator(_object, (psFreeFunc)domeRowFree);
    2636 
    2637     _object->az = az;
    2638     _object->open = open;
    2639     _object->light = light;
    2640     _object->track = track;
    2641 
    2642     return _object;
    2643 }
    2644 
    2645 static void domeRowFree(domeRow *object)
    2646 {
    2647 }
    2648 
    2649 bool domeCreateTable(psDB *dbh)
    2650 {
    2651     psMetadata      *md;
    2652     bool            status;
    2653 
    2654     md = psMetadataAlloc();
    2655     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
    2656         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    2657         psFree(md);
    2658         return false;
    2659     }
    2660     if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, true)) {
    2661         psError(PS_ERR_UNKNOWN, false, "failed to add item open");
    2662         psFree(md);
    2663         return false;
    2664     }
    2665     if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, true)) {
    2666         psError(PS_ERR_UNKNOWN, false, "failed to add item light");
    2667         psFree(md);
    2668         return false;
    2669     }
    2670     if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, true)) {
    2671         psError(PS_ERR_UNKNOWN, false, "failed to add item track");
    2672         psFree(md);
    2673         return false;
    2674     }
    2675 
    2676     status = psDBCreateTable(dbh, DOME_TABLE_NAME, md);
    2677 
    2678     psFree(md);
    2679 
    2680     return status;
    2681 }
    2682 
    2683 bool domeDropTable(psDB *dbh)
    2684 {
    2685     return psDBDropTable(dbh, DOME_TABLE_NAME);
    2686 }
    2687 
    2688 bool domeInsert(psDB * dbh, psF32 az, bool open, bool light, bool track)
    2689 {
    2690     psMetadata      *md;
    2691     bool            status;
    2692 
    2693     md = psMetadataAlloc();
    2694     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
    2695         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    2696         psFree(md);
    2697         return false;
    2698     }
    2699     if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, open)) {
    2700         psError(PS_ERR_UNKNOWN, false, "failed to add item open");
    2701         psFree(md);
    2702         return false;
    2703     }
    2704     if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, light)) {
    2705         psError(PS_ERR_UNKNOWN, false, "failed to add item light");
    2706         psFree(md);
    2707         return false;
    2708     }
    2709     if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, track)) {
    2710         psError(PS_ERR_UNKNOWN, false, "failed to add item track");
    2711         psFree(md);
    2712         return false;
    2713     }
    2714 
    2715     status = psDBInsertOneRow(dbh, DOME_TABLE_NAME, md);
    2716     psFree(md);
    2717 
    2718     return status;
    2719 }
    2720 
    2721 long long domeDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    2722 {
    2723     long long       deleted = 0;
    2724 
    2725     long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, limit);
    2726     if (count < 0) {
    2727         psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
    2728         return count;
    2729 
    2730         deleted += count;
    2731     }
    2732 
    2733     return deleted;
    2734 }
    2735 bool domeInsertObject(psDB *dbh, domeRow *object)
    2736 {
    2737     return domeInsert(dbh, object->az, object->open, object->light, object->track);
    2738 }
    2739 
    2740 bool domeInsertObjects(psDB *dbh, psArray *objects)
    2741 {
    2742     for (long i = 0; i < psArrayLength(objects); i++) {
    2743         if (!domeInsertObject(dbh, objects->data[i])) {
    2744             return false;
    2745         }
    2746     }
    2747 
    2748     return true;
    2749 }
    2750 
    2751 bool domeInsertFits(psDB *dbh, const psFits *fits)
    2752 {
    2753     psArray         *rowSet;
    2754 
    2755     // move to (the first?) extension named  DOME_TABLE_NAME
    2756     if (!psFitsMoveExtName(fits, DOME_TABLE_NAME)) {
    2757         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DOME_TABLE_NAME);
    2758         return false;
    2759     }
    2760 
    2761     // check HDU type
    2762     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    2763         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    2764         return false;
    2765     }
    2766 
    2767     // read fits table
    2768     rowSet = psFitsReadTable(fits);
    2769     if (!rowSet) {
    2770         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    2771         psFree(rowSet);
    2772         return false;
    2773     }
    2774 
    2775     if (!psDBInsertRows(dbh, DOME_TABLE_NAME, rowSet)) {
    2776         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    2777         psFree(rowSet);
    2778         return false;
    2779     }
    2780 
    2781     psFree(rowSet);
    2782 
    2783     return true;
    2784 }
    2785 
    2786 bool domeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    2787 {
    2788     psArray         *rowSet;
    2789 
    2790     rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit);
    2791     if (!rowSet) {
    2792         return false;
    2793     }
    2794 
    2795     // output to fits
    2796     if (!psFitsWriteTable(fits, NULL, rowSet, DOME_TABLE_NAME)) {
    2797         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    2798         psFree(rowSet);
    2799         return false;
    2800     }
    2801 
    2802     psFree(rowSet);
    2803 
    2804     return true;
    2805 }
    2806 
    2807 psMetadata *domeMetadataFromObject(const domeRow *object)
    2808 {
    2809     psMetadata      *md;
    2810 
    2811     md = psMetadataAlloc();
    2812     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
    2813         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    2814         psFree(md);
    2815         return NULL;
    2816     }
    2817     if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, object->open)) {
    2818         psError(PS_ERR_UNKNOWN, false, "failed to add item open");
    2819         psFree(md);
    2820         return NULL;
    2821     }
    2822     if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, object->light)) {
    2823         psError(PS_ERR_UNKNOWN, false, "failed to add item light");
    2824         psFree(md);
    2825         return NULL;
    2826     }
    2827     if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, object->track)) {
    2828         psError(PS_ERR_UNKNOWN, false, "failed to add item track");
    2829         psFree(md);
    2830         return NULL;
    2831     }
    2832 
    2833     return md;
    2834 }
    2835 
    2836 domeRow *domeObjectFromMetadata(psMetadata *md)
    2837 {
    2838     bool            status;
    2839     psF32           az;
    2840     bool            open;
    2841     bool            light;
    2842     bool            track;
    2843 
    2844     az = psMetadataLookupF32(&status, md, "az");
    2845     if (!status) {
    2846         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
    2847         return false;
    2848     }
    2849     open = psMetadataLookupBool(&status, md, "open");
    2850     if (!status) {
    2851         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item open");
    2852         return false;
    2853     }
    2854     light = psMetadataLookupBool(&status, md, "light");
    2855     if (!status) {
    2856         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item light");
    2857         return false;
    2858     }
    2859     track = psMetadataLookupBool(&status, md, "track");
    2860     if (!status) {
    2861         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item track");
    2862         return false;
    2863     }
    2864 
    2865     return domeRowAlloc(az, open, light, track);
    2866 }
    2867 psArray *domeSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    2868 {
    2869     psArray         *rowSet;
    2870     psArray         *returnSet;
    2871     psU64           i;
    2872 
    2873     rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit);
    2874     if (!rowSet) {
    2875         return NULL;
    2876     }
    2877 
    2878     // convert psMetadata rows to row objects
    2879 
    2880     returnSet = psArrayAlloc(rowSet->n);
    2881     returnSet->n = 0;
    2882 
    2883     for (i = 0; i < rowSet->n; i++) {
    2884         domeRow *object = domeObjectFromMetadata(rowSet->data[i]);
    2885         psArrayAdd(returnSet, 0, object);
    2886         psFree(object);
    2887     }
    2888 
    2889     psFree(rowSet);
    2890 
    2891     return returnSet;
    2892 }
    2893 bool domeDeleteObject(psDB *dbh, const domeRow *object)
    2894 {
    2895     psMetadata *where = domeMetadataFromObject(object);
    2896     long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, 0);
    2897     psFree(where)
    2898     if (count < 0) {
    2899         psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
    2900         return false;
    2901     }
    2902     if (count > 1) {
    2903         // XXX should this be a psAbort() instead?  It is possible that
    2904         // having an object match multiple rows was by design.
    2905         psError(PS_ERR_UNKNOWN, true, "domeRow object matched more then one row.  Check your database schema");
    2906         return false;
    2907     }
    2908 
    2909     return true;
    2910 }
    2911 long long domeDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    2912 {
    2913     long long       deleted = 0;
    2914 
    2915     for (long long i = 0; i < objects->n; i++) {
    2916         domeRow *object = objects->data[i];
    2917         psMetadata *where = domeMetadataFromObject(object);
    2918         long long count = psDBDeleteRows(dbh, DOME_TABLE_NAME, where, limit);
    2919         psFree(where)
    2920         if (count < 0) {
    2921             psError(PS_ERR_UNKNOWN, true, "failed to delete row from dome");
    2922             return count;
    2923         }
    2924 
    2925         deleted += count;
    2926     }
    2927 
    2928     return deleted;
    2929 }
    2930 bool domePrintObjects(FILE *stream, psArray *objects, bool mdcf)
    2931 {
    2932     PS_ASSERT_PTR_NON_NULL(objects, false);
    2933 
    2934     psMetadata *output = psMetadataAlloc();
    2935     for (long i = 0; i < psArrayLength(objects); i++) {
    2936         psMetadata *md = domeMetadataFromObject(objects->data[i]);
    2937         if (!psMetadataAddMetadata(
    2938             output,
    2939             PS_LIST_TAIL,
    2940             DOME_TABLE_NAME,
    2941             PS_META_DUPLICATE_OK,
    2942             NULL,
    2943             md
    2944         )) {
    2945             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    2946             psFree(md);
    2947             psFree(output);
    2948             return false;
    2949         }
    2950         psFree(md);
    2951     }
    2952 
    2953     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    2954         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    2955         psFree(output);
    2956     }
    2957     psFree(output);
    2958 
    2959     return true;
    2960 }
    2961 static void telescopeRowFree(telescopeRow *object);
    2962 
    2963 telescopeRow *telescopeRowAlloc(const char *guide, psF32 alt, psF32 az, psF64 ra, psF64 decl)
    2964 {
    2965     telescopeRow    *_object;
    2966 
    2967     _object = psAlloc(sizeof(telescopeRow));
    2968     psMemSetDeallocator(_object, (psFreeFunc)telescopeRowFree);
    2969 
    2970     _object->guide = psStringCopy(guide);
    2971     _object->alt = alt;
    2972     _object->az = az;
    2973     _object->ra = ra;
    2974     _object->decl = decl;
    2975 
    2976     return _object;
    2977 }
    2978 
    2979 static void telescopeRowFree(telescopeRow *object)
    2980 {
    2981     psFree(object->guide);
    2982 }
    2983 
    2984 bool telescopeCreateTable(psDB *dbh)
    2985 {
    2986     psMetadata      *md;
    2987     bool            status;
    2988 
    2989     md = psMetadataAlloc();
    2990     if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, "255")) {
    2991         psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
    2992         psFree(md);
    2993         return false;
    2994     }
    2995     if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
    2996         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    2997         psFree(md);
    2998         return false;
    2999     }
    3000     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
    3001         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    3002         psFree(md);
    3003         return false;
    3004     }
    3005     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
    3006         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    3007         psFree(md);
    3008         return false;
    3009     }
    3010     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
    3011         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    3012         psFree(md);
    3013         return false;
    3014     }
    3015 
    3016     status = psDBCreateTable(dbh, TELESCOPE_TABLE_NAME, md);
    3017 
    3018     psFree(md);
    3019 
    3020     return status;
    3021 }
    3022 
    3023 bool telescopeDropTable(psDB *dbh)
    3024 {
    3025     return psDBDropTable(dbh, TELESCOPE_TABLE_NAME);
    3026 }
    3027 
    3028 bool telescopeInsert(psDB * dbh, const char *guide, psF32 alt, psF32 az, psF64 ra, psF64 decl)
    3029 {
    3030     psMetadata      *md;
    3031     bool            status;
    3032 
    3033     md = psMetadataAlloc();
    3034     if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, guide)) {
    3035         psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
    3036         psFree(md);
    3037         return false;
    3038     }
    3039     if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
    3040         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    3041         psFree(md);
    3042         return false;
    3043     }
    3044     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
    3045         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    3046         psFree(md);
    3047         return false;
    3048     }
    3049     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
    3050         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    3051         psFree(md);
    3052         return false;
    3053     }
    3054     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
    3055         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    3056         psFree(md);
    3057         return false;
    3058     }
    3059 
    3060     status = psDBInsertOneRow(dbh, TELESCOPE_TABLE_NAME, md);
    3061     psFree(md);
    3062 
    3063     return status;
    3064 }
    3065 
    3066 long long telescopeDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    3067 {
    3068     long long       deleted = 0;
    3069 
    3070     long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
    3071     if (count < 0) {
    3072         psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
    3073         return count;
    3074 
    3075         deleted += count;
    3076     }
    3077 
    3078     return deleted;
    3079 }
    3080 bool telescopeInsertObject(psDB *dbh, telescopeRow *object)
    3081 {
    3082     return telescopeInsert(dbh, object->guide, object->alt, object->az, object->ra, object->decl);
    3083 }
    3084 
    3085 bool telescopeInsertObjects(psDB *dbh, psArray *objects)
    3086 {
    3087     for (long i = 0; i < psArrayLength(objects); i++) {
    3088         if (!telescopeInsertObject(dbh, objects->data[i])) {
    3089             return false;
    3090         }
    3091     }
    3092 
    3093     return true;
    3094 }
    3095 
    3096 bool telescopeInsertFits(psDB *dbh, const psFits *fits)
    3097 {
    3098     psArray         *rowSet;
    3099 
    3100     // move to (the first?) extension named  TELESCOPE_TABLE_NAME
    3101     if (!psFitsMoveExtName(fits, TELESCOPE_TABLE_NAME)) {
    3102         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", TELESCOPE_TABLE_NAME);
    3103         return false;
    3104     }
    3105 
    3106     // check HDU type
    3107     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    3108         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    3109         return false;
    3110     }
    3111 
    3112     // read fits table
    3113     rowSet = psFitsReadTable(fits);
    3114     if (!rowSet) {
    3115         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    3116         psFree(rowSet);
    3117         return false;
    3118     }
    3119 
    3120     if (!psDBInsertRows(dbh, TELESCOPE_TABLE_NAME, rowSet)) {
    3121         psError(PS_ERR_UNKNOWN, false, "databse insert failed");
    3122         psFree(rowSet);
    3123         return false;
    3124     }
    3125 
    3126     psFree(rowSet);
    3127 
    3128     return true;
    3129 }
    3130 
    3131 bool telescopeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
    3132 {
    3133     psArray         *rowSet;
    3134 
    3135     rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
    3136     if (!rowSet) {
    3137         return false;
    3138     }
    3139 
    3140     // output to fits
    3141     if (!psFitsWriteTable(fits, NULL, rowSet, TELESCOPE_TABLE_NAME)) {
    3142         psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
    3143         psFree(rowSet);
    3144         return false;
    3145     }
    3146 
    3147     psFree(rowSet);
    3148 
    3149     return true;
    3150 }
    3151 
    3152 psMetadata *telescopeMetadataFromObject(const telescopeRow *object)
    3153 {
    3154     psMetadata      *md;
    3155 
    3156     md = psMetadataAlloc();
    3157     if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, object->guide)) {
    3158         psError(PS_ERR_UNKNOWN, false, "failed to add item guide");
    3159         psFree(md);
    3160         return NULL;
    3161     }
    3162     if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
    3163         psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    3164         psFree(md);
    3165         return NULL;
    3166     }
    3167     if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
    3168         psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    3169         psFree(md);
    3170         return NULL;
    3171     }
    3172     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
    3173         psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    3174         psFree(md);
    3175         return NULL;
    3176     }
    3177     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
    3178         psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    3179         psFree(md);
    3180         return NULL;
    3181     }
    3182 
    3183     return md;
    3184 }
    3185 
    3186 telescopeRow *telescopeObjectFromMetadata(psMetadata *md)
    3187 {
    3188     bool            status;
    3189     char            *guide;
    3190     psF32           alt;
    3191     psF32           az;
    3192     psF64           ra;
    3193     psF64           decl;
    3194 
    3195     guide = psMetadataLookupPtr(&status, md, "guide");
    3196     if (!status) {
    3197         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item guide");
    3198         return false;
    3199     }
    3200     alt = psMetadataLookupF32(&status, md, "alt");
    3201     if (!status) {
    3202         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
    3203         return false;
    3204     }
    3205     az = psMetadataLookupF32(&status, md, "az");
    3206     if (!status) {
    3207         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
    3208         return false;
    3209     }
    3210     ra = psMetadataLookupF64(&status, md, "ra");
    3211     if (!status) {
    3212         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    3213         return false;
    3214     }
    3215     decl = psMetadataLookupF64(&status, md, "decl");
    3216     if (!status) {
    3217         psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    3218         return false;
    3219     }
    3220 
    3221     return telescopeRowAlloc(guide, alt, az, ra, decl);
    3222 }
    3223 psArray *telescopeSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
    3224 {
    3225     psArray         *rowSet;
    3226     psArray         *returnSet;
    3227     psU64           i;
    3228 
    3229     rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
    3230     if (!rowSet) {
    3231         return NULL;
    3232     }
    3233 
    3234     // convert psMetadata rows to row objects
    3235 
    3236     returnSet = psArrayAlloc(rowSet->n);
    3237     returnSet->n = 0;
    3238 
    3239     for (i = 0; i < rowSet->n; i++) {
    3240         telescopeRow *object = telescopeObjectFromMetadata(rowSet->data[i]);
    3241         psArrayAdd(returnSet, 0, object);
    3242         psFree(object);
    3243     }
    3244 
    3245     psFree(rowSet);
    3246 
    3247     return returnSet;
    3248 }
    3249 bool telescopeDeleteObject(psDB *dbh, const telescopeRow *object)
    3250 {
    3251     psMetadata *where = telescopeMetadataFromObject(object);
    3252     long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, 0);
    3253     psFree(where)
    3254     if (count < 0) {
    3255         psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
    3256         return false;
    3257     }
    3258     if (count > 1) {
    3259         // XXX should this be a psAbort() instead?  It is possible that
    3260         // having an object match multiple rows was by design.
    3261         psError(PS_ERR_UNKNOWN, true, "telescopeRow object matched more then one row.  Check your database schema");
    3262         return false;
    3263     }
    3264 
    3265     return true;
    3266 }
    3267 long long telescopeDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
    3268 {
    3269     long long       deleted = 0;
    3270 
    3271     for (long long i = 0; i < objects->n; i++) {
    3272         telescopeRow *object = objects->data[i];
    3273         psMetadata *where = telescopeMetadataFromObject(object);
    3274         long long count = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, where, limit);
    3275         psFree(where)
    3276         if (count < 0) {
    3277             psError(PS_ERR_UNKNOWN, true, "failed to delete row from telescope");
    3278             return count;
    3279         }
    3280 
    3281         deleted += count;
    3282     }
    3283 
    3284     return deleted;
    3285 }
    3286 bool telescopePrintObjects(FILE *stream, psArray *objects, bool mdcf)
    3287 {
    3288     PS_ASSERT_PTR_NON_NULL(objects, false);
    3289 
    3290     psMetadata *output = psMetadataAlloc();
    3291     for (long i = 0; i < psArrayLength(objects); i++) {
    3292         psMetadata *md = telescopeMetadataFromObject(objects->data[i]);
    3293         if (!psMetadataAddMetadata(
    3294             output,
    3295             PS_LIST_TAIL,
    3296             TELESCOPE_TABLE_NAME,
    3297             PS_META_DUPLICATE_OK,
    3298             NULL,
    3299             md
    3300         )) {
    3301             psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
    3302             psFree(md);
    3303             psFree(output);
    3304             return false;
    3305         }
    3306         psFree(md);
    3307     }
    3308 
    3309     if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
    3310         psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
    3311         psFree(output);
    3312     }
    3313     psFree(output);
    3314 
    3315     return true;
    3316 }
    3317 static void summitExpRowFree(summitExpRow *object);
    3318 
    3319 summitExpRow *summitExpRowAlloc(const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
    3320 {
    3321     summitExpRow    *_object;
    3322 
    3323     _object = psAlloc(sizeof(summitExpRow));
    3324     psMemSetDeallocator(_object, (psFreeFunc)summitExpRowFree);
    3325 
    3326     _object->exp_id = psStringCopy(exp_id);
    3327     _object->camera = psStringCopy(camera);
    3328     _object->telescope = psStringCopy(telescope);
    3329     _object->exp_type = psStringCopy(exp_type);
    3330     _object->uri = psStringCopy(uri);
    3331 
    3332     return _object;
    3333 }
    3334 
    3335 static void summitExpRowFree(summitExpRow *object)
    3336 {
    3337     psFree(object->exp_id);
    3338     psFree(object->camera);
    3339     psFree(object->telescope);
    3340     psFree(object->exp_type);
    3341     psFree(object->uri);
    3342 }
    3343 
    3344 bool summitExpCreateTable(psDB *dbh)
    3345 {
    3346     psMetadata      *md;
    3347     bool            status;
    3348 
    3349     md = psMetadataAlloc();
    3350     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
    3351         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3352         psFree(md);
    3353         return false;
    3354     }
    3355     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
    3356         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3357         psFree(md);
    3358         return false;
    3359     }
    3360     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
    3361         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3362         psFree(md);
    3363         return false;
    3364     }
    3365     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
    3366         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3367         psFree(md);
    3368         return false;
    3369     }
    3370     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
    3371         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    3372         psFree(md);
    3373         return false;
    3374     }
    3375 
    3376     status = psDBCreateTable(dbh, SUMMITEXP_TABLE_NAME, md);
    3377 
    3378     psFree(md);
    3379 
    3380     return status;
    3381 }
    3382 
    3383 bool summitExpDropTable(psDB *dbh)
    3384 {
    3385     return psDBDropTable(dbh, SUMMITEXP_TABLE_NAME);
    3386 }
    3387 
    3388 bool summitExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, const char *uri)
    3389 {
    3390     psMetadata      *md;
    3391     bool            status;
    3392 
    3393     md = psMetadataAlloc();
    3394     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
    3395         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3396         psFree(md);
    3397         return false;
    3398     }
    3399     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
    3400         psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3401         psFree(md);
    3402         return false;
    3403     }
    3404     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
    3405         psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3406         psFree(md);
    3407         return false;
    3408     }
    3409     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
    3410         psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3411         psFree(md);
    3412         return false;
    3413     }
    3414     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
    3415         psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    3416         psFree(md);
    3417         return false;
    3418     }
    3419 
    3420     status = psDBInsertOneRow(dbh, SUMMITEXP_TABLE_NAME, md);
    3421     psFree(md);
    3422 
    3423     return status;
    3424 }
    3425 
    3426 long long summitExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
    3427 {
    3428     long long       deleted = 0;
    3429 
    3430     long long count = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, where, limit);
    3431     if (count < 0) {
    3432         psError(PS_ERR_UNKNOWN, true, "failed to delete row from summitExp");
    3433         return count;
    3434 
    3435         deleted += count;
    3436     }
    3437 
    3438     return deleted;
    3439 }
    3440 bool summitExpInsertObject(psDB *dbh, summitExpRow *object)
    3441 {
    3442     return summitExpInsert(dbh, object->exp_id, object->camera, object->telescope, object->exp_type, object->uri);
    3443 }
    3444 
    3445 bool summitExpInsertObjects(psDB *dbh, psArray *objects)
    3446 {
    3447     for (long i = 0; i < psArrayLength(objects); i++) {
    3448         if (!summitExpInsertObject(dbh, objects->data[i])) {
    3449             return false;
    3450         }
    3451     }
    3452 
    3453     return true;
    3454 }
    3455 
    3456 bool summitExpInsertFits(psDB *dbh, const psFits *fits)
    3457 {
    3458     psArray         *rowSet;
    3459 
    3460     // move to (the first?) extension named  SUMMITEXP_TABLE_NAME
    3461     if (!psFitsMoveExtName(fits, SUMMITEXP_TABLE_NAME)) {
    3462         psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", SUMMITEXP_TABLE_NAME);
    3463         return false;
    3464     }
    3465 
    3466     // check HDU type
    3467     if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
    3468         psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
    3469         return false;
    3470     }
    3471 
    3472     // read fits table
    3473     rowSet = psFitsReadTable(fits);
    3474     if (!rowSet) {
    3475         psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
    3476         psFree(rowSet);
    3477         return false;
    3478     }
    3479 
    3480379    if (!psDBInsertRows(dbh, SUMMITEXP_TABLE_NAME, rowSet)) {
    3481380        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     
    3512411psMetadata *summitExpMetadataFromObject(const summitExpRow *object)
    3513412{
    3514     psMetadata      *md;
    3515 
    3516     md = psMetadataAlloc();
    3517     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
     413    psMetadata *md = psMetadataAlloc();
     414    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
    3518415        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3519416        psFree(md);
    3520         return NULL;
    3521     }
    3522     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     417        return false;
     418    }
     419    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    3523420        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3524421        psFree(md);
    3525         return NULL;
    3526     }
    3527     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     422        return false;
     423    }
     424    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    3528425        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3529426        psFree(md);
    3530         return NULL;
    3531     }
    3532     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     427        return false;
     428    }
     429    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    3533430        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3534431        psFree(md);
    3535         return NULL;
    3536     }
    3537     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     432        return false;
     433    }
     434    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    3538435        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    3539436        psFree(md);
    3540         return NULL;
    3541     }
     437        return false;
     438    }
     439
    3542440
    3543441    return md;
     
    3546444summitExpRow *summitExpObjectFromMetadata(psMetadata *md)
    3547445{
    3548     bool            status;
    3549     char            *exp_id;
    3550     char            *camera;
    3551     char            *telescope;
    3552     char            *exp_type;
    3553     char            *uri;
    3554 
    3555     exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     446
     447bool status = false;
     448    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
    3556449    if (!status) {
    3557450        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
    3558451        return false;
    3559452    }
    3560     camera = psMetadataLookupPtr(&status, md, "camera");
     453    char* camera = psMetadataLookupPtr(&status, md, "camera");
    3561454    if (!status) {
    3562455        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    3563456        return false;
    3564457    }
    3565     telescope = psMetadataLookupPtr(&status, md, "telescope");
     458    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    3566459    if (!status) {
    3567460        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    3568461        return false;
    3569462    }
    3570     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     463    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    3571464    if (!status) {
    3572465        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    3573466        return false;
    3574467    }
    3575     uri = psMetadataLookupPtr(&status, md, "uri");
     468    char* uri = psMetadataLookupPtr(&status, md, "uri");
    3576469    if (!status) {
    3577470        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     
    3703596bool pzPendingExpCreateTable(psDB *dbh)
    3704597{
    3705     psMetadata      *md;
    3706     bool            status;
    3707 
    3708     md = psMetadataAlloc();
    3709     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
     598    psMetadata *md = psMetadataAlloc();
     599    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
    3710600        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3711601        psFree(md);
    3712602        return false;
    3713603    }
    3714     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
     604    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
    3715605        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3716606        psFree(md);
    3717607        return false;
    3718608    }
    3719     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
     609    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
    3720610        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3721611        psFree(md);
    3722612        return false;
    3723613    }
    3724     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
     614    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
    3725615        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3726616        psFree(md);
    3727617        return false;
    3728618    }
    3729     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
     619    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
    3730620        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    3731621        psFree(md);
     
    3733623    }
    3734624
    3735     status = psDBCreateTable(dbh, PZPENDINGEXP_TABLE_NAME, md);
     625    bool status = psDBCreateTable(dbh, PZPENDINGEXP_TABLE_NAME, md);
    3736626
    3737627    psFree(md);
     
    3747637bool pzPendingExpInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles)
    3748638{
    3749     psMetadata      *md;
    3750     bool            status;
    3751 
    3752     md = psMetadataAlloc();
    3753     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
     639    psMetadata *md = psMetadataAlloc();
     640    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
    3754641        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3755642        psFree(md);
    3756643        return false;
    3757644    }
    3758     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
     645    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
    3759646        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3760647        psFree(md);
    3761648        return false;
    3762649    }
    3763     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
     650    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
    3764651        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3765652        psFree(md);
    3766653        return false;
    3767654    }
    3768     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
     655    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
    3769656        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3770657        psFree(md);
    3771658        return false;
    3772659    }
    3773     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
     660    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
    3774661        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    3775662        psFree(md);
     
    3777664    }
    3778665
    3779     status = psDBInsertOneRow(dbh, PZPENDINGEXP_TABLE_NAME, md);
     666    bool status = psDBInsertOneRow(dbh, PZPENDINGEXP_TABLE_NAME, md);
    3780667    psFree(md);
    3781668
     
    3871758psMetadata *pzPendingExpMetadataFromObject(const pzPendingExpRow *object)
    3872759{
    3873     psMetadata      *md;
    3874 
    3875     md = psMetadataAlloc();
    3876     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
     760    psMetadata *md = psMetadataAlloc();
     761    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
    3877762        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    3878763        psFree(md);
    3879         return NULL;
    3880     }
    3881     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     764        return false;
     765    }
     766    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    3882767        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    3883768        psFree(md);
    3884         return NULL;
    3885     }
    3886     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     769        return false;
     770    }
     771    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    3887772        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    3888773        psFree(md);
    3889         return NULL;
    3890     }
    3891     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     774        return false;
     775    }
     776    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    3892777        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    3893778        psFree(md);
    3894         return NULL;
    3895     }
    3896     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
     779        return false;
     780    }
     781    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
    3897782        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    3898783        psFree(md);
    3899         return NULL;
    3900     }
     784        return false;
     785    }
     786
    3901787
    3902788    return md;
     
    3905791pzPendingExpRow *pzPendingExpObjectFromMetadata(psMetadata *md)
    3906792{
    3907     bool            status;
    3908     char            *exp_id;
    3909     char            *camera;
    3910     char            *telescope;
    3911     char            *exp_type;
    3912     psS32           imfiles;
    3913 
    3914     exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     793
     794bool status = false;
     795    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
    3915796    if (!status) {
    3916797        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
    3917798        return false;
    3918799    }
    3919     camera = psMetadataLookupPtr(&status, md, "camera");
     800    char* camera = psMetadataLookupPtr(&status, md, "camera");
    3920801    if (!status) {
    3921802        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    3922803        return false;
    3923804    }
    3924     telescope = psMetadataLookupPtr(&status, md, "telescope");
     805    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    3925806    if (!status) {
    3926807        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    3927808        return false;
    3928809    }
    3929     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     810    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    3930811    if (!status) {
    3931812        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    3932813        return false;
    3933814    }
    3934     imfiles = psMetadataLookupS32(&status, md, "imfiles");
     815    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
    3935816    if (!status) {
    3936817        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
     
    4068949bool pzPendingImfileCreateTable(psDB *dbh)
    4069950{
    4070     psMetadata      *md;
    4071     bool            status;
    4072 
    4073     md = psMetadataAlloc();
    4074     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) {
     951    psMetadata *md = psMetadataAlloc();
     952    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Primary Key", "64")) {
    4075953        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    4076954        psFree(md);
    4077955        return false;
    4078956    }
    4079     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, "Primary Key", "64")) {
     957    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, "Primary Key", "64")) {
    4080958        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    4081959        psFree(md);
    4082960        return false;
    4083961    }
    4084     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, "Primary Key", "64")) {
     962    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, "Primary Key", "64")) {
    4085963        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    4086964        psFree(md);
    4087965        return false;
    4088966    }
    4089     if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, 0)) {
     967    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, 0)) {
    4090968        psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
    4091969        psFree(md);
    4092970        return false;
    4093971    }
    4094     if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, "32")) {
     972    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, "32")) {
    4095973        psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
    4096974        psFree(md);
    4097975        return false;
    4098976    }
    4099     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
     977    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
    4100978        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    4101979        psFree(md);
    4102980        return false;
    4103981    }
    4104     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     982    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    4105983        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    4106984        psFree(md);
    4107985        return false;
    4108986    }
    4109     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     987    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    4110988        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    4111989        psFree(md);
     
    4113991    }
    4114992
    4115     status = psDBCreateTable(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
     993    bool status = psDBCreateTable(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
    4116994
    4117995    psFree(md);
     
    41271005bool pzPendingImfileInsert(psDB * dbh, const char *exp_id, const char *camera, const char *telescope, psS32 bytes, const char *md5sum, const char *class, const char *class_id, const char *uri)
    41281006{
    4129     psMetadata      *md;
    4130     bool            status;
    4131 
    4132     md = psMetadataAlloc();
    4133     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
     1007    psMetadata *md = psMetadataAlloc();
     1008    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
    41341009        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    41351010        psFree(md);
    41361011        return false;
    41371012    }
    4138     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
     1013    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
    41391014        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    41401015        psFree(md);
    41411016        return false;
    41421017    }
    4143     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
     1018    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
    41441019        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    41451020        psFree(md);
    41461021        return false;
    41471022    }
    4148     if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, bytes)) {
     1023    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, bytes)) {
    41491024        psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
    41501025        psFree(md);
    41511026        return false;
    41521027    }
    4153     if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, md5sum)) {
     1028    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, md5sum)) {
    41541029        psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
    41551030        psFree(md);
    41561031        return false;
    41571032    }
    4158     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
     1033    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
    41591034        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    41601035        psFree(md);
    41611036        return false;
    41621037    }
    4163     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     1038    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    41641039        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    41651040        psFree(md);
    41661041        return false;
    41671042    }
    4168     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     1043    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    41691044        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    41701045        psFree(md);
     
    41721047    }
    41731048
    4174     status = psDBInsertOneRow(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
     1049    bool status = psDBInsertOneRow(dbh, PZPENDINGIMFILE_TABLE_NAME, md);
    41751050    psFree(md);
    41761051
     
    42661141psMetadata *pzPendingImfileMetadataFromObject(const pzPendingImfileRow *object)
    42671142{
    4268     psMetadata      *md;
    4269 
    4270     md = psMetadataAlloc();
    4271     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
     1143    psMetadata *md = psMetadataAlloc();
     1144    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
    42721145        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    42731146        psFree(md);
    4274         return NULL;
    4275     }
    4276     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     1147        return false;
     1148    }
     1149    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    42771150        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    42781151        psFree(md);
    4279         return NULL;
    4280     }
    4281     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     1152        return false;
     1153    }
     1154    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    42821155        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    42831156        psFree(md);
    4284         return NULL;
    4285     }
    4286     if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, object->bytes)) {
     1157        return false;
     1158    }
     1159    if (!psMetadataAdd(md, PS_LIST_TAIL, "bytes", PS_DATA_S32, NULL, object->bytes)) {
    42871160        psError(PS_ERR_UNKNOWN, false, "failed to add item bytes");
    42881161        psFree(md);
    4289         return NULL;
    4290     }
    4291     if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, object->md5sum)) {
     1162        return false;
     1163    }
     1164    if (!psMetadataAdd(md, PS_LIST_TAIL, "md5sum", PS_DATA_STRING, NULL, object->md5sum)) {
    42921165        psError(PS_ERR_UNKNOWN, false, "failed to add item md5sum");
    42931166        psFree(md);
    4294         return NULL;
    4295     }
    4296     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
     1167        return false;
     1168    }
     1169    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
    42971170        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    42981171        psFree(md);
    4299         return NULL;
    4300     }
    4301     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     1172        return false;
     1173    }
     1174    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    43021175        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    43031176        psFree(md);
    4304         return NULL;
    4305     }
    4306     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     1177        return false;
     1178    }
     1179    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    43071180        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    43081181        psFree(md);
    4309         return NULL;
    4310     }
     1182        return false;
     1183    }
     1184
    43111185
    43121186    return md;
     
    43151189pzPendingImfileRow *pzPendingImfileObjectFromMetadata(psMetadata *md)
    43161190{
    4317     bool            status;
    4318     char            *exp_id;
    4319     char            *camera;
    4320     char            *telescope;
    4321     psS32           bytes;
    4322     char            *md5sum;
    4323     char            *class;
    4324     char            *class_id;
    4325     char            *uri;
    4326 
    4327     exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     1191
     1192bool status = false;
     1193    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
    43281194    if (!status) {
    43291195        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
    43301196        return false;
    43311197    }
    4332     camera = psMetadataLookupPtr(&status, md, "camera");
     1198    char* camera = psMetadataLookupPtr(&status, md, "camera");
    43331199    if (!status) {
    43341200        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    43351201        return false;
    43361202    }
    4337     telescope = psMetadataLookupPtr(&status, md, "telescope");
     1203    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    43381204    if (!status) {
    43391205        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    43401206        return false;
    43411207    }
    4342     bytes = psMetadataLookupS32(&status, md, "bytes");
     1208    psS32 bytes = psMetadataLookupS32(&status, md, "bytes");
    43431209    if (!status) {
    43441210        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bytes");
    43451211        return false;
    43461212    }
    4347     md5sum = psMetadataLookupPtr(&status, md, "md5sum");
     1213    char* md5sum = psMetadataLookupPtr(&status, md, "md5sum");
    43481214    if (!status) {
    43491215        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item md5sum");
    43501216        return false;
    43511217    }
    4352     class = psMetadataLookupPtr(&status, md, "class");
     1218    char* class = psMetadataLookupPtr(&status, md, "class");
    43531219    if (!status) {
    43541220        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
    43551221        return false;
    43561222    }
    4357     class_id = psMetadataLookupPtr(&status, md, "class_id");
     1223    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    43581224    if (!status) {
    43591225        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    43601226        return false;
    43611227    }
    4362     uri = psMetadataLookupPtr(&status, md, "uri");
     1228    char* uri = psMetadataLookupPtr(&status, md, "uri");
    43631229    if (!status) {
    43641230        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     
    44921358bool newExpCreateTable(psDB *dbh)
    44931359{
    4494     psMetadata      *md;
    4495     bool            status;
    4496 
    4497     md = psMetadataAlloc();
    4498     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     1360    psMetadata *md = psMetadataAlloc();
     1361    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    44991362        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    45001363        psFree(md);
    45011364        return false;
    45021365    }
    4503     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Key", "64")) {
     1366    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, "Key", "64")) {
    45041367        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    45051368        psFree(md);
    45061369        return false;
    45071370    }
    4508     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
     1371    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
    45091372        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    45101373        psFree(md);
    45111374        return false;
    45121375    }
    4513     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
     1376    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
    45141377        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    45151378        psFree(md);
    45161379        return false;
    45171380    }
    4518     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
     1381    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
    45191382        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    45201383        psFree(md);
    45211384        return false;
    45221385    }
    4523     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
     1386    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
    45241387        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    45251388        psFree(md);
     
    45271390    }
    45281391
    4529     status = psDBCreateTable(dbh, NEWEXP_TABLE_NAME, md);
     1392    bool status = psDBCreateTable(dbh, NEWEXP_TABLE_NAME, md);
    45301393
    45311394    psFree(md);
     
    45411404bool newExpInsert(psDB * dbh, const char *exp_tag, const char *exp_id, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles)
    45421405{
    4543     psMetadata      *md;
    4544     bool            status;
    4545 
    4546     md = psMetadataAlloc();
    4547     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     1406    psMetadata *md = psMetadataAlloc();
     1407    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    45481408        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    45491409        psFree(md);
    45501410        return false;
    45511411    }
    4552     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, exp_id)) {
     1412    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, exp_id)) {
    45531413        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    45541414        psFree(md);
    45551415        return false;
    45561416    }
    4557     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
     1417    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
    45581418        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    45591419        psFree(md);
    45601420        return false;
    45611421    }
    4562     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
     1422    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
    45631423        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    45641424        psFree(md);
    45651425        return false;
    45661426    }
    4567     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
     1427    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
    45681428        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    45691429        psFree(md);
    45701430        return false;
    45711431    }
    4572     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
     1432    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
    45731433        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    45741434        psFree(md);
     
    45761436    }
    45771437
    4578     status = psDBInsertOneRow(dbh, NEWEXP_TABLE_NAME, md);
     1438    bool status = psDBInsertOneRow(dbh, NEWEXP_TABLE_NAME, md);
    45791439    psFree(md);
    45801440
     
    46701530psMetadata *newExpMetadataFromObject(const newExpRow *object)
    46711531{
    4672     psMetadata      *md;
    4673 
    4674     md = psMetadataAlloc();
    4675     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     1532    psMetadata *md = psMetadataAlloc();
     1533    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    46761534        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    46771535        psFree(md);
    4678         return NULL;
    4679     }
    4680     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, object->exp_id)) {
     1536        return false;
     1537    }
     1538    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_id", PS_DATA_STRING, NULL, object->exp_id)) {
    46811539        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id");
    46821540        psFree(md);
    4683         return NULL;
    4684     }
    4685     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     1541        return false;
     1542    }
     1543    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    46861544        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    46871545        psFree(md);
    4688         return NULL;
    4689     }
    4690     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     1546        return false;
     1547    }
     1548    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    46911549        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    46921550        psFree(md);
    4693         return NULL;
    4694     }
    4695     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     1551        return false;
     1552    }
     1553    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    46961554        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    46971555        psFree(md);
    4698         return NULL;
    4699     }
    4700     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
     1556        return false;
     1557    }
     1558    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
    47011559        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    47021560        psFree(md);
    4703         return NULL;
    4704     }
     1561        return false;
     1562    }
     1563
    47051564
    47061565    return md;
     
    47091568newExpRow *newExpObjectFromMetadata(psMetadata *md)
    47101569{
    4711     bool            status;
    4712     char            *exp_tag;
    4713     char            *exp_id;
    4714     char            *camera;
    4715     char            *telescope;
    4716     char            *exp_type;
    4717     psS32           imfiles;
    4718 
    4719     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     1570
     1571bool status = false;
     1572    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    47201573    if (!status) {
    47211574        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    47221575        return false;
    47231576    }
    4724     exp_id = psMetadataLookupPtr(&status, md, "exp_id");
     1577    char* exp_id = psMetadataLookupPtr(&status, md, "exp_id");
    47251578    if (!status) {
    47261579        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");
    47271580        return false;
    47281581    }
    4729     camera = psMetadataLookupPtr(&status, md, "camera");
     1582    char* camera = psMetadataLookupPtr(&status, md, "camera");
    47301583    if (!status) {
    47311584        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    47321585        return false;
    47331586    }
    4734     telescope = psMetadataLookupPtr(&status, md, "telescope");
     1587    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    47351588    if (!status) {
    47361589        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    47371590        return false;
    47381591    }
    4739     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     1592    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    47401593    if (!status) {
    47411594        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    47421595        return false;
    47431596    }
    4744     imfiles = psMetadataLookupS32(&status, md, "imfiles");
     1597    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
    47451598    if (!status) {
    47461599        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
     
    48711724bool newImfileCreateTable(psDB *dbh)
    48721725{
    4873     psMetadata      *md;
    4874     bool            status;
    4875 
    4876     md = psMetadataAlloc();
    4877     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     1726    psMetadata *md = psMetadataAlloc();
     1727    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    48781728        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    48791729        psFree(md);
    48801730        return false;
    48811731    }
    4882     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
     1732    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
    48831733        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    48841734        psFree(md);
    48851735        return false;
    48861736    }
    4887     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     1737    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    48881738        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    48891739        psFree(md);
    48901740        return false;
    48911741    }
    4892     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     1742    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    48931743        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    48941744        psFree(md);
     
    48961746    }
    48971747
    4898     status = psDBCreateTable(dbh, NEWIMFILE_TABLE_NAME, md);
     1748    bool status = psDBCreateTable(dbh, NEWIMFILE_TABLE_NAME, md);
    48991749
    49001750    psFree(md);
     
    49101760bool newImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri)
    49111761{
    4912     psMetadata      *md;
    4913     bool            status;
    4914 
    4915     md = psMetadataAlloc();
    4916     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     1762    psMetadata *md = psMetadataAlloc();
     1763    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    49171764        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    49181765        psFree(md);
    49191766        return false;
    49201767    }
    4921     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
     1768    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
    49221769        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    49231770        psFree(md);
    49241771        return false;
    49251772    }
    4926     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     1773    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    49271774        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    49281775        psFree(md);
    49291776        return false;
    49301777    }
    4931     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     1778    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    49321779        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    49331780        psFree(md);
     
    49351782    }
    49361783
    4937     status = psDBInsertOneRow(dbh, NEWIMFILE_TABLE_NAME, md);
     1784    bool status = psDBInsertOneRow(dbh, NEWIMFILE_TABLE_NAME, md);
    49381785    psFree(md);
    49391786
     
    50291876psMetadata *newImfileMetadataFromObject(const newImfileRow *object)
    50301877{
    5031     psMetadata      *md;
    5032 
    5033     md = psMetadataAlloc();
    5034     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     1878    psMetadata *md = psMetadataAlloc();
     1879    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    50351880        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    50361881        psFree(md);
    5037         return NULL;
    5038     }
    5039     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
     1882        return false;
     1883    }
     1884    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
    50401885        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    50411886        psFree(md);
    5042         return NULL;
    5043     }
    5044     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     1887        return false;
     1888    }
     1889    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    50451890        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    50461891        psFree(md);
    5047         return NULL;
    5048     }
    5049     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     1892        return false;
     1893    }
     1894    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    50501895        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    50511896        psFree(md);
    5052         return NULL;
    5053     }
     1897        return false;
     1898    }
     1899
    50541900
    50551901    return md;
     
    50581904newImfileRow *newImfileObjectFromMetadata(psMetadata *md)
    50591905{
    5060     bool            status;
    5061     char            *exp_tag;
    5062     char            *class;
    5063     char            *class_id;
    5064     char            *uri;
    5065 
    5066     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     1906
     1907bool status = false;
     1908    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    50671909    if (!status) {
    50681910        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    50691911        return false;
    50701912    }
    5071     class = psMetadataLookupPtr(&status, md, "class");
     1913    char* class = psMetadataLookupPtr(&status, md, "class");
    50721914    if (!status) {
    50731915        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
    50741916        return false;
    50751917    }
    5076     class_id = psMetadataLookupPtr(&status, md, "class_id");
     1918    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    50771919    if (!status) {
    50781920        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    50791921        return false;
    50801922    }
    5081     uri = psMetadataLookupPtr(&status, md, "uri");
     1923    char* uri = psMetadataLookupPtr(&status, md, "uri");
    50821924    if (!status) {
    50831925        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
     
    51832025static void rawDetrendExpRowFree(rawDetrendExpRow *object);
    51842026
    5185 rawDetrendExpRow *rawDetrendExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
     2027rawDetrendExpRow *rawDetrendExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
    51862028{
    51872029    rawDetrendExpRow *_object;
     
    52082050    _object->posang = posang;
    52092051    _object->object = psStringCopy(object);
     2052    _object->dateobs = psTimeCopy(dateobs);
    52102053
    52112054    return _object;
     
    52202063    psFree(object->filter);
    52212064    psFree(object->object);
     2065    psFree(object->dateobs);
    52222066}
    52232067
    52242068bool rawDetrendExpCreateTable(psDB *dbh)
    52252069{
    5226     psMetadata      *md;
    5227     bool            status;
    5228 
    5229     md = psMetadataAlloc();
    5230     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     2070    psMetadata *md = psMetadataAlloc();
     2071    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    52312072        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    52322073        psFree(md);
    52332074        return false;
    52342075    }
    5235     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
     2076    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
    52362077        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    52372078        psFree(md);
    52382079        return false;
    52392080    }
    5240     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
     2081    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
    52412082        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    52422083        psFree(md);
    52432084        return false;
    52442085    }
    5245     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
     2086    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
    52462087        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    52472088        psFree(md);
    52482089        return false;
    52492090    }
    5250     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
     2091    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
    52512092        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    52522093        psFree(md);
    52532094        return false;
    52542095    }
    5255     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
     2096    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
    52562097        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    52572098        psFree(md);
    52582099        return false;
    52592100    }
    5260     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
     2101    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
    52612102        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    52622103        psFree(md);
    52632104        return false;
    52642105    }
    5265     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
     2106    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
    52662107        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    52672108        psFree(md);
    52682109        return false;
    52692110    }
    5270     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
     2111    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
    52712112        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    52722113        psFree(md);
    52732114        return false;
    52742115    }
    5275     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
     2116    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
    52762117        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    52772118        psFree(md);
    52782119        return false;
    52792120    }
    5280     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     2121    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    52812122        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    52822123        psFree(md);
    52832124        return false;
    52842125    }
    5285     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     2126    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    52862127        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    52872128        psFree(md);
    52882129        return false;
    52892130    }
    5290     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     2131    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    52912132        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    52922133        psFree(md);
    52932134        return false;
    52942135    }
    5295     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
     2136    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
    52962137        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    52972138        psFree(md);
    52982139        return false;
    52992140    }
    5300     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
     2141    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
    53012142        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    53022143        psFree(md);
    53032144        return false;
    53042145    }
    5305     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
     2146    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
    53062147        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    53072148        psFree(md);
    53082149        return false;
    53092150    }
    5310     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
     2151    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
    53112152        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    53122153        psFree(md);
    53132154        return false;
    53142155    }
    5315     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
     2156    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
    53162157        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    53172158        psFree(md);
    53182159        return false;
    53192160    }
    5320 
    5321     status = psDBCreateTable(dbh, RAWDETRENDEXP_TABLE_NAME, md);
     2161    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
     2162    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     2163        psFree(dateobs);
     2164        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     2165        psFree(md);
     2166        return false;
     2167    }
     2168    psFree(dateobs);
     2169
     2170    bool status = psDBCreateTable(dbh, RAWDETRENDEXP_TABLE_NAME, md);
    53222171
    53232172    psFree(md);
     
    53312180}
    53322181
    5333 bool rawDetrendExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
    5334 {
    5335     psMetadata      *md;
    5336     bool            status;
    5337 
    5338     md = psMetadataAlloc();
    5339     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     2182bool rawDetrendExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
     2183{
     2184    psMetadata *md = psMetadataAlloc();
     2185    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    53402186        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    53412187        psFree(md);
    53422188        return false;
    53432189    }
    5344     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
     2190    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
    53452191        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    53462192        psFree(md);
    53472193        return false;
    53482194    }
    5349     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
     2195    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
    53502196        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    53512197        psFree(md);
    53522198        return false;
    53532199    }
    5354     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
     2200    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
    53552201        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    53562202        psFree(md);
    53572203        return false;
    53582204    }
    5359     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
     2205    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
    53602206        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    53612207        psFree(md);
    53622208        return false;
    53632209    }
    5364     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
     2210    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
    53652211        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    53662212        psFree(md);
    53672213        return false;
    53682214    }
    5369     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
     2215    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
    53702216        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    53712217        psFree(md);
    53722218        return false;
    53732219    }
    5374     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
     2220    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
    53752221        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    53762222        psFree(md);
    53772223        return false;
    53782224    }
    5379     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
     2225    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
    53802226        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    53812227        psFree(md);
    53822228        return false;
    53832229    }
    5384     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
     2230    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
    53852231        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    53862232        psFree(md);
    53872233        return false;
    53882234    }
    5389     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     2235    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    53902236        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    53912237        psFree(md);
    53922238        return false;
    53932239    }
    5394     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     2240    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    53952241        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    53962242        psFree(md);
    53972243        return false;
    53982244    }
    5399     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     2245    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    54002246        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    54012247        psFree(md);
    54022248        return false;
    54032249    }
    5404     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
     2250    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
    54052251        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    54062252        psFree(md);
    54072253        return false;
    54082254    }
    5409     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
     2255    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
    54102256        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    54112257        psFree(md);
    54122258        return false;
    54132259    }
    5414     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
     2260    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
    54152261        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    54162262        psFree(md);
    54172263        return false;
    54182264    }
    5419     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
     2265    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
    54202266        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    54212267        psFree(md);
    54222268        return false;
    54232269    }
    5424     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
     2270    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
    54252271        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    54262272        psFree(md);
    54272273        return false;
    54282274    }
    5429 
    5430     status = psDBInsertOneRow(dbh, RAWDETRENDEXP_TABLE_NAME, md);
     2275    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     2276        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     2277        psFree(md);
     2278        return false;
     2279    }
     2280
     2281    bool status = psDBInsertOneRow(dbh, RAWDETRENDEXP_TABLE_NAME, md);
    54312282    psFree(md);
    54322283
     
    54502301bool rawDetrendExpInsertObject(psDB *dbh, rawDetrendExpRow *object)
    54512302{
    5452     return rawDetrendExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
     2303    return rawDetrendExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
    54532304}
    54542305
     
    55222373psMetadata *rawDetrendExpMetadataFromObject(const rawDetrendExpRow *object)
    55232374{
    5524     psMetadata      *md;
    5525 
    5526     md = psMetadataAlloc();
    5527     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     2375    psMetadata *md = psMetadataAlloc();
     2376    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    55282377        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    55292378        psFree(md);
    5530         return NULL;
    5531     }
    5532     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     2379        return false;
     2380    }
     2381    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    55332382        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    55342383        psFree(md);
    5535         return NULL;
    5536     }
    5537     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     2384        return false;
     2385    }
     2386    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    55382387        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    55392388        psFree(md);
    5540         return NULL;
    5541     }
    5542     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     2389        return false;
     2390    }
     2391    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    55432392        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    55442393        psFree(md);
    5545         return NULL;
    5546     }
    5547     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
     2394        return false;
     2395    }
     2396    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
    55482397        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    55492398        psFree(md);
    5550         return NULL;
    5551     }
    5552     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
     2399        return false;
     2400    }
     2401    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
    55532402        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    55542403        psFree(md);
    5555         return NULL;
    5556     }
    5557     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
     2404        return false;
     2405    }
     2406    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
    55582407        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    55592408        psFree(md);
    5560         return NULL;
    5561     }
    5562     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
     2409        return false;
     2410    }
     2411    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
    55632412        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    55642413        psFree(md);
    5565         return NULL;
    5566     }
    5567     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
     2414        return false;
     2415    }
     2416    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
    55682417        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    55692418        psFree(md);
    5570         return NULL;
    5571     }
    5572     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
     2419        return false;
     2420    }
     2421    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
    55732422        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    55742423        psFree(md);
    5575         return NULL;
    5576     }
    5577     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     2424        return false;
     2425    }
     2426    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    55782427        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    55792428        psFree(md);
    5580         return NULL;
    5581     }
    5582     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     2429        return false;
     2430    }
     2431    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    55832432        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    55842433        psFree(md);
    5585         return NULL;
    5586     }
    5587     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     2434        return false;
     2435    }
     2436    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    55882437        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    55892438        psFree(md);
    5590         return NULL;
    5591     }
    5592     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
     2439        return false;
     2440    }
     2441    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
    55932442        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    55942443        psFree(md);
    5595         return NULL;
    5596     }
    5597     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
     2444        return false;
     2445    }
     2446    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
    55982447        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    55992448        psFree(md);
    5600         return NULL;
    5601     }
    5602     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
     2449        return false;
     2450    }
     2451    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
    56032452        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    56042453        psFree(md);
    5605         return NULL;
    5606     }
    5607     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
     2454        return false;
     2455    }
     2456    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
    56082457        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    56092458        psFree(md);
    5610         return NULL;
    5611     }
    5612     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
     2459        return false;
     2460    }
     2461    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
    56132462        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    56142463        psFree(md);
    5615         return NULL;
    5616     }
     2464        return false;
     2465    }
     2466    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
     2467        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     2468        psFree(md);
     2469        return false;
     2470    }
     2471
    56172472
    56182473    return md;
     
    56212476rawDetrendExpRow *rawDetrendExpObjectFromMetadata(psMetadata *md)
    56222477{
    5623     bool            status;
    5624     char            *exp_tag;
    5625     char            *camera;
    5626     char            *telescope;
    5627     char            *exp_type;
    5628     psS32           imfiles;
    5629     char            *filter;
    5630     psF32           airmass;
    5631     psF64           ra;
    5632     psF64           decl;
    5633     psF32           exp_time;
    5634     psF64           bg;
    5635     psF64           bg_stdev;
    5636     psF64           bg_mean_stdev;
    5637     psF64           alt;
    5638     psF64           az;
    5639     psF32           ccd_temp;
    5640     psF64           posang;
    5641     char            *object;
    5642 
    5643     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     2478
     2479bool status = false;
     2480    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    56442481    if (!status) {
    56452482        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    56462483        return false;
    56472484    }
    5648     camera = psMetadataLookupPtr(&status, md, "camera");
     2485    char* camera = psMetadataLookupPtr(&status, md, "camera");
    56492486    if (!status) {
    56502487        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    56512488        return false;
    56522489    }
    5653     telescope = psMetadataLookupPtr(&status, md, "telescope");
     2490    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    56542491    if (!status) {
    56552492        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    56562493        return false;
    56572494    }
    5658     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     2495    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    56592496    if (!status) {
    56602497        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    56612498        return false;
    56622499    }
    5663     imfiles = psMetadataLookupS32(&status, md, "imfiles");
     2500    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
    56642501    if (!status) {
    56652502        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
    56662503        return false;
    56672504    }
    5668     filter = psMetadataLookupPtr(&status, md, "filter");
     2505    char* filter = psMetadataLookupPtr(&status, md, "filter");
    56692506    if (!status) {
    56702507        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
    56712508        return false;
    56722509    }
    5673     airmass = psMetadataLookupF32(&status, md, "airmass");
     2510    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
    56742511    if (!status) {
    56752512        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
    56762513        return false;
    56772514    }
    5678     ra = psMetadataLookupF64(&status, md, "ra");
     2515    psF64 ra = psMetadataLookupF64(&status, md, "ra");
    56792516    if (!status) {
    56802517        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    56812518        return false;
    56822519    }
    5683     decl = psMetadataLookupF64(&status, md, "decl");
     2520    psF64 decl = psMetadataLookupF64(&status, md, "decl");
    56842521    if (!status) {
    56852522        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    56862523        return false;
    56872524    }
    5688     exp_time = psMetadataLookupF32(&status, md, "exp_time");
     2525    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
    56892526    if (!status) {
    56902527        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
    56912528        return false;
    56922529    }
    5693     bg = psMetadataLookupF64(&status, md, "bg");
     2530    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    56942531    if (!status) {
    56952532        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    56962533        return false;
    56972534    }
    5698     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     2535    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    56992536    if (!status) {
    57002537        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    57012538        return false;
    57022539    }
    5703     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     2540    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    57042541    if (!status) {
    57052542        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    57062543        return false;
    57072544    }
    5708     alt = psMetadataLookupF64(&status, md, "alt");
     2545    psF64 alt = psMetadataLookupF64(&status, md, "alt");
    57092546    if (!status) {
    57102547        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
    57112548        return false;
    57122549    }
    5713     az = psMetadataLookupF64(&status, md, "az");
     2550    psF64 az = psMetadataLookupF64(&status, md, "az");
    57142551    if (!status) {
    57152552        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
    57162553        return false;
    57172554    }
    5718     ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     2555    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
    57192556    if (!status) {
    57202557        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
    57212558        return false;
    57222559    }
    5723     posang = psMetadataLookupF64(&status, md, "posang");
     2560    psF64 posang = psMetadataLookupF64(&status, md, "posang");
    57242561    if (!status) {
    57252562        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
    57262563        return false;
    57272564    }
    5728     object = psMetadataLookupPtr(&status, md, "object");
     2565    char* object = psMetadataLookupPtr(&status, md, "object");
    57292566    if (!status) {
    57302567        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
    57312568        return false;
    57322569    }
    5733 
    5734     return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
     2570    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
     2571    if (!status) {
     2572        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
     2573        return false;
     2574    }
     2575
     2576    return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
    57352577}
    57362578psArray *rawDetrendExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    58302672static void rawScienceExpRowFree(rawScienceExpRow *object);
    58312673
    5832 rawScienceExpRow *rawScienceExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
     2674rawScienceExpRow *rawScienceExpRowAlloc(const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
    58332675{
    58342676    rawScienceExpRow *_object;
     
    58552697    _object->posang = posang;
    58562698    _object->object = psStringCopy(object);
     2699    _object->dateobs = psTimeCopy(dateobs);
    58572700
    58582701    return _object;
     
    58672710    psFree(object->filter);
    58682711    psFree(object->object);
     2712    psFree(object->dateobs);
    58692713}
    58702714
    58712715bool rawScienceExpCreateTable(psDB *dbh)
    58722716{
    5873     psMetadata      *md;
    5874     bool            status;
    5875 
    5876     md = psMetadataAlloc();
    5877     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     2717    psMetadata *md = psMetadataAlloc();
     2718    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    58782719        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    58792720        psFree(md);
    58802721        return false;
    58812722    }
    5882     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "64")) {
     2723    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, "64")) {
    58832724        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    58842725        psFree(md);
    58852726        return false;
    58862727    }
    5887     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "64")) {
     2728    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, "64")) {
    58882729        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    58892730        psFree(md);
    58902731        return false;
    58912732    }
    5892     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
     2733    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
    58932734        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    58942735        psFree(md);
    58952736        return false;
    58962737    }
    5897     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, 0)) {
     2738    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, 0)) {
    58982739        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    58992740        psFree(md);
    59002741        return false;
    59012742    }
    5902     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
     2743    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
    59032744        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    59042745        psFree(md);
    59052746        return false;
    59062747    }
    5907     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
     2748    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
    59082749        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    59092750        psFree(md);
    59102751        return false;
    59112752    }
    5912     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
     2753    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
    59132754        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    59142755        psFree(md);
    59152756        return false;
    59162757    }
    5917     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
     2758    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
    59182759        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    59192760        psFree(md);
    59202761        return false;
    59212762    }
    5922     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
     2763    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
    59232764        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    59242765        psFree(md);
    59252766        return false;
    59262767    }
    5927     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     2768    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    59282769        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    59292770        psFree(md);
    59302771        return false;
    59312772    }
    5932     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     2773    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    59332774        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    59342775        psFree(md);
    59352776        return false;
    59362777    }
    5937     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     2778    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    59382779        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    59392780        psFree(md);
    59402781        return false;
    59412782    }
    5942     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
     2783    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
    59432784        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    59442785        psFree(md);
    59452786        return false;
    59462787    }
    5947     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
     2788    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
    59482789        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    59492790        psFree(md);
    59502791        return false;
    59512792    }
    5952     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
     2793    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
    59532794        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    59542795        psFree(md);
    59552796        return false;
    59562797    }
    5957     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
     2798    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
    59582799        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    59592800        psFree(md);
    59602801        return false;
    59612802    }
    5962     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
     2803    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
    59632804        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    59642805        psFree(md);
    59652806        return false;
    59662807    }
    5967 
    5968     status = psDBCreateTable(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
     2808    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
     2809    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     2810        psFree(dateobs);
     2811        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     2812        psFree(md);
     2813        return false;
     2814    }
     2815    psFree(dateobs);
     2816
     2817    bool status = psDBCreateTable(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
    59692818
    59702819    psFree(md);
     
    59782827}
    59792828
    5980 bool rawScienceExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
    5981 {
    5982     psMetadata      *md;
    5983     bool            status;
    5984 
    5985     md = psMetadataAlloc();
    5986     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     2829bool rawScienceExpInsert(psDB * dbh, const char *exp_tag, const char *camera, const char *telescope, const char *exp_type, psS32 imfiles, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
     2830{
     2831    psMetadata *md = psMetadataAlloc();
     2832    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    59872833        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    59882834        psFree(md);
    59892835        return false;
    59902836    }
    5991     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, camera)) {
     2837    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, camera)) {
    59922838        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    59932839        psFree(md);
    59942840        return false;
    59952841    }
    5996     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, telescope)) {
     2842    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, telescope)) {
    59972843        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    59982844        psFree(md);
    59992845        return false;
    60002846    }
    6001     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
     2847    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
    60022848        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    60032849        psFree(md);
    60042850        return false;
    60052851    }
    6006     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, imfiles)) {
     2852    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, imfiles)) {
    60072853        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    60082854        psFree(md);
    60092855        return false;
    60102856    }
    6011     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
     2857    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
    60122858        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    60132859        psFree(md);
    60142860        return false;
    60152861    }
    6016     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
     2862    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
    60172863        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    60182864        psFree(md);
    60192865        return false;
    60202866    }
    6021     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
     2867    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
    60222868        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    60232869        psFree(md);
    60242870        return false;
    60252871    }
    6026     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
     2872    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
    60272873        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    60282874        psFree(md);
    60292875        return false;
    60302876    }
    6031     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
     2877    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
    60322878        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    60332879        psFree(md);
    60342880        return false;
    60352881    }
    6036     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     2882    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    60372883        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    60382884        psFree(md);
    60392885        return false;
    60402886    }
    6041     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     2887    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    60422888        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    60432889        psFree(md);
    60442890        return false;
    60452891    }
    6046     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     2892    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    60472893        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    60482894        psFree(md);
    60492895        return false;
    60502896    }
    6051     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
     2897    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
    60522898        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    60532899        psFree(md);
    60542900        return false;
    60552901    }
    6056     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
     2902    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
    60572903        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    60582904        psFree(md);
    60592905        return false;
    60602906    }
    6061     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
     2907    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
    60622908        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    60632909        psFree(md);
    60642910        return false;
    60652911    }
    6066     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
     2912    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
    60672913        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    60682914        psFree(md);
    60692915        return false;
    60702916    }
    6071     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
     2917    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
    60722918        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    60732919        psFree(md);
    60742920        return false;
    60752921    }
    6076 
    6077     status = psDBInsertOneRow(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
     2922    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     2923        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     2924        psFree(md);
     2925        return false;
     2926    }
     2927
     2928    bool status = psDBInsertOneRow(dbh, RAWSCIENCEEXP_TABLE_NAME, md);
    60782929    psFree(md);
    60792930
     
    60972948bool rawScienceExpInsertObject(psDB *dbh, rawScienceExpRow *object)
    60982949{
    6099     return rawScienceExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
     2950    return rawScienceExpInsert(dbh, object->exp_tag, object->camera, object->telescope, object->exp_type, object->imfiles, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
    61002951}
    61012952
     
    61693020psMetadata *rawScienceExpMetadataFromObject(const rawScienceExpRow *object)
    61703021{
    6171     psMetadata      *md;
    6172 
    6173     md = psMetadataAlloc();
    6174     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     3022    psMetadata *md = psMetadataAlloc();
     3023    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    61753024        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    61763025        psFree(md);
    6177         return NULL;
    6178     }
    6179     if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, object->camera)) {
     3026        return false;
     3027    }
     3028    if (!psMetadataAdd(md, PS_LIST_TAIL, "camera", PS_DATA_STRING, NULL, object->camera)) {
    61803029        psError(PS_ERR_UNKNOWN, false, "failed to add item camera");
    61813030        psFree(md);
    6182         return NULL;
    6183     }
    6184     if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, object->telescope)) {
     3031        return false;
     3032    }
     3033    if (!psMetadataAdd(md, PS_LIST_TAIL, "telescope", PS_DATA_STRING, NULL, object->telescope)) {
    61853034        psError(PS_ERR_UNKNOWN, false, "failed to add item telescope");
    61863035        psFree(md);
    6187         return NULL;
    6188     }
    6189     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     3036        return false;
     3037    }
     3038    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    61903039        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    61913040        psFree(md);
    6192         return NULL;
    6193     }
    6194     if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, object->imfiles)) {
     3041        return false;
     3042    }
     3043    if (!psMetadataAdd(md, PS_LIST_TAIL, "imfiles", PS_DATA_S32, NULL, object->imfiles)) {
    61953044        psError(PS_ERR_UNKNOWN, false, "failed to add item imfiles");
    61963045        psFree(md);
    6197         return NULL;
    6198     }
    6199     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
     3046        return false;
     3047    }
     3048    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
    62003049        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    62013050        psFree(md);
    6202         return NULL;
    6203     }
    6204     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
     3051        return false;
     3052    }
     3053    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
    62053054        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    62063055        psFree(md);
    6207         return NULL;
    6208     }
    6209     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
     3056        return false;
     3057    }
     3058    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
    62103059        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    62113060        psFree(md);
    6212         return NULL;
    6213     }
    6214     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
     3061        return false;
     3062    }
     3063    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
    62153064        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    62163065        psFree(md);
    6217         return NULL;
    6218     }
    6219     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
     3066        return false;
     3067    }
     3068    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
    62203069        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    62213070        psFree(md);
    6222         return NULL;
    6223     }
    6224     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     3071        return false;
     3072    }
     3073    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    62253074        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    62263075        psFree(md);
    6227         return NULL;
    6228     }
    6229     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     3076        return false;
     3077    }
     3078    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    62303079        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    62313080        psFree(md);
    6232         return NULL;
    6233     }
    6234     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     3081        return false;
     3082    }
     3083    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    62353084        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    62363085        psFree(md);
    6237         return NULL;
    6238     }
    6239     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
     3086        return false;
     3087    }
     3088    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
    62403089        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    62413090        psFree(md);
    6242         return NULL;
    6243     }
    6244     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
     3091        return false;
     3092    }
     3093    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
    62453094        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    62463095        psFree(md);
    6247         return NULL;
    6248     }
    6249     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
     3096        return false;
     3097    }
     3098    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
    62503099        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    62513100        psFree(md);
    6252         return NULL;
    6253     }
    6254     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
     3101        return false;
     3102    }
     3103    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
    62553104        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    62563105        psFree(md);
    6257         return NULL;
    6258     }
    6259     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
     3106        return false;
     3107    }
     3108    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
    62603109        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    62613110        psFree(md);
    6262         return NULL;
    6263     }
     3111        return false;
     3112    }
     3113    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
     3114        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     3115        psFree(md);
     3116        return false;
     3117    }
     3118
    62643119
    62653120    return md;
     
    62683123rawScienceExpRow *rawScienceExpObjectFromMetadata(psMetadata *md)
    62693124{
    6270     bool            status;
    6271     char            *exp_tag;
    6272     char            *camera;
    6273     char            *telescope;
    6274     char            *exp_type;
    6275     psS32           imfiles;
    6276     char            *filter;
    6277     psF32           airmass;
    6278     psF64           ra;
    6279     psF64           decl;
    6280     psF32           exp_time;
    6281     psF64           bg;
    6282     psF64           bg_stdev;
    6283     psF64           bg_mean_stdev;
    6284     psF64           alt;
    6285     psF64           az;
    6286     psF32           ccd_temp;
    6287     psF64           posang;
    6288     char            *object;
    6289 
    6290     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     3125
     3126bool status = false;
     3127    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    62913128    if (!status) {
    62923129        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    62933130        return false;
    62943131    }
    6295     camera = psMetadataLookupPtr(&status, md, "camera");
     3132    char* camera = psMetadataLookupPtr(&status, md, "camera");
    62963133    if (!status) {
    62973134        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");
    62983135        return false;
    62993136    }
    6300     telescope = psMetadataLookupPtr(&status, md, "telescope");
     3137    char* telescope = psMetadataLookupPtr(&status, md, "telescope");
    63013138    if (!status) {
    63023139        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");
    63033140        return false;
    63043141    }
    6305     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     3142    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    63063143    if (!status) {
    63073144        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    63083145        return false;
    63093146    }
    6310     imfiles = psMetadataLookupS32(&status, md, "imfiles");
     3147    psS32 imfiles = psMetadataLookupS32(&status, md, "imfiles");
    63113148    if (!status) {
    63123149        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");
    63133150        return false;
    63143151    }
    6315     filter = psMetadataLookupPtr(&status, md, "filter");
     3152    char* filter = psMetadataLookupPtr(&status, md, "filter");
    63163153    if (!status) {
    63173154        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
    63183155        return false;
    63193156    }
    6320     airmass = psMetadataLookupF32(&status, md, "airmass");
     3157    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
    63213158    if (!status) {
    63223159        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
    63233160        return false;
    63243161    }
    6325     ra = psMetadataLookupF64(&status, md, "ra");
     3162    psF64 ra = psMetadataLookupF64(&status, md, "ra");
    63263163    if (!status) {
    63273164        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    63283165        return false;
    63293166    }
    6330     decl = psMetadataLookupF64(&status, md, "decl");
     3167    psF64 decl = psMetadataLookupF64(&status, md, "decl");
    63313168    if (!status) {
    63323169        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    63333170        return false;
    63343171    }
    6335     exp_time = psMetadataLookupF32(&status, md, "exp_time");
     3172    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
    63363173    if (!status) {
    63373174        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
    63383175        return false;
    63393176    }
    6340     bg = psMetadataLookupF64(&status, md, "bg");
     3177    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    63413178    if (!status) {
    63423179        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    63433180        return false;
    63443181    }
    6345     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     3182    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    63463183    if (!status) {
    63473184        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    63483185        return false;
    63493186    }
    6350     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     3187    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    63513188    if (!status) {
    63523189        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    63533190        return false;
    63543191    }
    6355     alt = psMetadataLookupF64(&status, md, "alt");
     3192    psF64 alt = psMetadataLookupF64(&status, md, "alt");
    63563193    if (!status) {
    63573194        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
    63583195        return false;
    63593196    }
    6360     az = psMetadataLookupF64(&status, md, "az");
     3197    psF64 az = psMetadataLookupF64(&status, md, "az");
    63613198    if (!status) {
    63623199        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
    63633200        return false;
    63643201    }
    6365     ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     3202    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
    63663203    if (!status) {
    63673204        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
    63683205        return false;
    63693206    }
    6370     posang = psMetadataLookupF64(&status, md, "posang");
     3207    psF64 posang = psMetadataLookupF64(&status, md, "posang");
    63713208    if (!status) {
    63723209        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
    63733210        return false;
    63743211    }
    6375     object = psMetadataLookupPtr(&status, md, "object");
     3212    char* object = psMetadataLookupPtr(&status, md, "object");
    63763213    if (!status) {
    63773214        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
    63783215        return false;
    63793216    }
    6380 
    6381     return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
     3217    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
     3218    if (!status) {
     3219        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
     3220        return false;
     3221    }
     3222
     3223    return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
    63823224}
    63833225psArray *rawScienceExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    64773319static void rawImfileRowFree(rawImfileRow *object);
    64783320
    6479 rawImfileRow *rawImfileRowAlloc(const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
     3321rawImfileRow *rawImfileRowAlloc(const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
    64803322{
    64813323    rawImfileRow    *_object;
     
    65023344    _object->posang = posang;
    65033345    _object->object = psStringCopy(object);
     3346    _object->dateobs = psTimeCopy(dateobs);
    65043347
    65053348    return _object;
     
    65153358    psFree(object->filter);
    65163359    psFree(object->object);
     3360    psFree(object->dateobs);
    65173361}
    65183362
    65193363bool rawImfileCreateTable(psDB *dbh)
    65203364{
    6521     psMetadata      *md;
    6522     bool            status;
    6523 
    6524     md = psMetadataAlloc();
    6525     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     3365    psMetadata *md = psMetadataAlloc();
     3366    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    65263367        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    65273368        psFree(md);
    65283369        return false;
    65293370    }
    6530     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "64")) {
     3371    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, "64")) {
    65313372        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    65323373        psFree(md);
    65333374        return false;
    65343375    }
    6535     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     3376    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    65363377        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    65373378        psFree(md);
    65383379        return false;
    65393380    }
    6540     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     3381    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    65413382        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    65423383        psFree(md);
    65433384        return false;
    65443385    }
    6545     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "64")) {
     3386    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, "64")) {
    65463387        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    65473388        psFree(md);
    65483389        return false;
    65493390    }
    6550     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) {
     3391    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, "255")) {
    65513392        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    65523393        psFree(md);
    65533394        return false;
    65543395    }
    6555     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 0.0)) {
     3396    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, 0.0)) {
    65563397        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    65573398        psFree(md);
    65583399        return false;
    65593400    }
    6560     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 0.0)) {
     3401    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, 0.0)) {
    65613402        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    65623403        psFree(md);
    65633404        return false;
    65643405    }
    6565     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 0.0)) {
     3406    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, 0.0)) {
    65663407        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    65673408        psFree(md);
    65683409        return false;
    65693410    }
    6570     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 0.0)) {
     3411    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, 0.0)) {
    65713412        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    65723413        psFree(md);
    65733414        return false;
    65743415    }
    6575     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     3416    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    65763417        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    65773418        psFree(md);
    65783419        return false;
    65793420    }
    6580     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     3421    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    65813422        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    65823423        psFree(md);
    65833424        return false;
    65843425    }
    6585     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     3426    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    65863427        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    65873428        psFree(md);
    65883429        return false;
    65893430    }
    6590     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 0.0)) {
     3431    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, 0.0)) {
    65913432        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    65923433        psFree(md);
    65933434        return false;
    65943435    }
    6595     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) {
     3436    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, 0.0)) {
    65963437        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    65973438        psFree(md);
    65983439        return false;
    65993440    }
    6600     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 0.0)) {
     3441    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, 0.0)) {
    66013442        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    66023443        psFree(md);
    66033444        return false;
    66043445    }
    6605     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 0.0)) {
     3446    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, 0.0)) {
    66063447        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    66073448        psFree(md);
    66083449        return false;
    66093450    }
    6610     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "64")) {
     3451    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, "64")) {
    66113452        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    66123453        psFree(md);
    66133454        return false;
    66143455    }
    6615 
    6616     status = psDBCreateTable(dbh, RAWIMFILE_TABLE_NAME, md);
     3456    psTime* dateobs = psTimeFromISO("0001-01-01T00:00:00", PS_TIME_UTC);
     3457    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     3458        psFree(dateobs);
     3459        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     3460        psFree(md);
     3461        return false;
     3462    }
     3463    psFree(dateobs);
     3464
     3465    bool status = psDBCreateTable(dbh, RAWIMFILE_TABLE_NAME, md);
    66173466
    66183467    psFree(md);
     
    66263475}
    66273476
    6628 bool rawImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object)
    6629 {
    6630     psMetadata      *md;
    6631     bool            status;
    6632 
    6633     md = psMetadataAlloc();
    6634     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     3477bool rawImfileInsert(psDB * dbh, const char *exp_tag, const char *class, const char *class_id, const char *uri, const char *exp_type, const char *filter, psF32 airmass, psF64 ra, psF64 decl, psF32 exp_time, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF64 alt, psF64 az, psF32 ccd_temp, psF64 posang, const char *object, psTime* dateobs)
     3478{
     3479    psMetadata *md = psMetadataAlloc();
     3480    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    66353481        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    66363482        psFree(md);
    66373483        return false;
    66383484    }
    6639     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, class)) {
     3485    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, class)) {
    66403486        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    66413487        psFree(md);
    66423488        return false;
    66433489    }
    6644     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     3490    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    66453491        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    66463492        psFree(md);
    66473493        return false;
    66483494    }
    6649     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     3495    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    66503496        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    66513497        psFree(md);
    66523498        return false;
    66533499    }
    6654     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, exp_type)) {
     3500    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, exp_type)) {
    66553501        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    66563502        psFree(md);
    66573503        return false;
    66583504    }
    6659     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, filter)) {
     3505    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, filter)) {
    66603506        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    66613507        psFree(md);
    66623508        return false;
    66633509    }
    6664     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, airmass)) {
     3510    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, airmass)) {
    66653511        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    66663512        psFree(md);
    66673513        return false;
    66683514    }
    6669     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, ra)) {
     3515    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, ra)) {
    66703516        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    66713517        psFree(md);
    66723518        return false;
    66733519    }
    6674     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, decl)) {
     3520    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, decl)) {
    66753521        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    66763522        psFree(md);
    66773523        return false;
    66783524    }
    6679     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, exp_time)) {
     3525    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, exp_time)) {
    66803526        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    66813527        psFree(md);
    66823528        return false;
    66833529    }
    6684     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     3530    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    66853531        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    66863532        psFree(md);
    66873533        return false;
    66883534    }
    6689     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     3535    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    66903536        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    66913537        psFree(md);
    66923538        return false;
    66933539    }
    6694     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     3540    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    66953541        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    66963542        psFree(md);
    66973543        return false;
    66983544    }
    6699     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, alt)) {
     3545    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, alt)) {
    67003546        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    67013547        psFree(md);
    67023548        return false;
    67033549    }
    6704     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, az)) {
     3550    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, az)) {
    67053551        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    67063552        psFree(md);
    67073553        return false;
    67083554    }
    6709     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, ccd_temp)) {
     3555    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, ccd_temp)) {
    67103556        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    67113557        psFree(md);
    67123558        return false;
    67133559    }
    6714     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, posang)) {
     3560    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, posang)) {
    67153561        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    67163562        psFree(md);
    67173563        return false;
    67183564    }
    6719     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object)) {
     3565    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object)) {
    67203566        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    67213567        psFree(md);
    67223568        return false;
    67233569    }
    6724 
    6725     status = psDBInsertOneRow(dbh, RAWIMFILE_TABLE_NAME, md);
     3570    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, dateobs)) {
     3571        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     3572        psFree(md);
     3573        return false;
     3574    }
     3575
     3576    bool status = psDBInsertOneRow(dbh, RAWIMFILE_TABLE_NAME, md);
    67263577    psFree(md);
    67273578
     
    67453596bool rawImfileInsertObject(psDB *dbh, rawImfileRow *object)
    67463597{
    6747     return rawImfileInsert(dbh, object->exp_tag, object->class, object->class_id, object->uri, object->exp_type, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object);
     3598    return rawImfileInsert(dbh, object->exp_tag, object->class, object->class_id, object->uri, object->exp_type, object->filter, object->airmass, object->ra, object->decl, object->exp_time, object->bg, object->bg_stdev, object->bg_mean_stdev, object->alt, object->az, object->ccd_temp, object->posang, object->object, object->dateobs);
    67483599}
    67493600
     
    68173668psMetadata *rawImfileMetadataFromObject(const rawImfileRow *object)
    68183669{
    6819     psMetadata      *md;
    6820 
    6821     md = psMetadataAlloc();
    6822     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     3670    psMetadata *md = psMetadataAlloc();
     3671    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    68233672        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    68243673        psFree(md);
    6825         return NULL;
    6826     }
    6827     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, object->class)) {
     3674        return false;
     3675    }
     3676    if (!psMetadataAdd(md, PS_LIST_TAIL, "class", PS_DATA_STRING, NULL, object->class)) {
    68283677        psError(PS_ERR_UNKNOWN, false, "failed to add item class");
    68293678        psFree(md);
    6830         return NULL;
    6831     }
    6832     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     3679        return false;
     3680    }
     3681    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    68333682        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    68343683        psFree(md);
    6835         return NULL;
    6836     }
    6837     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     3684        return false;
     3685    }
     3686    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    68383687        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    68393688        psFree(md);
    6840         return NULL;
    6841     }
    6842     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, object->exp_type)) {
     3689        return false;
     3690    }
     3691    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_type", PS_DATA_STRING, NULL, object->exp_type)) {
    68433692        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_type");
    68443693        psFree(md);
    6845         return NULL;
    6846     }
    6847     if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, object->filter)) {
     3694        return false;
     3695    }
     3696    if (!psMetadataAdd(md, PS_LIST_TAIL, "filter", PS_DATA_STRING, NULL, object->filter)) {
    68483697        psError(PS_ERR_UNKNOWN, false, "failed to add item filter");
    68493698        psFree(md);
    6850         return NULL;
    6851     }
    6852     if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, object->airmass)) {
     3699        return false;
     3700    }
     3701    if (!psMetadataAdd(md, PS_LIST_TAIL, "airmass", PS_DATA_F32, NULL, object->airmass)) {
    68533702        psError(PS_ERR_UNKNOWN, false, "failed to add item airmass");
    68543703        psFree(md);
    6855         return NULL;
    6856     }
    6857     if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, object->ra)) {
     3704        return false;
     3705    }
     3706    if (!psMetadataAdd(md, PS_LIST_TAIL, "ra", PS_DATA_F64, NULL, object->ra)) {
    68583707        psError(PS_ERR_UNKNOWN, false, "failed to add item ra");
    68593708        psFree(md);
    6860         return NULL;
    6861     }
    6862     if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, object->decl)) {
     3709        return false;
     3710    }
     3711    if (!psMetadataAdd(md, PS_LIST_TAIL, "decl", PS_DATA_F64, NULL, object->decl)) {
    68633712        psError(PS_ERR_UNKNOWN, false, "failed to add item decl");
    68643713        psFree(md);
    6865         return NULL;
    6866     }
    6867     if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, object->exp_time)) {
     3714        return false;
     3715    }
     3716    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_time", PS_DATA_F32, NULL, object->exp_time)) {
    68683717        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_time");
    68693718        psFree(md);
    6870         return NULL;
    6871     }
    6872     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     3719        return false;
     3720    }
     3721    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    68733722        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    68743723        psFree(md);
    6875         return NULL;
    6876     }
    6877     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     3724        return false;
     3725    }
     3726    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    68783727        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    68793728        psFree(md);
    6880         return NULL;
    6881     }
    6882     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     3729        return false;
     3730    }
     3731    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    68833732        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    68843733        psFree(md);
    6885         return NULL;
    6886     }
    6887     if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, object->alt)) {
     3734        return false;
     3735    }
     3736    if (!psMetadataAdd(md, PS_LIST_TAIL, "alt", PS_DATA_F64, NULL, object->alt)) {
    68883737        psError(PS_ERR_UNKNOWN, false, "failed to add item alt");
    68893738        psFree(md);
    6890         return NULL;
    6891     }
    6892     if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, object->az)) {
     3739        return false;
     3740    }
     3741    if (!psMetadataAdd(md, PS_LIST_TAIL, "az", PS_DATA_F64, NULL, object->az)) {
    68933742        psError(PS_ERR_UNKNOWN, false, "failed to add item az");
    68943743        psFree(md);
    6895         return NULL;
    6896     }
    6897     if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, object->ccd_temp)) {
     3744        return false;
     3745    }
     3746    if (!psMetadataAdd(md, PS_LIST_TAIL, "ccd_temp", PS_DATA_F32, NULL, object->ccd_temp)) {
    68983747        psError(PS_ERR_UNKNOWN, false, "failed to add item ccd_temp");
    68993748        psFree(md);
    6900         return NULL;
    6901     }
    6902     if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, object->posang)) {
     3749        return false;
     3750    }
     3751    if (!psMetadataAdd(md, PS_LIST_TAIL, "posang", PS_DATA_F64, NULL, object->posang)) {
    69033752        psError(PS_ERR_UNKNOWN, false, "failed to add item posang");
    69043753        psFree(md);
    6905         return NULL;
    6906     }
    6907     if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, object->object)) {
     3754        return false;
     3755    }
     3756    if (!psMetadataAdd(md, PS_LIST_TAIL, "object", PS_DATA_STRING, NULL, object->object)) {
    69083757        psError(PS_ERR_UNKNOWN, false, "failed to add item object");
    69093758        psFree(md);
    6910         return NULL;
    6911     }
     3759        return false;
     3760    }
     3761    if (!psMetadataAdd(md, PS_LIST_TAIL, "dateobs", PS_DATA_TIME, NULL, object->dateobs)) {
     3762        psError(PS_ERR_UNKNOWN, false, "failed to add item dateobs");
     3763        psFree(md);
     3764        return false;
     3765    }
     3766
    69123767
    69133768    return md;
     
    69163771rawImfileRow *rawImfileObjectFromMetadata(psMetadata *md)
    69173772{
    6918     bool            status;
    6919     char            *exp_tag;
    6920     char            *class;
    6921     char            *class_id;
    6922     char            *uri;
    6923     char            *exp_type;
    6924     char            *filter;
    6925     psF32           airmass;
    6926     psF64           ra;
    6927     psF64           decl;
    6928     psF32           exp_time;
    6929     psF64           bg;
    6930     psF64           bg_stdev;
    6931     psF64           bg_mean_stdev;
    6932     psF64           alt;
    6933     psF64           az;
    6934     psF32           ccd_temp;
    6935     psF64           posang;
    6936     char            *object;
    6937 
    6938     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     3773
     3774bool status = false;
     3775    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    69393776    if (!status) {
    69403777        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    69413778        return false;
    69423779    }
    6943     class = psMetadataLookupPtr(&status, md, "class");
     3780    char* class = psMetadataLookupPtr(&status, md, "class");
    69443781    if (!status) {
    69453782        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");
    69463783        return false;
    69473784    }
    6948     class_id = psMetadataLookupPtr(&status, md, "class_id");
     3785    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    69493786    if (!status) {
    69503787        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    69513788        return false;
    69523789    }
    6953     uri = psMetadataLookupPtr(&status, md, "uri");
     3790    char* uri = psMetadataLookupPtr(&status, md, "uri");
    69543791    if (!status) {
    69553792        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    69563793        return false;
    69573794    }
    6958     exp_type = psMetadataLookupPtr(&status, md, "exp_type");
     3795    char* exp_type = psMetadataLookupPtr(&status, md, "exp_type");
    69593796    if (!status) {
    69603797        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");
    69613798        return false;
    69623799    }
    6963     filter = psMetadataLookupPtr(&status, md, "filter");
     3800    char* filter = psMetadataLookupPtr(&status, md, "filter");
    69643801    if (!status) {
    69653802        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");
    69663803        return false;
    69673804    }
    6968     airmass = psMetadataLookupF32(&status, md, "airmass");
     3805    psF32 airmass = psMetadataLookupF32(&status, md, "airmass");
    69693806    if (!status) {
    69703807        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");
    69713808        return false;
    69723809    }
    6973     ra = psMetadataLookupF64(&status, md, "ra");
     3810    psF64 ra = psMetadataLookupF64(&status, md, "ra");
    69743811    if (!status) {
    69753812        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");
    69763813        return false;
    69773814    }
    6978     decl = psMetadataLookupF64(&status, md, "decl");
     3815    psF64 decl = psMetadataLookupF64(&status, md, "decl");
    69793816    if (!status) {
    69803817        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");
    69813818        return false;
    69823819    }
    6983     exp_time = psMetadataLookupF32(&status, md, "exp_time");
     3820    psF32 exp_time = psMetadataLookupF32(&status, md, "exp_time");
    69843821    if (!status) {
    69853822        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");
    69863823        return false;
    69873824    }
    6988     bg = psMetadataLookupF64(&status, md, "bg");
     3825    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    69893826    if (!status) {
    69903827        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    69913828        return false;
    69923829    }
    6993     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     3830    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    69943831    if (!status) {
    69953832        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    69963833        return false;
    69973834    }
    6998     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     3835    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    69993836    if (!status) {
    70003837        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    70013838        return false;
    70023839    }
    7003     alt = psMetadataLookupF64(&status, md, "alt");
     3840    psF64 alt = psMetadataLookupF64(&status, md, "alt");
    70043841    if (!status) {
    70053842        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");
    70063843        return false;
    70073844    }
    7008     az = psMetadataLookupF64(&status, md, "az");
     3845    psF64 az = psMetadataLookupF64(&status, md, "az");
    70093846    if (!status) {
    70103847        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");
    70113848        return false;
    70123849    }
    7013     ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
     3850    psF32 ccd_temp = psMetadataLookupF32(&status, md, "ccd_temp");
    70143851    if (!status) {
    70153852        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");
    70163853        return false;
    70173854    }
    7018     posang = psMetadataLookupF64(&status, md, "posang");
     3855    psF64 posang = psMetadataLookupF64(&status, md, "posang");
    70193856    if (!status) {
    70203857        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");
    70213858        return false;
    70223859    }
    7023     object = psMetadataLookupPtr(&status, md, "object");
     3860    char* object = psMetadataLookupPtr(&status, md, "object");
    70243861    if (!status) {
    70253862        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");
    70263863        return false;
    70273864    }
    7028 
    7029     return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);
     3865    psTime* dateobs = psMetadataLookupPtr(&status, md, "dateobs");
     3866    if (!status) {
     3867        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item dateobs");
     3868        return false;
     3869    }
     3870
     3871    return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object, dateobs);
    70303872}
    70313873psArray *rawImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    71473989bool p1PendingExpCreateTable(psDB *dbh)
    71483990{
    7149     psMetadata      *md;
    7150     bool            status;
    7151 
    7152     md = psMetadataAlloc();
    7153     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     3991    psMetadata *md = psMetadataAlloc();
     3992    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    71543993        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    71553994        psFree(md);
    71563995        return false;
    71573996    }
    7158     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     3997    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    71593998        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    71603999        psFree(md);
    71614000        return false;
    71624001    }
    7163     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
     4002    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
    71644003        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    71654004        psFree(md);
     
    71674006    }
    71684007
    7169     status = psDBCreateTable(dbh, P1PENDINGEXP_TABLE_NAME, md);
     4008    bool status = psDBCreateTable(dbh, P1PENDINGEXP_TABLE_NAME, md);
    71704009
    71714010    psFree(md);
     
    71814020bool p1PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version)
    71824021{
    7183     psMetadata      *md;
    7184     bool            status;
    7185 
    7186     md = psMetadataAlloc();
    7187     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     4022    psMetadata *md = psMetadataAlloc();
     4023    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    71884024        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    71894025        psFree(md);
    71904026        return false;
    71914027    }
    7192     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     4028    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    71934029        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    71944030        psFree(md);
    71954031        return false;
    71964032    }
    7197     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
     4033    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
    71984034        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    71994035        psFree(md);
     
    72014037    }
    72024038
    7203     status = psDBInsertOneRow(dbh, P1PENDINGEXP_TABLE_NAME, md);
     4039    bool status = psDBInsertOneRow(dbh, P1PENDINGEXP_TABLE_NAME, md);
    72044040    psFree(md);
    72054041
     
    72954131psMetadata *p1PendingExpMetadataFromObject(const p1PendingExpRow *object)
    72964132{
    7297     psMetadata      *md;
    7298 
    7299     md = psMetadataAlloc();
    7300     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     4133    psMetadata *md = psMetadataAlloc();
     4134    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    73014135        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    73024136        psFree(md);
    7303         return NULL;
    7304     }
    7305     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     4137        return false;
     4138    }
     4139    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    73064140        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    73074141        psFree(md);
    7308         return NULL;
    7309     }
    7310     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
     4142        return false;
     4143    }
     4144    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
    73114145        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    73124146        psFree(md);
    7313         return NULL;
    7314     }
     4147        return false;
     4148    }
     4149
    73154150
    73164151    return md;
     
    73194154p1PendingExpRow *p1PendingExpObjectFromMetadata(psMetadata *md)
    73204155{
    7321     bool            status;
    7322     char            *exp_tag;
    7323     char            *recipe;
    7324     psS32           p1_version;
    7325 
    7326     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     4156
     4157bool status = false;
     4158    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    73274159    if (!status) {
    73284160        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    73294161        return false;
    73304162    }
    7331     recipe = psMetadataLookupPtr(&status, md, "recipe");
     4163    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    73324164    if (!status) {
    73334165        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    73344166        return false;
    73354167    }
    7336     p1_version = psMetadataLookupS32(&status, md, "p1_version");
     4168    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
    73374169    if (!status) {
    73384170        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
     
    74614293bool p2PendingExpCreateTable(psDB *dbh)
    74624294{
    7463     psMetadata      *md;
    7464     bool            status;
    7465 
    7466     md = psMetadataAlloc();
    7467     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     4295    psMetadata *md = psMetadataAlloc();
     4296    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    74684297        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    74694298        psFree(md);
    74704299        return false;
    74714300    }
    7472     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     4301    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    74734302        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    74744303        psFree(md);
    74754304        return false;
    74764305    }
    7477     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
     4306    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
    74784307        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    74794308        psFree(md);
    74804309        return false;
    74814310    }
    7482     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     4311    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    74834312        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    74844313        psFree(md);
     
    74864315    }
    74874316
    7488     status = psDBCreateTable(dbh, P2PENDINGEXP_TABLE_NAME, md);
     4317    bool status = psDBCreateTable(dbh, P2PENDINGEXP_TABLE_NAME, md);
    74894318
    74904319    psFree(md);
     
    75004329bool p2PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version)
    75014330{
    7502     psMetadata      *md;
    7503     bool            status;
    7504 
    7505     md = psMetadataAlloc();
    7506     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     4331    psMetadata *md = psMetadataAlloc();
     4332    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    75074333        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    75084334        psFree(md);
    75094335        return false;
    75104336    }
    7511     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     4337    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    75124338        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    75134339        psFree(md);
    75144340        return false;
    75154341    }
    7516     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
     4342    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
    75174343        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    75184344        psFree(md);
    75194345        return false;
    75204346    }
    7521     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     4347    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    75224348        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    75234349        psFree(md);
     
    75254351    }
    75264352
    7527     status = psDBInsertOneRow(dbh, P2PENDINGEXP_TABLE_NAME, md);
     4353    bool status = psDBInsertOneRow(dbh, P2PENDINGEXP_TABLE_NAME, md);
    75284354    psFree(md);
    75294355
     
    76194445psMetadata *p2PendingExpMetadataFromObject(const p2PendingExpRow *object)
    76204446{
    7621     psMetadata      *md;
    7622 
    7623     md = psMetadataAlloc();
    7624     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     4447    psMetadata *md = psMetadataAlloc();
     4448    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    76254449        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    76264450        psFree(md);
    7627         return NULL;
    7628     }
    7629     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     4451        return false;
     4452    }
     4453    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    76304454        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    76314455        psFree(md);
    7632         return NULL;
    7633     }
    7634     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
     4456        return false;
     4457    }
     4458    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
    76354459        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    76364460        psFree(md);
    7637         return NULL;
    7638     }
    7639     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     4461        return false;
     4462    }
     4463    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    76404464        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    76414465        psFree(md);
    7642         return NULL;
    7643     }
     4466        return false;
     4467    }
     4468
    76444469
    76454470    return md;
     
    76484473p2PendingExpRow *p2PendingExpObjectFromMetadata(psMetadata *md)
    76494474{
    7650     bool            status;
    7651     char            *exp_tag;
    7652     char            *recipe;
    7653     psS32           p1_version;
    7654     psS32           p2_version;
    7655 
    7656     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     4475
     4476bool status = false;
     4477    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    76574478    if (!status) {
    76584479        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    76594480        return false;
    76604481    }
    7661     recipe = psMetadataLookupPtr(&status, md, "recipe");
     4482    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    76624483    if (!status) {
    76634484        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    76644485        return false;
    76654486    }
    7666     p1_version = psMetadataLookupS32(&status, md, "p1_version");
     4487    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
    76674488    if (!status) {
    76684489        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
    76694490        return false;
    76704491    }
    7671     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     4492    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    76724493    if (!status) {
    76734494        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
     
    78004621bool p2PendingImfileCreateTable(psDB *dbh)
    78014622{
    7802     psMetadata      *md;
    7803     bool            status;
    7804 
    7805     md = psMetadataAlloc();
    7806     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     4623    psMetadata *md = psMetadataAlloc();
     4624    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    78074625        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    78084626        psFree(md);
    78094627        return false;
    78104628    }
    7811     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     4629    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    78124630        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    78134631        psFree(md);
    78144632        return false;
    78154633    }
    7816     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     4634    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    78174635        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    78184636        psFree(md);
    78194637        return false;
    78204638    }
    7821     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     4639    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    78224640        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    78234641        psFree(md);
    78244642        return false;
    78254643    }
    7826     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
     4644    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
    78274645        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    78284646        psFree(md);
    78294647        return false;
    78304648    }
    7831     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     4649    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    78324650        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    78334651        psFree(md);
     
    78354653    }
    78364654
    7837     status = psDBCreateTable(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
     4655    bool status = psDBCreateTable(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
    78384656
    78394657    psFree(md);
     
    78494667bool p2PendingImfileInsert(psDB * dbh, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psS32 p1_version, psS32 p2_version)
    78504668{
    7851     psMetadata      *md;
    7852     bool            status;
    7853 
    7854     md = psMetadataAlloc();
    7855     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     4669    psMetadata *md = psMetadataAlloc();
     4670    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    78564671        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    78574672        psFree(md);
    78584673        return false;
    78594674    }
    7860     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     4675    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    78614676        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    78624677        psFree(md);
    78634678        return false;
    78644679    }
    7865     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     4680    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    78664681        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    78674682        psFree(md);
    78684683        return false;
    78694684    }
    7870     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     4685    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    78714686        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    78724687        psFree(md);
    78734688        return false;
    78744689    }
    7875     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
     4690    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
    78764691        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    78774692        psFree(md);
    78784693        return false;
    78794694    }
    7880     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     4695    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    78814696        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    78824697        psFree(md);
     
    78844699    }
    78854700
    7886     status = psDBInsertOneRow(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
     4701    bool status = psDBInsertOneRow(dbh, P2PENDINGIMFILE_TABLE_NAME, md);
    78874702    psFree(md);
    78884703
     
    79784793psMetadata *p2PendingImfileMetadataFromObject(const p2PendingImfileRow *object)
    79794794{
    7980     psMetadata      *md;
    7981 
    7982     md = psMetadataAlloc();
    7983     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     4795    psMetadata *md = psMetadataAlloc();
     4796    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    79844797        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    79854798        psFree(md);
    7986         return NULL;
    7987     }
    7988     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     4799        return false;
     4800    }
     4801    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    79894802        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    79904803        psFree(md);
    7991         return NULL;
    7992     }
    7993     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     4804        return false;
     4805    }
     4806    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    79944807        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    79954808        psFree(md);
    7996         return NULL;
    7997     }
    7998     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     4809        return false;
     4810    }
     4811    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    79994812        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    80004813        psFree(md);
    8001         return NULL;
    8002     }
    8003     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
     4814        return false;
     4815    }
     4816    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
    80044817        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    80054818        psFree(md);
    8006         return NULL;
    8007     }
    8008     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     4819        return false;
     4820    }
     4821    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    80094822        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    80104823        psFree(md);
    8011         return NULL;
    8012     }
     4824        return false;
     4825    }
     4826
    80134827
    80144828    return md;
     
    80174831p2PendingImfileRow *p2PendingImfileObjectFromMetadata(psMetadata *md)
    80184832{
    8019     bool            status;
    8020     char            *exp_tag;
    8021     char            *class_id;
    8022     char            *uri;
    8023     char            *recipe;
    8024     psS32           p1_version;
    8025     psS32           p2_version;
    8026 
    8027     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     4833
     4834bool status = false;
     4835    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    80284836    if (!status) {
    80294837        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    80304838        return false;
    80314839    }
    8032     class_id = psMetadataLookupPtr(&status, md, "class_id");
     4840    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    80334841    if (!status) {
    80344842        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    80354843        return false;
    80364844    }
    8037     uri = psMetadataLookupPtr(&status, md, "uri");
     4845    char* uri = psMetadataLookupPtr(&status, md, "uri");
    80384846    if (!status) {
    80394847        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    80404848        return false;
    80414849    }
    8042     recipe = psMetadataLookupPtr(&status, md, "recipe");
     4850    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    80434851    if (!status) {
    80444852        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    80454853        return false;
    80464854    }
    8047     p1_version = psMetadataLookupS32(&status, md, "p1_version");
     4855    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
    80484856    if (!status) {
    80494857        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
    80504858        return false;
    80514859    }
    8052     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     4860    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    80534861    if (!status) {
    80544862        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
     
    81754983bool p2ProcessedExpCreateTable(psDB *dbh)
    81764984{
    8177     psMetadata      *md;
    8178     bool            status;
    8179 
    8180     md = psMetadataAlloc();
    8181     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     4985    psMetadata *md = psMetadataAlloc();
     4986    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    81824987        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    81834988        psFree(md);
    81844989        return false;
    81854990    }
    8186     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
     4991    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
    81874992        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    81884993        psFree(md);
    81894994        return false;
    81904995    }
    8191     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     4996    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    81924997        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    81934998        psFree(md);
     
    81955000    }
    81965001
    8197     status = psDBCreateTable(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
     5002    bool status = psDBCreateTable(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
    81985003
    81995004    psFree(md);
     
    82095014bool p2ProcessedExpInsert(psDB * dbh, const char *exp_tag, psS32 p1_version, psS32 p2_version)
    82105015{
    8211     psMetadata      *md;
    8212     bool            status;
    8213 
    8214     md = psMetadataAlloc();
    8215     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     5016    psMetadata *md = psMetadataAlloc();
     5017    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    82165018        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    82175019        psFree(md);
    82185020        return false;
    82195021    }
    8220     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
     5022    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
    82215023        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    82225024        psFree(md);
    82235025        return false;
    82245026    }
    8225     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     5027    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    82265028        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    82275029        psFree(md);
     
    82295031    }
    82305032
    8231     status = psDBInsertOneRow(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
     5033    bool status = psDBInsertOneRow(dbh, P2PROCESSEDEXP_TABLE_NAME, md);
    82325034    psFree(md);
    82335035
     
    83235125psMetadata *p2ProcessedExpMetadataFromObject(const p2ProcessedExpRow *object)
    83245126{
    8325     psMetadata      *md;
    8326 
    8327     md = psMetadataAlloc();
    8328     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     5127    psMetadata *md = psMetadataAlloc();
     5128    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    83295129        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    83305130        psFree(md);
    8331         return NULL;
    8332     }
    8333     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
     5131        return false;
     5132    }
     5133    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
    83345134        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    83355135        psFree(md);
    8336         return NULL;
    8337     }
    8338     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     5136        return false;
     5137    }
     5138    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    83395139        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    83405140        psFree(md);
    8341         return NULL;
    8342     }
     5141        return false;
     5142    }
     5143
    83435144
    83445145    return md;
     
    83475148p2ProcessedExpRow *p2ProcessedExpObjectFromMetadata(psMetadata *md)
    83485149{
    8349     bool            status;
    8350     char            *exp_tag;
    8351     psS32           p1_version;
    8352     psS32           p2_version;
    8353 
    8354     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     5150
     5151bool status = false;
     5152    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    83555153    if (!status) {
    83565154        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    83575155        return false;
    83585156    }
    8359     p1_version = psMetadataLookupS32(&status, md, "p1_version");
     5157    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
    83605158    if (!status) {
    83615159        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
    83625160        return false;
    83635161    }
    8364     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     5162    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    83655163    if (!status) {
    83665164        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
     
    85005298bool p2ProcessedImfileCreateTable(psDB *dbh)
    85015299{
    8502     psMetadata      *md;
    8503     bool            status;
    8504 
    8505     md = psMetadataAlloc();
    8506     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     5300    psMetadata *md = psMetadataAlloc();
     5301    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    85075302        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    85085303        psFree(md);
    85095304        return false;
    85105305    }
    8511     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     5306    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    85125307        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    85135308        psFree(md);
    85145309        return false;
    85155310    }
    8516     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     5311    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    85175312        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    85185313        psFree(md);
    85195314        return false;
    85205315    }
    8521     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     5316    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    85225317        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    85235318        psFree(md);
    85245319        return false;
    85255320    }
    8526     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     5321    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    85275322        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    85285323        psFree(md);
    85295324        return false;
    85305325    }
    8531     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     5326    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    85325327        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    85335328        psFree(md);
    85345329        return false;
    85355330    }
    8536     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     5331    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    85375332        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    85385333        psFree(md);
    85395334        return false;
    85405335    }
    8541     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     5336    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    85425337        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    85435338        psFree(md);
    85445339        return false;
    85455340    }
    8546     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     5341    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    85475342        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    85485343        psFree(md);
    85495344        return false;
    85505345    }
    8551     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, 0)) {
     5346    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, 0)) {
    85525347        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    85535348        psFree(md);
    85545349        return false;
    85555350    }
    8556     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     5351    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    85575352        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    85585353        psFree(md);
     
    85605355    }
    85615356
    8562     status = psDBCreateTable(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
     5357    bool status = psDBCreateTable(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
    85635358
    85645359    psFree(md);
     
    85745369bool p2ProcessedImfileInsert(psDB * dbh, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, psS32 p1_version, psS32 p2_version)
    85755370{
    8576     psMetadata      *md;
    8577     bool            status;
    8578 
    8579     md = psMetadataAlloc();
    8580     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     5371    psMetadata *md = psMetadataAlloc();
     5372    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    85815373        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    85825374        psFree(md);
    85835375        return false;
    85845376    }
    8585     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     5377    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    85865378        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    85875379        psFree(md);
    85885380        return false;
    85895381    }
    8590     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     5382    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    85915383        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    85925384        psFree(md);
    85935385        return false;
    85945386    }
    8595     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     5387    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    85965388        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    85975389        psFree(md);
    85985390        return false;
    85995391    }
    8600     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     5392    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    86015393        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    86025394        psFree(md);
    86035395        return false;
    86045396    }
    8605     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     5397    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    86065398        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    86075399        psFree(md);
    86085400        return false;
    86095401    }
    8610     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     5402    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    86115403        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    86125404        psFree(md);
    86135405        return false;
    86145406    }
    8615     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     5407    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    86165408        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    86175409        psFree(md);
    86185410        return false;
    86195411    }
    8620     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     5412    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    86215413        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    86225414        psFree(md);
    86235415        return false;
    86245416    }
    8625     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, p1_version)) {
     5417    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, p1_version)) {
    86265418        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    86275419        psFree(md);
    86285420        return false;
    86295421    }
    8630     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     5422    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    86315423        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    86325424        psFree(md);
     
    86345426    }
    86355427
    8636     status = psDBInsertOneRow(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
     5428    bool status = psDBInsertOneRow(dbh, P2PROCESSEDIMFILE_TABLE_NAME, md);
    86375429    psFree(md);
    86385430
     
    87285520psMetadata *p2ProcessedImfileMetadataFromObject(const p2ProcessedImfileRow *object)
    87295521{
    8730     psMetadata      *md;
    8731 
    8732     md = psMetadataAlloc();
    8733     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     5522    psMetadata *md = psMetadataAlloc();
     5523    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    87345524        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    87355525        psFree(md);
    8736         return NULL;
    8737     }
    8738     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     5526        return false;
     5527    }
     5528    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    87395529        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    87405530        psFree(md);
    8741         return NULL;
    8742     }
    8743     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     5531        return false;
     5532    }
     5533    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    87445534        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    87455535        psFree(md);
    8746         return NULL;
    8747     }
    8748     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     5536        return false;
     5537    }
     5538    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    87495539        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    87505540        psFree(md);
    8751         return NULL;
    8752     }
    8753     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     5541        return false;
     5542    }
     5543    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    87545544        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    87555545        psFree(md);
    8756         return NULL;
    8757     }
    8758     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     5546        return false;
     5547    }
     5548    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    87595549        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    87605550        psFree(md);
    8761         return NULL;
    8762     }
    8763     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     5551        return false;
     5552    }
     5553    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    87645554        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    87655555        psFree(md);
    8766         return NULL;
    8767     }
    8768     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     5556        return false;
     5557    }
     5558    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    87695559        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    87705560        psFree(md);
    8771         return NULL;
    8772     }
    8773     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     5561        return false;
     5562    }
     5563    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    87745564        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    87755565        psFree(md);
    8776         return NULL;
    8777     }
    8778     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p1_version", 0, NULL, object->p1_version)) {
     5566        return false;
     5567    }
     5568    if (!psMetadataAdd(md, PS_LIST_TAIL, "p1_version", PS_DATA_S32, NULL, object->p1_version)) {
    87795569        psError(PS_ERR_UNKNOWN, false, "failed to add item p1_version");
    87805570        psFree(md);
    8781         return NULL;
    8782     }
    8783     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     5571        return false;
     5572    }
     5573    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    87845574        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    87855575        psFree(md);
    8786         return NULL;
    8787     }
     5576        return false;
     5577    }
     5578
    87885579
    87895580    return md;
     
    87925583p2ProcessedImfileRow *p2ProcessedImfileObjectFromMetadata(psMetadata *md)
    87935584{
    8794     bool            status;
    8795     char            *exp_tag;
    8796     char            *class_id;
    8797     char            *uri;
    8798     char            *recipe;
    8799     psF64           bg;
    8800     psF64           bg_stdev;
    8801     psF64           bg_mean_stdev;
    8802     char            *b1_uri;
    8803     char            *b2_uri;
    8804     psS32           p1_version;
    8805     psS32           p2_version;
    8806 
    8807     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     5585
     5586bool status = false;
     5587    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    88085588    if (!status) {
    88095589        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    88105590        return false;
    88115591    }
    8812     class_id = psMetadataLookupPtr(&status, md, "class_id");
     5592    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    88135593    if (!status) {
    88145594        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    88155595        return false;
    88165596    }
    8817     uri = psMetadataLookupPtr(&status, md, "uri");
     5597    char* uri = psMetadataLookupPtr(&status, md, "uri");
    88185598    if (!status) {
    88195599        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    88205600        return false;
    88215601    }
    8822     recipe = psMetadataLookupPtr(&status, md, "recipe");
     5602    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    88235603    if (!status) {
    88245604        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    88255605        return false;
    88265606    }
    8827     bg = psMetadataLookupF64(&status, md, "bg");
     5607    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    88285608    if (!status) {
    88295609        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    88305610        return false;
    88315611    }
    8832     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     5612    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    88335613    if (!status) {
    88345614        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    88355615        return false;
    88365616    }
    8837     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     5617    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    88385618    if (!status) {
    88395619        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    88405620        return false;
    88415621    }
    8842     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     5622    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    88435623    if (!status) {
    88445624        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    88455625        return false;
    88465626    }
    8847     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     5627    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    88485628    if (!status) {
    88495629        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
    88505630        return false;
    88515631    }
    8852     p1_version = psMetadataLookupS32(&status, md, "p1_version");
     5632    psS32 p1_version = psMetadataLookupS32(&status, md, "p1_version");
    88535633    if (!status) {
    88545634        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");
    88555635        return false;
    88565636    }
    8857     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     5637    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    88585638    if (!status) {
    88595639        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
     
    89805760bool p3PendingExpCreateTable(psDB *dbh)
    89815761{
    8982     psMetadata      *md;
    8983     bool            status;
    8984 
    8985     md = psMetadataAlloc();
    8986     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     5762    psMetadata *md = psMetadataAlloc();
     5763    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    89875764        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    89885765        psFree(md);
    89895766        return false;
    89905767    }
    8991     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     5768    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    89925769        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    89935770        psFree(md);
    89945771        return false;
    89955772    }
    8996     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, 0)) {
     5773    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, 0)) {
    89975774        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    89985775        psFree(md);
     
    90005777    }
    90015778
    9002     status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md);
     5779    bool status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md);
    90035780
    90045781    psFree(md);
     
    90145791bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version)
    90155792{
    9016     psMetadata      *md;
    9017     bool            status;
    9018 
    9019     md = psMetadataAlloc();
    9020     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     5793    psMetadata *md = psMetadataAlloc();
     5794    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    90215795        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    90225796        psFree(md);
    90235797        return false;
    90245798    }
    9025     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     5799    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    90265800        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    90275801        psFree(md);
    90285802        return false;
    90295803    }
    9030     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, p3_version)) {
     5804    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
    90315805        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    90325806        psFree(md);
     
    90345808    }
    90355809
    9036     status = psDBInsertOneRow(dbh, P3PENDINGEXP_TABLE_NAME, md);
     5810    bool status = psDBInsertOneRow(dbh, P3PENDINGEXP_TABLE_NAME, md);
    90375811    psFree(md);
    90385812
     
    91285902psMetadata *p3PendingExpMetadataFromObject(const p3PendingExpRow *object)
    91295903{
    9130     psMetadata      *md;
    9131 
    9132     md = psMetadataAlloc();
    9133     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     5904    psMetadata *md = psMetadataAlloc();
     5905    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    91345906        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    91355907        psFree(md);
    9136         return NULL;
    9137     }
    9138     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     5908        return false;
     5909    }
     5910    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    91395911        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    91405912        psFree(md);
    9141         return NULL;
    9142     }
    9143     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, object->p3_version)) {
     5913        return false;
     5914    }
     5915    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, object->p3_version)) {
    91445916        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    91455917        psFree(md);
    9146         return NULL;
    9147     }
     5918        return false;
     5919    }
     5920
    91485921
    91495922    return md;
     
    91525925p3PendingExpRow *p3PendingExpObjectFromMetadata(psMetadata *md)
    91535926{
    9154     bool            status;
    9155     char            *exp_tag;
    9156     psS32           p2_version;
    9157     psS32           p3_version;
    9158 
    9159     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     5927
     5928bool status = false;
     5929    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    91605930    if (!status) {
    91615931        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    91625932        return false;
    91635933    }
    9164     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     5934    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    91655935    if (!status) {
    91665936        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
    91675937        return false;
    91685938    }
    9169     p3_version = psMetadataLookupS32(&status, md, "p3_version");
     5939    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
    91705940    if (!status) {
    91715941        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
     
    93086078bool p3ProcessedExpCreateTable(psDB *dbh)
    93096079{
    9310     psMetadata      *md;
    9311     bool            status;
    9312 
    9313     md = psMetadataAlloc();
    9314     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     6080    psMetadata *md = psMetadataAlloc();
     6081    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    93156082        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    93166083        psFree(md);
    93176084        return false;
    93186085    }
    9319     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     6086    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    93206087        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    93216088        psFree(md);
    93226089        return false;
    93236090    }
    9324     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     6091    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    93256092        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    93266093        psFree(md);
    93276094        return false;
    93286095    }
    9329     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     6096    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    93306097        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    93316098        psFree(md);
    93326099        return false;
    93336100    }
    9334     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     6101    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    93356102        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    93366103        psFree(md);
    93376104        return false;
    93386105    }
    9339     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     6106    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    93406107        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    93416108        psFree(md);
    93426109        return false;
    93436110    }
    9344     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, 0.0)) {
     6111    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, 0.0)) {
    93456112        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
    93466113        psFree(md);
    93476114        return false;
    93486115    }
    9349     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, 0.0)) {
     6116    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, 0.0)) {
    93506117        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
    93516118        psFree(md);
    93526119        return false;
    93536120    }
    9354     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, 0)) {
     6121    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, 0)) {
    93556122        psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
    93566123        psFree(md);
    93576124        return false;
    93586125    }
    9359     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     6126    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    93606127        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    93616128        psFree(md);
    93626129        return false;
    93636130    }
    9364     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     6131    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    93656132        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    93666133        psFree(md);
    93676134        return false;
    93686135    }
    9369     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, 0.0)) {
     6136    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, 0.0)) {
    93706137        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
    93716138        psFree(md);
    93726139        return false;
    93736140    }
    9374     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, 0.0)) {
     6141    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, 0.0)) {
    93756142        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
    93766143        psFree(md);
    93776144        return false;
    93786145    }
    9379     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, 0)) {
     6146    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, 0)) {
    93806147        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    93816148        psFree(md);
    93826149        return false;
    93836150    }
    9384     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, 0)) {
     6151    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, 0)) {
    93856152        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    93866153        psFree(md);
     
    93886155    }
    93896156
    9390     status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
     6157    bool status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
    93916158
    93926159    psFree(md);
     
    94026169bool p3ProcessedExpInsert(psDB * dbh, const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version)
    94036170{
    9404     psMetadata      *md;
    9405     bool            status;
    9406 
    9407     md = psMetadataAlloc();
    9408     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     6171    psMetadata *md = psMetadataAlloc();
     6172    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    94096173        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    94106174        psFree(md);
    94116175        return false;
    94126176    }
    9413     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     6177    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    94146178        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    94156179        psFree(md);
    94166180        return false;
    94176181    }
    9418     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     6182    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    94196183        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    94206184        psFree(md);
    94216185        return false;
    94226186    }
    9423     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     6187    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    94246188        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    94256189        psFree(md);
    94266190        return false;
    94276191    }
    9428     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     6192    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    94296193        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    94306194        psFree(md);
    94316195        return false;
    94326196    }
    9433     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     6197    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    94346198        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    94356199        psFree(md);
    94366200        return false;
    94376201    }
    9438     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, sigma_ra)) {
     6202    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, sigma_ra)) {
    94396203        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
    94406204        psFree(md);
    94416205        return false;
    94426206    }
    9443     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, sigma_dec)) {
     6207    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, sigma_dec)) {
    94446208        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
    94456209        psFree(md);
    94466210        return false;
    94476211    }
    9448     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, nastro)) {
     6212    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, nastro)) {
    94496213        psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
    94506214        psFree(md);
    94516215        return false;
    94526216    }
    9453     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     6217    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    94546218        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    94556219        psFree(md);
    94566220        return false;
    94576221    }
    9458     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     6222    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    94596223        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    94606224        psFree(md);
    94616225        return false;
    94626226    }
    9463     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, zp_mean)) {
     6227    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, zp_mean)) {
    94646228        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
    94656229        psFree(md);
    94666230        return false;
    94676231    }
    9468     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, zp_stdev)) {
     6232    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, zp_stdev)) {
    94696233        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
    94706234        psFree(md);
    94716235        return false;
    94726236    }
    9473     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, p2_version)) {
     6237    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) {
    94746238        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    94756239        psFree(md);
    94766240        return false;
    94776241    }
    9478     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, p3_version)) {
     6242    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
    94796243        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    94806244        psFree(md);
     
    94826246    }
    94836247
    9484     status = psDBInsertOneRow(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
     6248    bool status = psDBInsertOneRow(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
    94856249    psFree(md);
    94866250
     
    95766340psMetadata *p3ProcessedExpMetadataFromObject(const p3ProcessedExpRow *object)
    95776341{
    9578     psMetadata      *md;
    9579 
    9580     md = psMetadataAlloc();
    9581     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     6342    psMetadata *md = psMetadataAlloc();
     6343    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    95826344        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    95836345        psFree(md);
    9584         return NULL;
    9585     }
    9586     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     6346        return false;
     6347    }
     6348    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    95876349        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    95886350        psFree(md);
    9589         return NULL;
    9590     }
    9591     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     6351        return false;
     6352    }
     6353    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    95926354        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    95936355        psFree(md);
    9594         return NULL;
    9595     }
    9596     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     6356        return false;
     6357    }
     6358    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    95976359        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    95986360        psFree(md);
    9599         return NULL;
    9600     }
    9601     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     6361        return false;
     6362    }
     6363    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    96026364        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    96036365        psFree(md);
    9604         return NULL;
    9605     }
    9606     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     6366        return false;
     6367    }
     6368    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    96076369        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    96086370        psFree(md);
    9609         return NULL;
    9610     }
    9611     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_ra", 0, NULL, object->sigma_ra)) {
     6371        return false;
     6372    }
     6373    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_ra", PS_DATA_F32, NULL, object->sigma_ra)) {
    96126374        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_ra");
    96136375        psFree(md);
    9614         return NULL;
    9615     }
    9616     if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigma_dec", 0, NULL, object->sigma_dec)) {
     6376        return false;
     6377    }
     6378    if (!psMetadataAdd(md, PS_LIST_TAIL, "sigma_dec", PS_DATA_F32, NULL, object->sigma_dec)) {
    96176379        psError(PS_ERR_UNKNOWN, false, "failed to add item sigma_dec");
    96186380        psFree(md);
    9619         return NULL;
    9620     }
    9621     if (!psMetadataAddS32(md, PS_LIST_TAIL, "nastro", 0, NULL, object->nastro)) {
     6381        return false;
     6382    }
     6383    if (!psMetadataAdd(md, PS_LIST_TAIL, "nastro", PS_DATA_S32, NULL, object->nastro)) {
    96226384        psError(PS_ERR_UNKNOWN, false, "failed to add item nastro");
    96236385        psFree(md);
    9624         return NULL;
    9625     }
    9626     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     6386        return false;
     6387    }
     6388    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    96276389        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    96286390        psFree(md);
    9629         return NULL;
    9630     }
    9631     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     6391        return false;
     6392    }
     6393    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    96326394        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    96336395        psFree(md);
    9634         return NULL;
    9635     }
    9636     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_mean", 0, NULL, object->zp_mean)) {
     6396        return false;
     6397    }
     6398    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_mean", PS_DATA_F32, NULL, object->zp_mean)) {
    96376399        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_mean");
    96386400        psFree(md);
    9639         return NULL;
    9640     }
    9641     if (!psMetadataAddF32(md, PS_LIST_TAIL, "zp_stdev", 0, NULL, object->zp_stdev)) {
     6401        return false;
     6402    }
     6403    if (!psMetadataAdd(md, PS_LIST_TAIL, "zp_stdev", PS_DATA_F32, NULL, object->zp_stdev)) {
    96426404        psError(PS_ERR_UNKNOWN, false, "failed to add item zp_stdev");
    96436405        psFree(md);
    9644         return NULL;
    9645     }
    9646     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p2_version", 0, NULL, object->p2_version)) {
     6406        return false;
     6407    }
     6408    if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, object->p2_version)) {
    96476409        psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version");
    96486410        psFree(md);
    9649         return NULL;
    9650     }
    9651     if (!psMetadataAddS32(md, PS_LIST_TAIL, "p3_version", 0, NULL, object->p3_version)) {
     6411        return false;
     6412    }
     6413    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, object->p3_version)) {
    96526414        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
    96536415        psFree(md);
    9654         return NULL;
    9655     }
     6416        return false;
     6417    }
     6418
    96566419
    96576420    return md;
     
    96606423p3ProcessedExpRow *p3ProcessedExpObjectFromMetadata(psMetadata *md)
    96616424{
    9662     bool            status;
    9663     char            *exp_tag;
    9664     char            *uri;
    9665     char            *recipe;
    9666     psF64           bg;
    9667     psF64           bg_stdev;
    9668     psF64           bg_mean_stdev;
    9669     psF32           sigma_ra;
    9670     psF32           sigma_dec;
    9671     psS32           nastro;
    9672     char            *b1_uri;
    9673     char            *b2_uri;
    9674     psF32           zp_mean;
    9675     psF32           zp_stdev;
    9676     psS32           p2_version;
    9677     psS32           p3_version;
    9678 
    9679     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     6425
     6426bool status = false;
     6427    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    96806428    if (!status) {
    96816429        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    96826430        return false;
    96836431    }
    9684     uri = psMetadataLookupPtr(&status, md, "uri");
     6432    char* uri = psMetadataLookupPtr(&status, md, "uri");
    96856433    if (!status) {
    96866434        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    96876435        return false;
    96886436    }
    9689     recipe = psMetadataLookupPtr(&status, md, "recipe");
     6437    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    96906438    if (!status) {
    96916439        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    96926440        return false;
    96936441    }
    9694     bg = psMetadataLookupF64(&status, md, "bg");
     6442    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    96956443    if (!status) {
    96966444        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    96976445        return false;
    96986446    }
    9699     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     6447    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    97006448    if (!status) {
    97016449        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    97026450        return false;
    97036451    }
    9704     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     6452    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    97056453    if (!status) {
    97066454        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    97076455        return false;
    97086456    }
    9709     sigma_ra = psMetadataLookupF32(&status, md, "sigma_ra");
     6457    psF32 sigma_ra = psMetadataLookupF32(&status, md, "sigma_ra");
    97106458    if (!status) {
    97116459        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_ra");
    97126460        return false;
    97136461    }
    9714     sigma_dec = psMetadataLookupF32(&status, md, "sigma_dec");
     6462    psF32 sigma_dec = psMetadataLookupF32(&status, md, "sigma_dec");
    97156463    if (!status) {
    97166464        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_dec");
    97176465        return false;
    97186466    }
    9719     nastro = psMetadataLookupS32(&status, md, "nastro");
     6467    psS32 nastro = psMetadataLookupS32(&status, md, "nastro");
    97206468    if (!status) {
    97216469        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nastro");
    97226470        return false;
    97236471    }
    9724     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     6472    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    97256473    if (!status) {
    97266474        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    97276475        return false;
    97286476    }
    9729     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     6477    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    97306478    if (!status) {
    97316479        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
    97326480        return false;
    97336481    }
    9734     zp_mean = psMetadataLookupF32(&status, md, "zp_mean");
     6482    psF32 zp_mean = psMetadataLookupF32(&status, md, "zp_mean");
    97356483    if (!status) {
    97366484        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_mean");
    97376485        return false;
    97386486    }
    9739     zp_stdev = psMetadataLookupF32(&status, md, "zp_stdev");
     6487    psF32 zp_stdev = psMetadataLookupF32(&status, md, "zp_stdev");
    97406488    if (!status) {
    97416489        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_stdev");
    97426490        return false;
    97436491    }
    9744     p2_version = psMetadataLookupS32(&status, md, "p2_version");
     6492    psS32 p2_version = psMetadataLookupS32(&status, md, "p2_version");
    97456493    if (!status) {
    97466494        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");
    97476495        return false;
    97486496    }
    9749     p3_version = psMetadataLookupS32(&status, md, "p3_version");
     6497    psS32 p3_version = psMetadataLookupS32(&status, md, "p3_version");
    97506498    if (!status) {
    97516499        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");
     
    98746622bool detRunCreateTable(psDB *dbh)
    98756623{
    9876     psMetadata      *md;
    9877     bool            status;
    9878 
    9879     md = psMetadataAlloc();
    9880     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key AUTO_INCREMENT", 0)) {
     6624    psMetadata *md = psMetadataAlloc();
     6625    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key AUTO_INCREMENT", 0)) {
    98816626        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    98826627        psFree(md);
    98836628        return false;
    98846629    }
    9885     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Key", 0)) {
     6630    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Key", 0)) {
    98866631        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    98876632        psFree(md);
    98886633        return false;
    98896634    }
    9890     if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, "Key", "255")) {
     6635    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, "Key", "255")) {
    98916636        psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
    98926637        psFree(md);
    98936638        return false;
    98946639    }
    9895     if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, "Key", "64")) {
     6640    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, "Key", "64")) {
    98966641        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
    98976642        psFree(md);
     
    98996644    }
    99006645
    9901     status = psDBCreateTable(dbh, DETRUN_TABLE_NAME, md);
     6646    bool status = psDBCreateTable(dbh, DETRUN_TABLE_NAME, md);
    99026647
    99036648    psFree(md);
     
    99136658bool detRunInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *det_type, const char *state)
    99146659{
    9915     psMetadata      *md;
    9916     bool            status;
    9917 
    9918     md = psMetadataAlloc();
    9919     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     6660    psMetadata *md = psMetadataAlloc();
     6661    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    99206662        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    99216663        psFree(md);
    99226664        return false;
    99236665    }
    9924     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     6666    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    99256667        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    99266668        psFree(md);
    99276669        return false;
    99286670    }
    9929     if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, NULL, det_type)) {
     6671    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, NULL, det_type)) {
    99306672        psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
    99316673        psFree(md);
    99326674        return false;
    99336675    }
    9934     if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, state)) {
     6676    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
    99356677        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
    99366678        psFree(md);
     
    99386680    }
    99396681
    9940     status = psDBInsertOneRow(dbh, DETRUN_TABLE_NAME, md);
     6682    bool status = psDBInsertOneRow(dbh, DETRUN_TABLE_NAME, md);
    99416683    psFree(md);
    99426684
     
    100326774psMetadata *detRunMetadataFromObject(const detRunRow *object)
    100336775{
    10034     psMetadata      *md;
    10035 
    10036     md = psMetadataAlloc();
    10037     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     6776    psMetadata *md = psMetadataAlloc();
     6777    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    100386778        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    100396779        psFree(md);
    10040         return NULL;
    10041     }
    10042     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     6780        return false;
     6781    }
     6782    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    100436783        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    100446784        psFree(md);
    10045         return NULL;
    10046     }
    10047     if (!psMetadataAddStr(md, PS_LIST_TAIL, "det_type", 0, NULL, object->det_type)) {
     6785        return false;
     6786    }
     6787    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_type", PS_DATA_STRING, NULL, object->det_type)) {
    100486788        psError(PS_ERR_UNKNOWN, false, "failed to add item det_type");
    100496789        psFree(md);
    10050         return NULL;
    10051     }
    10052     if (!psMetadataAddStr(md, PS_LIST_TAIL, "state", 0, NULL, object->state)) {
     6790        return false;
     6791    }
     6792    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) {
    100536793        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
    100546794        psFree(md);
    10055         return NULL;
    10056     }
     6795        return false;
     6796    }
     6797
    100576798
    100586799    return md;
     
    100616802detRunRow *detRunObjectFromMetadata(psMetadata *md)
    100626803{
    10063     bool            status;
    10064     psS32           det_id;
    10065     psS32           iteration;
    10066     char            *det_type;
    10067     char            *state;
    10068 
    10069     det_id = psMetadataLookupS32(&status, md, "det_id");
     6804
     6805bool status = false;
     6806    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    100706807    if (!status) {
    100716808        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    100726809        return false;
    100736810    }
    10074     iteration = psMetadataLookupS32(&status, md, "iteration");
     6811    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    100756812    if (!status) {
    100766813        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    100776814        return false;
    100786815    }
    10079     det_type = psMetadataLookupPtr(&status, md, "det_type");
     6816    char* det_type = psMetadataLookupPtr(&status, md, "det_type");
    100806817    if (!status) {
    100816818        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_type");
    100826819        return false;
    100836820    }
    10084     state = psMetadataLookupPtr(&status, md, "state");
     6821    char* state = psMetadataLookupPtr(&status, md, "state");
    100856822    if (!status) {
    100866823        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
     
    102086945bool detInputExpCreateTable(psDB *dbh)
    102096946{
    10210     psMetadata      *md;
    10211     bool            status;
    10212 
    10213     md = psMetadataAlloc();
    10214     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     6947    psMetadata *md = psMetadataAlloc();
     6948    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    102156949        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    102166950        psFree(md);
    102176951        return false;
    102186952    }
    10219     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     6953    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    102206954        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    102216955        psFree(md);
    102226956        return false;
    102236957    }
    10224     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     6958    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    102256959        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    102266960        psFree(md);
    102276961        return false;
    102286962    }
    10229     if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, false)) {
     6963    if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, 0)) {
    102306964        psError(PS_ERR_UNKNOWN, false, "failed to add item include");
    102316965        psFree(md);
     
    102336967    }
    102346968
    10235     status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md);
     6969    bool status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md);
    102366970
    102376971    psFree(md);
     
    102476981bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, bool include)
    102486982{
    10249     psMetadata      *md;
    10250     bool            status;
    10251 
    10252     md = psMetadataAlloc();
    10253     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     6983    psMetadata *md = psMetadataAlloc();
     6984    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    102546985        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    102556986        psFree(md);
    102566987        return false;
    102576988    }
    10258     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     6989    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    102596990        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    102606991        psFree(md);
    102616992        return false;
    102626993    }
    10263     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     6994    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    102646995        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    102656996        psFree(md);
     
    102727003    }
    102737004
    10274     status = psDBInsertOneRow(dbh, DETINPUTEXP_TABLE_NAME, md);
     7005    bool status = psDBInsertOneRow(dbh, DETINPUTEXP_TABLE_NAME, md);
    102757006    psFree(md);
    102767007
     
    103667097psMetadata *detInputExpMetadataFromObject(const detInputExpRow *object)
    103677098{
    10368     psMetadata      *md;
    10369 
    10370     md = psMetadataAlloc();
    10371     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     7099    psMetadata *md = psMetadataAlloc();
     7100    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    103727101        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    103737102        psFree(md);
    10374         return NULL;
    10375     }
    10376     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     7103        return false;
     7104    }
     7105    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    103777106        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    103787107        psFree(md);
    10379         return NULL;
    10380     }
    10381     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     7108        return false;
     7109    }
     7110    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    103827111        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    103837112        psFree(md);
    10384         return NULL;
     7113        return false;
    103857114    }
    103867115    if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, object->include)) {
    103877116        psError(PS_ERR_UNKNOWN, false, "failed to add item include");
    103887117        psFree(md);
    10389         return NULL;
    10390     }
     7118        return false;
     7119    }
     7120
    103917121
    103927122    return md;
     
    103957125detInputExpRow *detInputExpObjectFromMetadata(psMetadata *md)
    103967126{
    10397     bool            status;
    10398     psS32           det_id;
    10399     psS32           iteration;
    10400     char            *exp_tag;
    10401     bool            include;
    10402 
    10403     det_id = psMetadataLookupS32(&status, md, "det_id");
     7127
     7128bool status = false;
     7129    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    104047130    if (!status) {
    104057131        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    104067132        return false;
    104077133    }
    10408     iteration = psMetadataLookupS32(&status, md, "iteration");
     7134    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    104097135    if (!status) {
    104107136        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    104117137        return false;
    104127138    }
    10413     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     7139    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    104147140    if (!status) {
    104157141        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    104167142        return false;
    104177143    }
    10418     include = psMetadataLookupBool(&status, md, "include");
     7144    bool include = psMetadataLookupBool(&status, md, "include");
    104197145    if (!status) {
    104207146        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item include");
     
    105537279bool detProcessedImfileCreateTable(psDB *dbh)
    105547280{
    10555     psMetadata      *md;
    10556     bool            status;
    10557 
    10558     md = psMetadataAlloc();
    10559     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     7281    psMetadata *md = psMetadataAlloc();
     7282    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    105607283        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    105617284        psFree(md);
    105627285        return false;
    105637286    }
    10564     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     7287    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    105657288        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    105667289        psFree(md);
    105677290        return false;
    105687291    }
    10569     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     7292    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    105707293        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    105717294        psFree(md);
    105727295        return false;
    105737296    }
    10574     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     7297    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    105757298        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    105767299        psFree(md);
    105777300        return false;
    105787301    }
    10579     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     7302    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    105807303        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    105817304        psFree(md);
    105827305        return false;
    105837306    }
    10584     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     7307    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    105857308        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    105867309        psFree(md);
    105877310        return false;
    105887311    }
    10589     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     7312    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    105907313        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    105917314        psFree(md);
    105927315        return false;
    105937316    }
    10594     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     7317    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    105957318        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    105967319        psFree(md);
    105977320        return false;
    105987321    }
    10599     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     7322    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    106007323        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    106017324        psFree(md);
    106027325        return false;
    106037326    }
    10604     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     7327    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    106057328        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    106067329        psFree(md);
     
    106087331    }
    106097332
    10610     status = psDBCreateTable(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
     7333    bool status = psDBCreateTable(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
    106117334
    106127335    psFree(md);
     
    106227345bool detProcessedImfileInsert(psDB * dbh, psS32 det_id, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    106237346{
    10624     psMetadata      *md;
    10625     bool            status;
    10626 
    10627     md = psMetadataAlloc();
    10628     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     7347    psMetadata *md = psMetadataAlloc();
     7348    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    106297349        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    106307350        psFree(md);
    106317351        return false;
    106327352    }
    10633     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     7353    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    106347354        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    106357355        psFree(md);
    106367356        return false;
    106377357    }
    10638     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     7358    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    106397359        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    106407360        psFree(md);
    106417361        return false;
    106427362    }
    10643     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     7363    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    106447364        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    106457365        psFree(md);
    106467366        return false;
    106477367    }
    10648     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     7368    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    106497369        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    106507370        psFree(md);
    106517371        return false;
    106527372    }
    10653     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     7373    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    106547374        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    106557375        psFree(md);
    106567376        return false;
    106577377    }
    10658     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     7378    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    106597379        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    106607380        psFree(md);
    106617381        return false;
    106627382    }
    10663     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     7383    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    106647384        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    106657385        psFree(md);
    106667386        return false;
    106677387    }
    10668     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     7388    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    106697389        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    106707390        psFree(md);
    106717391        return false;
    106727392    }
    10673     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     7393    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    106747394        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    106757395        psFree(md);
     
    106777397    }
    106787398
    10679     status = psDBInsertOneRow(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
     7399    bool status = psDBInsertOneRow(dbh, DETPROCESSEDIMFILE_TABLE_NAME, md);
    106807400    psFree(md);
    106817401
     
    107717491psMetadata *detProcessedImfileMetadataFromObject(const detProcessedImfileRow *object)
    107727492{
    10773     psMetadata      *md;
    10774 
    10775     md = psMetadataAlloc();
    10776     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     7493    psMetadata *md = psMetadataAlloc();
     7494    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    107777495        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    107787496        psFree(md);
    10779         return NULL;
    10780     }
    10781     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     7497        return false;
     7498    }
     7499    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    107827500        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    107837501        psFree(md);
    10784         return NULL;
    10785     }
    10786     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     7502        return false;
     7503    }
     7504    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    107877505        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    107887506        psFree(md);
    10789         return NULL;
    10790     }
    10791     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     7507        return false;
     7508    }
     7509    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    107927510        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    107937511        psFree(md);
    10794         return NULL;
    10795     }
    10796     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     7512        return false;
     7513    }
     7514    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    107977515        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    107987516        psFree(md);
    10799         return NULL;
    10800     }
    10801     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     7517        return false;
     7518    }
     7519    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    108027520        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    108037521        psFree(md);
    10804         return NULL;
    10805     }
    10806     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     7522        return false;
     7523    }
     7524    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    108077525        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    108087526        psFree(md);
    10809         return NULL;
    10810     }
    10811     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     7527        return false;
     7528    }
     7529    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    108127530        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    108137531        psFree(md);
    10814         return NULL;
    10815     }
    10816     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     7532        return false;
     7533    }
     7534    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    108177535        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    108187536        psFree(md);
    10819         return NULL;
    10820     }
    10821     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     7537        return false;
     7538    }
     7539    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    108227540        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    108237541        psFree(md);
    10824         return NULL;
    10825     }
     7542        return false;
     7543    }
     7544
    108267545
    108277546    return md;
     
    108307549detProcessedImfileRow *detProcessedImfileObjectFromMetadata(psMetadata *md)
    108317550{
    10832     bool            status;
    10833     psS32           det_id;
    10834     char            *exp_tag;
    10835     char            *class_id;
    10836     char            *uri;
    10837     char            *recipe;
    10838     psF64           bg;
    10839     psF64           bg_stdev;
    10840     psF64           bg_mean_stdev;
    10841     char            *b1_uri;
    10842     char            *b2_uri;
    10843 
    10844     det_id = psMetadataLookupS32(&status, md, "det_id");
     7551
     7552bool status = false;
     7553    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    108457554    if (!status) {
    108467555        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    108477556        return false;
    108487557    }
    10849     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     7558    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    108507559    if (!status) {
    108517560        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    108527561        return false;
    108537562    }
    10854     class_id = psMetadataLookupPtr(&status, md, "class_id");
     7563    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    108557564    if (!status) {
    108567565        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    108577566        return false;
    108587567    }
    10859     uri = psMetadataLookupPtr(&status, md, "uri");
     7568    char* uri = psMetadataLookupPtr(&status, md, "uri");
    108607569    if (!status) {
    108617570        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    108627571        return false;
    108637572    }
    10864     recipe = psMetadataLookupPtr(&status, md, "recipe");
     7573    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    108657574    if (!status) {
    108667575        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    108677576        return false;
    108687577    }
    10869     bg = psMetadataLookupF64(&status, md, "bg");
     7578    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    108707579    if (!status) {
    108717580        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    108727581        return false;
    108737582    }
    10874     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     7583    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    108757584    if (!status) {
    108767585        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    108777586        return false;
    108787587    }
    10879     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     7588    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    108807589    if (!status) {
    108817590        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    108827591        return false;
    108837592    }
    10884     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     7593    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    108857594    if (!status) {
    108867595        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    108877596        return false;
    108887597    }
    10889     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     7598    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    108907599    if (!status) {
    108917600        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     
    110207729bool detProcessedExpCreateTable(psDB *dbh)
    110217730{
    11022     psMetadata      *md;
    11023     bool            status;
    11024 
    11025     md = psMetadataAlloc();
    11026     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     7731    psMetadata *md = psMetadataAlloc();
     7732    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    110277733        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    110287734        psFree(md);
    110297735        return false;
    110307736    }
    11031     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     7737    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    110327738        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    110337739        psFree(md);
    110347740        return false;
    110357741    }
    11036     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     7742    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    110377743        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    110387744        psFree(md);
    110397745        return false;
    110407746    }
    11041     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     7747    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    110427748        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    110437749        psFree(md);
    110447750        return false;
    110457751    }
    11046     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     7752    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    110477753        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    110487754        psFree(md);
    110497755        return false;
    110507756    }
    11051     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     7757    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    110527758        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    110537759        psFree(md);
    110547760        return false;
    110557761    }
    11056     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     7762    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    110577763        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    110587764        psFree(md);
    110597765        return false;
    110607766    }
    11061     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     7767    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    110627768        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    110637769        psFree(md);
     
    110657771    }
    110667772
    11067     status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
     7773    bool status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
    110687774
    110697775    psFree(md);
     
    110797785bool 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)
    110807786{
    11081     psMetadata      *md;
    11082     bool            status;
    11083 
    11084     md = psMetadataAlloc();
    11085     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     7787    psMetadata *md = psMetadataAlloc();
     7788    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    110867789        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    110877790        psFree(md);
    110887791        return false;
    110897792    }
    11090     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     7793    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    110917794        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    110927795        psFree(md);
    110937796        return false;
    110947797    }
    11095     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     7798    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    110967799        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    110977800        psFree(md);
    110987801        return false;
    110997802    }
    11100     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     7803    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    111017804        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    111027805        psFree(md);
    111037806        return false;
    111047807    }
    11105     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     7808    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    111067809        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    111077810        psFree(md);
    111087811        return false;
    111097812    }
    11110     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     7813    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    111117814        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    111127815        psFree(md);
    111137816        return false;
    111147817    }
    11115     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     7818    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    111167819        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    111177820        psFree(md);
    111187821        return false;
    111197822    }
    11120     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     7823    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    111217824        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    111227825        psFree(md);
     
    111247827    }
    111257828
    11126     status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
     7829    bool status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md);
    111277830    psFree(md);
    111287831
     
    112187921psMetadata *detProcessedExpMetadataFromObject(const detProcessedExpRow *object)
    112197922{
    11220     psMetadata      *md;
    11221 
    11222     md = psMetadataAlloc();
    11223     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     7923    psMetadata *md = psMetadataAlloc();
     7924    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    112247925        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    112257926        psFree(md);
    11226         return NULL;
    11227     }
    11228     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     7927        return false;
     7928    }
     7929    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    112297930        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    112307931        psFree(md);
    11231         return NULL;
    11232     }
    11233     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     7932        return false;
     7933    }
     7934    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    112347935        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    112357936        psFree(md);
    11236         return NULL;
    11237     }
    11238     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     7937        return false;
     7938    }
     7939    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    112397940        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    112407941        psFree(md);
    11241         return NULL;
    11242     }
    11243     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     7942        return false;
     7943    }
     7944    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    112447945        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    112457946        psFree(md);
    11246         return NULL;
    11247     }
    11248     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     7947        return false;
     7948    }
     7949    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    112497950        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    112507951        psFree(md);
    11251         return NULL;
    11252     }
    11253     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     7952        return false;
     7953    }
     7954    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    112547955        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    112557956        psFree(md);
    11256         return NULL;
    11257     }
    11258     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     7957        return false;
     7958    }
     7959    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    112597960        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    112607961        psFree(md);
    11261         return NULL;
    11262     }
     7962        return false;
     7963    }
     7964
    112637965
    112647966    return md;
     
    112677969detProcessedExpRow *detProcessedExpObjectFromMetadata(psMetadata *md)
    112687970{
    11269     bool            status;
    11270     psS32           det_id;
    11271     char            *exp_tag;
    11272     char            *recipe;
    11273     psF64           bg;
    11274     psF64           bg_stdev;
    11275     psF64           bg_mean_stdev;
    11276     char            *b1_uri;
    11277     char            *b2_uri;
    11278 
    11279     det_id = psMetadataLookupS32(&status, md, "det_id");
     7971
     7972bool status = false;
     7973    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    112807974    if (!status) {
    112817975        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    112827976        return false;
    112837977    }
    11284     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     7978    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    112857979    if (!status) {
    112867980        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    112877981        return false;
    112887982    }
    11289     recipe = psMetadataLookupPtr(&status, md, "recipe");
     7983    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    112907984    if (!status) {
    112917985        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    112927986        return false;
    112937987    }
    11294     bg = psMetadataLookupF64(&status, md, "bg");
     7988    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    112957989    if (!status) {
    112967990        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    112977991        return false;
    112987992    }
    11299     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     7993    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    113007994    if (!status) {
    113017995        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    113027996        return false;
    113037997    }
    11304     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     7998    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    113057999    if (!status) {
    113068000        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    113078001        return false;
    113088002    }
    11309     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     8003    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    113108004    if (!status) {
    113118005        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    113128006        return false;
    113138007    }
    11314     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     8008    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    113158009    if (!status) {
    113168010        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     
    114448138bool detStackedImfileCreateTable(psDB *dbh)
    114458139{
    11446     psMetadata      *md;
    11447     bool            status;
    11448 
    11449     md = psMetadataAlloc();
    11450     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     8140    psMetadata *md = psMetadataAlloc();
     8141    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    114518142        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    114528143        psFree(md);
    114538144        return false;
    114548145    }
    11455     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     8146    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    114568147        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    114578148        psFree(md);
    114588149        return false;
    114598150    }
    11460     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     8151    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    114618152        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    114628153        psFree(md);
    114638154        return false;
    114648155    }
    11465     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     8156    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    114668157        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    114678158        psFree(md);
    114688159        return false;
    114698160    }
    11470     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     8161    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    114718162        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    114728163        psFree(md);
    114738164        return false;
    114748165    }
    11475     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     8166    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    114768167        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    114778168        psFree(md);
    114788169        return false;
    114798170    }
    11480     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     8171    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    114818172        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    114828173        psFree(md);
    114838174        return false;
    114848175    }
    11485     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     8176    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    114868177        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    114878178        psFree(md);
     
    114898180    }
    114908181
    11491     status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
     8182    bool status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
    114928183
    114938184    psFree(md);
     
    115038194bool 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)
    115048195{
    11505     psMetadata      *md;
    11506     bool            status;
    11507 
    11508     md = psMetadataAlloc();
    11509     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     8196    psMetadata *md = psMetadataAlloc();
     8197    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    115108198        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    115118199        psFree(md);
    115128200        return false;
    115138201    }
    11514     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     8202    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    115158203        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    115168204        psFree(md);
    115178205        return false;
    115188206    }
    11519     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     8207    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    115208208        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    115218209        psFree(md);
    115228210        return false;
    115238211    }
    11524     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     8212    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    115258213        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    115268214        psFree(md);
    115278215        return false;
    115288216    }
    11529     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     8217    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    115308218        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    115318219        psFree(md);
    115328220        return false;
    115338221    }
    11534     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     8222    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    115358223        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    115368224        psFree(md);
    115378225        return false;
    115388226    }
    11539     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     8227    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    115408228        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    115418229        psFree(md);
    115428230        return false;
    115438231    }
    11544     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     8232    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    115458233        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    115468234        psFree(md);
     
    115488236    }
    115498237
    11550     status = psDBInsertOneRow(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
     8238    bool status = psDBInsertOneRow(dbh, DETSTACKEDIMFILE_TABLE_NAME, md);
    115518239    psFree(md);
    115528240
     
    116428330psMetadata *detStackedImfileMetadataFromObject(const detStackedImfileRow *object)
    116438331{
    11644     psMetadata      *md;
    11645 
    11646     md = psMetadataAlloc();
    11647     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     8332    psMetadata *md = psMetadataAlloc();
     8333    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    116488334        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    116498335        psFree(md);
    11650         return NULL;
    11651     }
    11652     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     8336        return false;
     8337    }
     8338    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    116538339        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    116548340        psFree(md);
    11655         return NULL;
    11656     }
    11657     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     8341        return false;
     8342    }
     8343    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    116588344        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    116598345        psFree(md);
    11660         return NULL;
    11661     }
    11662     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     8346        return false;
     8347    }
     8348    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    116638349        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    116648350        psFree(md);
    11665         return NULL;
    11666     }
    11667     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     8351        return false;
     8352    }
     8353    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    116688354        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    116698355        psFree(md);
    11670         return NULL;
    11671     }
    11672     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     8356        return false;
     8357    }
     8358    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    116738359        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    116748360        psFree(md);
    11675         return NULL;
    11676     }
    11677     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     8361        return false;
     8362    }
     8363    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    116788364        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    116798365        psFree(md);
    11680         return NULL;
    11681     }
    11682     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     8366        return false;
     8367    }
     8368    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    116838369        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    116848370        psFree(md);
    11685         return NULL;
    11686     }
     8371        return false;
     8372    }
     8373
    116878374
    116888375    return md;
     
    116918378detStackedImfileRow *detStackedImfileObjectFromMetadata(psMetadata *md)
    116928379{
    11693     bool            status;
    11694     psS32           det_id;
    11695     psS32           iteration;
    11696     char            *class_id;
    11697     char            *uri;
    11698     char            *recipe;
    11699     psF64           bg;
    11700     psF64           bg_stdev;
    11701     psF64           bg_mean_stdev;
    11702 
    11703     det_id = psMetadataLookupS32(&status, md, "det_id");
     8380
     8381bool status = false;
     8382    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    117048383    if (!status) {
    117058384        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    117068385        return false;
    117078386    }
    11708     iteration = psMetadataLookupS32(&status, md, "iteration");
     8387    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    117098388    if (!status) {
    117108389        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    117118390        return false;
    117128391    }
    11713     class_id = psMetadataLookupPtr(&status, md, "class_id");
     8392    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    117148393    if (!status) {
    117158394        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    117168395        return false;
    117178396    }
    11718     uri = psMetadataLookupPtr(&status, md, "uri");
     8397    char* uri = psMetadataLookupPtr(&status, md, "uri");
    117198398    if (!status) {
    117208399        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    117218400        return false;
    117228401    }
    11723     recipe = psMetadataLookupPtr(&status, md, "recipe");
     8402    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    117248403    if (!status) {
    117258404        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    117268405        return false;
    117278406    }
    11728     bg = psMetadataLookupF64(&status, md, "bg");
     8407    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    117298408    if (!status) {
    117308409        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    117318410        return false;
    117328411    }
    11733     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     8412    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    117348413    if (!status) {
    117358414        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    117368415        return false;
    117378416    }
    11738     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     8417    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    117398418    if (!status) {
    117408419        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     
    118628541bool detNormalizedStatImfileCreateTable(psDB *dbh)
    118638542{
    11864     psMetadata      *md;
    11865     bool            status;
    11866 
    11867     md = psMetadataAlloc();
    11868     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     8543    psMetadata *md = psMetadataAlloc();
     8544    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    118698545        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    118708546        psFree(md);
    118718547        return false;
    118728548    }
    11873     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     8549    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    118748550        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    118758551        psFree(md);
    118768552        return false;
    118778553    }
    11878     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     8554    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    118798555        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    118808556        psFree(md);
    118818557        return false;
    118828558    }
    11883     if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, 0.0)) {
     8559    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, 0.0)) {
    118848560        psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
    118858561        psFree(md);
     
    118878563    }
    118888564
    11889     status = psDBCreateTable(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
     8565    bool status = psDBCreateTable(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
    118908566
    118918567    psFree(md);
     
    119018577bool detNormalizedStatImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, psF32 norm)
    119028578{
    11903     psMetadata      *md;
    11904     bool            status;
    11905 
    11906     md = psMetadataAlloc();
    11907     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     8579    psMetadata *md = psMetadataAlloc();
     8580    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    119088581        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    119098582        psFree(md);
    119108583        return false;
    119118584    }
    11912     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     8585    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    119138586        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    119148587        psFree(md);
    119158588        return false;
    119168589    }
    11917     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     8590    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    119188591        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    119198592        psFree(md);
    119208593        return false;
    119218594    }
    11922     if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, norm)) {
     8595    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, norm)) {
    119238596        psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
    119248597        psFree(md);
     
    119268599    }
    119278600
    11928     status = psDBInsertOneRow(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
     8601    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, md);
    119298602    psFree(md);
    119308603
     
    120208693psMetadata *detNormalizedStatImfileMetadataFromObject(const detNormalizedStatImfileRow *object)
    120218694{
    12022     psMetadata      *md;
    12023 
    12024     md = psMetadataAlloc();
    12025     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     8695    psMetadata *md = psMetadataAlloc();
     8696    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    120268697        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    120278698        psFree(md);
    12028         return NULL;
    12029     }
    12030     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     8699        return false;
     8700    }
     8701    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    120318702        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    120328703        psFree(md);
    12033         return NULL;
    12034     }
    12035     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     8704        return false;
     8705    }
     8706    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    120368707        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    120378708        psFree(md);
    12038         return NULL;
    12039     }
    12040     if (!psMetadataAddF32(md, PS_LIST_TAIL, "norm", 0, NULL, object->norm)) {
     8709        return false;
     8710    }
     8711    if (!psMetadataAdd(md, PS_LIST_TAIL, "norm", PS_DATA_F32, NULL, object->norm)) {
    120418712        psError(PS_ERR_UNKNOWN, false, "failed to add item norm");
    120428713        psFree(md);
    12043         return NULL;
    12044     }
     8714        return false;
     8715    }
     8716
    120458717
    120468718    return md;
     
    120498721detNormalizedStatImfileRow *detNormalizedStatImfileObjectFromMetadata(psMetadata *md)
    120508722{
    12051     bool            status;
    12052     psS32           det_id;
    12053     psS32           iteration;
    12054     char            *class_id;
    12055     psF32           norm;
    12056 
    12057     det_id = psMetadataLookupS32(&status, md, "det_id");
     8723
     8724bool status = false;
     8725    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    120588726    if (!status) {
    120598727        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    120608728        return false;
    120618729    }
    12062     iteration = psMetadataLookupS32(&status, md, "iteration");
     8730    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    120638731    if (!status) {
    120648732        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    120658733        return false;
    120668734    }
    12067     class_id = psMetadataLookupPtr(&status, md, "class_id");
     8735    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    120688736    if (!status) {
    120698737        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    120708738        return false;
    120718739    }
    12072     norm = psMetadataLookupF32(&status, md, "norm");
     8740    psF32 norm = psMetadataLookupF32(&status, md, "norm");
    120738741    if (!status) {
    120748742        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item norm");
     
    122048872bool detNormalizedImfileCreateTable(psDB *dbh)
    122058873{
    12206     psMetadata      *md;
    12207     bool            status;
    12208 
    12209     md = psMetadataAlloc();
    12210     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     8874    psMetadata *md = psMetadataAlloc();
     8875    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    122118876        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    122128877        psFree(md);
    122138878        return false;
    122148879    }
    12215     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     8880    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    122168881        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    122178882        psFree(md);
    122188883        return false;
    122198884    }
    12220     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     8885    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    122218886        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    122228887        psFree(md);
    122238888        return false;
    122248889    }
    12225     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     8890    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    122268891        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    122278892        psFree(md);
    122288893        return false;
    122298894    }
    12230     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     8895    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    122318896        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    122328897        psFree(md);
    122338898        return false;
    122348899    }
    12235     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     8900    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    122368901        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    122378902        psFree(md);
    122388903        return false;
    122398904    }
    12240     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     8905    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    122418906        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    122428907        psFree(md);
    122438908        return false;
    122448909    }
    12245     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     8910    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    122468911        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    122478912        psFree(md);
    122488913        return false;
    122498914    }
    12250     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     8915    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    122518916        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    122528917        psFree(md);
     
    122548919    }
    122558920
    12256     status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
     8921    bool status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
    122578922
    122588923    psFree(md);
     
    122688933bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    122698934{
    12270     psMetadata      *md;
    12271     bool            status;
    12272 
    12273     md = psMetadataAlloc();
    12274     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     8935    psMetadata *md = psMetadataAlloc();
     8936    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    122758937        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    122768938        psFree(md);
    122778939        return false;
    122788940    }
    12279     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     8941    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    122808942        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    122818943        psFree(md);
    122828944        return false;
    122838945    }
    12284     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     8946    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    122858947        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    122868948        psFree(md);
    122878949        return false;
    122888950    }
    12289     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     8951    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    122908952        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    122918953        psFree(md);
    122928954        return false;
    122938955    }
    12294     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     8956    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    122958957        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    122968958        psFree(md);
    122978959        return false;
    122988960    }
    12299     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     8961    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    123008962        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    123018963        psFree(md);
    123028964        return false;
    123038965    }
    12304     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     8966    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    123058967        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    123068968        psFree(md);
    123078969        return false;
    123088970    }
    12309     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     8971    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    123108972        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    123118973        psFree(md);
    123128974        return false;
    123138975    }
    12314     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     8976    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    123158977        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    123168978        psFree(md);
     
    123188980    }
    123198981
    12320     status = psDBInsertOneRow(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
     8982    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md);
    123218983    psFree(md);
    123228984
     
    124129074psMetadata *detNormalizedImfileMetadataFromObject(const detNormalizedImfileRow *object)
    124139075{
    12414     psMetadata      *md;
    12415 
    12416     md = psMetadataAlloc();
    12417     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     9076    psMetadata *md = psMetadataAlloc();
     9077    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    124189078        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    124199079        psFree(md);
    12420         return NULL;
    12421     }
    12422     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     9080        return false;
     9081    }
     9082    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    124239083        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    124249084        psFree(md);
    12425         return NULL;
    12426     }
    12427     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     9085        return false;
     9086    }
     9087    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    124289088        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    124299089        psFree(md);
    12430         return NULL;
    12431     }
    12432     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     9090        return false;
     9091    }
     9092    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    124339093        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    124349094        psFree(md);
    12435         return NULL;
    12436     }
    12437     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     9095        return false;
     9096    }
     9097    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    124389098        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    124399099        psFree(md);
    12440         return NULL;
    12441     }
    12442     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     9100        return false;
     9101    }
     9102    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    124439103        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    124449104        psFree(md);
    12445         return NULL;
    12446     }
    12447     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     9105        return false;
     9106    }
     9107    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    124489108        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    124499109        psFree(md);
    12450         return NULL;
    12451     }
    12452     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     9110        return false;
     9111    }
     9112    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    124539113        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    124549114        psFree(md);
    12455         return NULL;
    12456     }
    12457     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     9115        return false;
     9116    }
     9117    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    124589118        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    124599119        psFree(md);
    12460         return NULL;
    12461     }
     9120        return false;
     9121    }
     9122
    124629123
    124639124    return md;
     
    124669127detNormalizedImfileRow *detNormalizedImfileObjectFromMetadata(psMetadata *md)
    124679128{
    12468     bool            status;
    12469     psS32           det_id;
    12470     psS32           iteration;
    12471     char            *class_id;
    12472     char            *uri;
    12473     psF64           bg;
    12474     psF64           bg_stdev;
    12475     psF64           bg_mean_stdev;
    12476     char            *b1_uri;
    12477     char            *b2_uri;
    12478 
    12479     det_id = psMetadataLookupS32(&status, md, "det_id");
     9129
     9130bool status = false;
     9131    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    124809132    if (!status) {
    124819133        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    124829134        return false;
    124839135    }
    12484     iteration = psMetadataLookupS32(&status, md, "iteration");
     9136    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    124859137    if (!status) {
    124869138        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    124879139        return false;
    124889140    }
    12489     class_id = psMetadataLookupPtr(&status, md, "class_id");
     9141    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    124909142    if (!status) {
    124919143        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    124929144        return false;
    124939145    }
    12494     uri = psMetadataLookupPtr(&status, md, "uri");
     9146    char* uri = psMetadataLookupPtr(&status, md, "uri");
    124959147    if (!status) {
    124969148        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    124979149        return false;
    124989150    }
    12499     bg = psMetadataLookupF64(&status, md, "bg");
     9151    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    125009152    if (!status) {
    125019153        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    125029154        return false;
    125039155    }
    12504     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     9156    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    125059157    if (!status) {
    125069158        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    125079159        return false;
    125089160    }
    12509     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     9161    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    125109162    if (!status) {
    125119163        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    125129164        return false;
    125139165    }
    12514     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     9166    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    125159167    if (!status) {
    125169168        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    125179169        return false;
    125189170    }
    12519     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     9171    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    125209172    if (!status) {
    125219173        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     
    126499301bool detNormalizedExpCreateTable(psDB *dbh)
    126509302{
    12651     psMetadata      *md;
    12652     bool            status;
    12653 
    12654     md = psMetadataAlloc();
    12655     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     9303    psMetadata *md = psMetadataAlloc();
     9304    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    126569305        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    126579306        psFree(md);
    126589307        return false;
    126599308    }
    12660     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     9309    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    126619310        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    126629311        psFree(md);
    126639312        return false;
    126649313    }
    12665     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     9314    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    126669315        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    126679316        psFree(md);
    126689317        return false;
    126699318    }
    12670     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     9319    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    126719320        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    126729321        psFree(md);
    126739322        return false;
    126749323    }
    12675     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     9324    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    126769325        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    126779326        psFree(md);
    126789327        return false;
    126799328    }
    12680     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     9329    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    126819330        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    126829331        psFree(md);
    126839332        return false;
    126849333    }
    12685     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     9334    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    126869335        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    126879336        psFree(md);
    126889337        return false;
    126899338    }
    12690     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     9339    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    126919340        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    126929341        psFree(md);
     
    126949343    }
    126959344
    12696     status = psDBCreateTable(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
     9345    bool status = psDBCreateTable(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
    126979346
    126989347    psFree(md);
     
    127089357bool detNormalizedExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    127099358{
    12710     psMetadata      *md;
    12711     bool            status;
    12712 
    12713     md = psMetadataAlloc();
    12714     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     9359    psMetadata *md = psMetadataAlloc();
     9360    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    127159361        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    127169362        psFree(md);
    127179363        return false;
    127189364    }
    12719     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     9365    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    127209366        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    127219367        psFree(md);
    127229368        return false;
    127239369    }
    12724     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     9370    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    127259371        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    127269372        psFree(md);
    127279373        return false;
    127289374    }
    12729     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     9375    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    127309376        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    127319377        psFree(md);
    127329378        return false;
    127339379    }
    12734     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     9380    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    127359381        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    127369382        psFree(md);
    127379383        return false;
    127389384    }
    12739     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     9385    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    127409386        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    127419387        psFree(md);
    127429388        return false;
    127439389    }
    12744     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     9390    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    127459391        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    127469392        psFree(md);
    127479393        return false;
    127489394    }
    12749     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     9395    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    127509396        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    127519397        psFree(md);
     
    127539399    }
    127549400
    12755     status = psDBInsertOneRow(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
     9401    bool status = psDBInsertOneRow(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
    127569402    psFree(md);
    127579403
     
    128479493psMetadata *detNormalizedExpMetadataFromObject(const detNormalizedExpRow *object)
    128489494{
    12849     psMetadata      *md;
    12850 
    12851     md = psMetadataAlloc();
    12852     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     9495    psMetadata *md = psMetadataAlloc();
     9496    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    128539497        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    128549498        psFree(md);
    12855         return NULL;
    12856     }
    12857     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     9499        return false;
     9500    }
     9501    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    128589502        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    128599503        psFree(md);
    12860         return NULL;
    12861     }
    12862     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     9504        return false;
     9505    }
     9506    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    128639507        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    128649508        psFree(md);
    12865         return NULL;
    12866     }
    12867     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     9509        return false;
     9510    }
     9511    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    128689512        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    128699513        psFree(md);
    12870         return NULL;
    12871     }
    12872     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     9514        return false;
     9515    }
     9516    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    128739517        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    128749518        psFree(md);
    12875         return NULL;
    12876     }
    12877     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     9519        return false;
     9520    }
     9521    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    128789522        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    128799523        psFree(md);
    12880         return NULL;
    12881     }
    12882     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     9524        return false;
     9525    }
     9526    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    128839527        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    128849528        psFree(md);
    12885         return NULL;
    12886     }
    12887     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     9529        return false;
     9530    }
     9531    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    128889532        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    128899533        psFree(md);
    12890         return NULL;
    12891     }
     9534        return false;
     9535    }
     9536
    128929537
    128939538    return md;
     
    128969541detNormalizedExpRow *detNormalizedExpObjectFromMetadata(psMetadata *md)
    128979542{
    12898     bool            status;
    12899     psS32           det_id;
    12900     psS32           iteration;
    12901     char            *recipe;
    12902     psF64           bg;
    12903     psF64           bg_stdev;
    12904     psF64           bg_mean_stdev;
    12905     char            *b1_uri;
    12906     char            *b2_uri;
    12907 
    12908     det_id = psMetadataLookupS32(&status, md, "det_id");
     9543
     9544bool status = false;
     9545    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    129099546    if (!status) {
    129109547        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    129119548        return false;
    129129549    }
    12913     iteration = psMetadataLookupS32(&status, md, "iteration");
     9550    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    129149551    if (!status) {
    129159552        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    129169553        return false;
    129179554    }
    12918     recipe = psMetadataLookupPtr(&status, md, "recipe");
     9555    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    129199556    if (!status) {
    129209557        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    129219558        return false;
    129229559    }
    12923     bg = psMetadataLookupF64(&status, md, "bg");
     9560    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    129249561    if (!status) {
    129259562        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    129269563        return false;
    129279564    }
    12928     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     9565    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    129299566    if (!status) {
    129309567        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    129319568        return false;
    129329569    }
    12933     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     9570    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    129349571    if (!status) {
    129359572        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    129369573        return false;
    129379574    }
    12938     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     9575    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    129399576    if (!status) {
    129409577        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    129419578        return false;
    129429579    }
    12943     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     9580    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    129449581    if (!status) {
    129459582        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     
    130669703bool detMasterFrameCreateTable(psDB *dbh)
    130679704{
    13068     psMetadata      *md;
    13069     bool            status;
    13070 
    13071     md = psMetadataAlloc();
    13072     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     9705    psMetadata *md = psMetadataAlloc();
     9706    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    130739707        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    130749708        psFree(md);
    130759709        return false;
    130769710    }
    13077     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     9711    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    130789712        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    130799713        psFree(md);
    130809714        return false;
    130819715    }
    13082     if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, "255")) {
     9716    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, "255")) {
    130839717        psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
    130849718        psFree(md);
     
    130869720    }
    130879721
    13088     status = psDBCreateTable(dbh, DETMASTERFRAME_TABLE_NAME, md);
     9722    bool status = psDBCreateTable(dbh, DETMASTERFRAME_TABLE_NAME, md);
    130899723
    130909724    psFree(md);
     
    131009734bool detMasterFrameInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *comment)
    131019735{
    13102     psMetadata      *md;
    13103     bool            status;
    13104 
    13105     md = psMetadataAlloc();
    13106     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     9736    psMetadata *md = psMetadataAlloc();
     9737    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    131079738        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    131089739        psFree(md);
    131099740        return false;
    131109741    }
    13111     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     9742    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    131129743        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    131139744        psFree(md);
    131149745        return false;
    131159746    }
    13116     if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, comment)) {
     9747    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, comment)) {
    131179748        psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
    131189749        psFree(md);
     
    131209751    }
    131219752
    13122     status = psDBInsertOneRow(dbh, DETMASTERFRAME_TABLE_NAME, md);
     9753    bool status = psDBInsertOneRow(dbh, DETMASTERFRAME_TABLE_NAME, md);
    131239754    psFree(md);
    131249755
     
    132149845psMetadata *detMasterFrameMetadataFromObject(const detMasterFrameRow *object)
    132159846{
    13216     psMetadata      *md;
    13217 
    13218     md = psMetadataAlloc();
    13219     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     9847    psMetadata *md = psMetadataAlloc();
     9848    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    132209849        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    132219850        psFree(md);
    13222         return NULL;
    13223     }
    13224     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     9851        return false;
     9852    }
     9853    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    132259854        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    132269855        psFree(md);
    13227         return NULL;
    13228     }
    13229     if (!psMetadataAddStr(md, PS_LIST_TAIL, "comment", 0, NULL, object->comment)) {
     9856        return false;
     9857    }
     9858    if (!psMetadataAdd(md, PS_LIST_TAIL, "comment", PS_DATA_STRING, NULL, object->comment)) {
    132309859        psError(PS_ERR_UNKNOWN, false, "failed to add item comment");
    132319860        psFree(md);
    13232         return NULL;
    13233     }
     9861        return false;
     9862    }
     9863
    132349864
    132359865    return md;
     
    132389868detMasterFrameRow *detMasterFrameObjectFromMetadata(psMetadata *md)
    132399869{
    13240     bool            status;
    13241     psS32           det_id;
    13242     psS32           iteration;
    13243     char            *comment;
    13244 
    13245     det_id = psMetadataLookupS32(&status, md, "det_id");
     9870
     9871bool status = false;
     9872    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    132469873    if (!status) {
    132479874        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    132489875        return false;
    132499876    }
    13250     iteration = psMetadataLookupS32(&status, md, "iteration");
     9877    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    132519878    if (!status) {
    132529879        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    132539880        return false;
    132549881    }
    13255     comment = psMetadataLookupPtr(&status, md, "comment");
     9882    char* comment = psMetadataLookupPtr(&status, md, "comment");
    132569883    if (!status) {
    132579884        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item comment");
     
    1338110008bool detMasterImfileCreateTable(psDB *dbh)
    1338210009{
    13383     psMetadata      *md;
    13384     bool            status;
    13385 
    13386     md = psMetadataAlloc();
    13387     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     10010    psMetadata *md = psMetadataAlloc();
     10011    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    1338810012        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1338910013        psFree(md);
    1339010014        return false;
    1339110015    }
    13392     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     10016    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    1339310017        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1339410018        psFree(md);
    1339510019        return false;
    1339610020    }
    13397     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     10021    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    1339810022        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1339910023        psFree(md);
    1340010024        return false;
    1340110025    }
    13402     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     10026    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    1340310027        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1340410028        psFree(md);
     
    1340610030    }
    1340710031
    13408     status = psDBCreateTable(dbh, DETMASTERIMFILE_TABLE_NAME, md);
     10032    bool status = psDBCreateTable(dbh, DETMASTERIMFILE_TABLE_NAME, md);
    1340910033
    1341010034    psFree(md);
     
    1342010044bool detMasterImfileInsert(psDB * dbh, psS32 det_id, const char *class_id, const char *uri, const char *recipe)
    1342110045{
    13422     psMetadata      *md;
    13423     bool            status;
    13424 
    13425     md = psMetadataAlloc();
    13426     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     10046    psMetadata *md = psMetadataAlloc();
     10047    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    1342710048        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1342810049        psFree(md);
    1342910050        return false;
    1343010051    }
    13431     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     10052    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    1343210053        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1343310054        psFree(md);
    1343410055        return false;
    1343510056    }
    13436     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     10057    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    1343710058        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1343810059        psFree(md);
    1343910060        return false;
    1344010061    }
    13441     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     10062    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    1344210063        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1344310064        psFree(md);
     
    1344510066    }
    1344610067
    13447     status = psDBInsertOneRow(dbh, DETMASTERIMFILE_TABLE_NAME, md);
     10068    bool status = psDBInsertOneRow(dbh, DETMASTERIMFILE_TABLE_NAME, md);
    1344810069    psFree(md);
    1344910070
     
    1353910160psMetadata *detMasterImfileMetadataFromObject(const detMasterImfileRow *object)
    1354010161{
    13541     psMetadata      *md;
    13542 
    13543     md = psMetadataAlloc();
    13544     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     10162    psMetadata *md = psMetadataAlloc();
     10163    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    1354510164        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1354610165        psFree(md);
    13547         return NULL;
    13548     }
    13549     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     10166        return false;
     10167    }
     10168    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    1355010169        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1355110170        psFree(md);
    13552         return NULL;
    13553     }
    13554     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     10171        return false;
     10172    }
     10173    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    1355510174        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1355610175        psFree(md);
    13557         return NULL;
    13558     }
    13559     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     10176        return false;
     10177    }
     10178    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    1356010179        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1356110180        psFree(md);
    13562         return NULL;
    13563     }
     10181        return false;
     10182    }
     10183
    1356410184
    1356510185    return md;
     
    1356810188detMasterImfileRow *detMasterImfileObjectFromMetadata(psMetadata *md)
    1356910189{
    13570     bool            status;
    13571     psS32           det_id;
    13572     char            *class_id;
    13573     char            *uri;
    13574     char            *recipe;
    13575 
    13576     det_id = psMetadataLookupS32(&status, md, "det_id");
     10190
     10191bool status = false;
     10192    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    1357710193    if (!status) {
    1357810194        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    1357910195        return false;
    1358010196    }
    13581     class_id = psMetadataLookupPtr(&status, md, "class_id");
     10197    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    1358210198    if (!status) {
    1358310199        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    1358410200        return false;
    1358510201    }
    13586     uri = psMetadataLookupPtr(&status, md, "uri");
     10202    char* uri = psMetadataLookupPtr(&status, md, "uri");
    1358710203    if (!status) {
    1358810204        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    1358910205        return false;
    1359010206    }
    13591     recipe = psMetadataLookupPtr(&status, md, "recipe");
     10207    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    1359210208    if (!status) {
    1359310209        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
     
    1372710343bool detResidImfileCreateTable(psDB *dbh)
    1372810344{
    13729     psMetadata      *md;
    13730     bool            status;
    13731 
    13732     md = psMetadataAlloc();
    13733     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     10345    psMetadata *md = psMetadataAlloc();
     10346    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    1373410347        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1373510348        psFree(md);
    1373610349        return false;
    1373710350    }
    13738     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     10351    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    1373910352        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1374010353        psFree(md);
    1374110354        return false;
    1374210355    }
    13743     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     10356    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    1374410357        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1374510358        psFree(md);
    1374610359        return false;
    1374710360    }
    13748     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, "Primary Key", "64")) {
     10361    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, "Primary Key", "64")) {
    1374910362        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1375010363        psFree(md);
    1375110364        return false;
    1375210365    }
    13753     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "255")) {
     10366    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, "255")) {
    1375410367        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1375510368        psFree(md);
    1375610369        return false;
    1375710370    }
    13758     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     10371    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    1375910372        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1376010373        psFree(md);
    1376110374        return false;
    1376210375    }
    13763     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     10376    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    1376410377        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1376510378        psFree(md);
    1376610379        return false;
    1376710380    }
    13768     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     10381    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    1376910382        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1377010383        psFree(md);
    1377110384        return false;
    1377210385    }
    13773     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     10386    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    1377410387        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1377510388        psFree(md);
    1377610389        return false;
    1377710390    }
    13778     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     10391    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    1377910392        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1378010393        psFree(md);
    1378110394        return false;
    1378210395    }
    13783     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     10396    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    1378410397        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1378510398        psFree(md);
     
    1378710400    }
    1378810401
    13789     status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md);
     10402    bool status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md);
    1379010403
    1379110404    psFree(md);
     
    1380110414bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
    1380210415{
    13803     psMetadata      *md;
    13804     bool            status;
    13805 
    13806     md = psMetadataAlloc();
    13807     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     10416    psMetadata *md = psMetadataAlloc();
     10417    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    1380810418        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1380910419        psFree(md);
    1381010420        return false;
    1381110421    }
    13812     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     10422    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    1381310423        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1381410424        psFree(md);
    1381510425        return false;
    1381610426    }
    13817     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     10427    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    1381810428        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1381910429        psFree(md);
    1382010430        return false;
    1382110431    }
    13822     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, class_id)) {
     10432    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, class_id)) {
    1382310433        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1382410434        psFree(md);
    1382510435        return false;
    1382610436    }
    13827     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) {
     10437    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, uri)) {
    1382810438        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1382910439        psFree(md);
    1383010440        return false;
    1383110441    }
    13832     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     10442    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    1383310443        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1383410444        psFree(md);
    1383510445        return false;
    1383610446    }
    13837     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     10447    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    1383810448        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1383910449        psFree(md);
    1384010450        return false;
    1384110451    }
    13842     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     10452    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    1384310453        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1384410454        psFree(md);
    1384510455        return false;
    1384610456    }
    13847     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     10457    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    1384810458        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1384910459        psFree(md);
    1385010460        return false;
    1385110461    }
    13852     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     10462    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    1385310463        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1385410464        psFree(md);
    1385510465        return false;
    1385610466    }
    13857     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     10467    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    1385810468        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1385910469        psFree(md);
     
    1386110471    }
    1386210472
    13863     status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md);
     10473    bool status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md);
    1386410474    psFree(md);
    1386510475
     
    1395510565psMetadata *detResidImfileMetadataFromObject(const detResidImfileRow *object)
    1395610566{
    13957     psMetadata      *md;
    13958 
    13959     md = psMetadataAlloc();
    13960     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     10567    psMetadata *md = psMetadataAlloc();
     10568    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    1396110569        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1396210570        psFree(md);
    13963         return NULL;
    13964     }
    13965     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     10571        return false;
     10572    }
     10573    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    1396610574        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1396710575        psFree(md);
    13968         return NULL;
    13969     }
    13970     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     10576        return false;
     10577    }
     10578    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    1397110579        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1397210580        psFree(md);
    13973         return NULL;
    13974     }
    13975     if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, object->class_id)) {
     10581        return false;
     10582    }
     10583    if (!psMetadataAdd(md, PS_LIST_TAIL, "class_id", PS_DATA_STRING, NULL, object->class_id)) {
    1397610584        psError(PS_ERR_UNKNOWN, false, "failed to add item class_id");
    1397710585        psFree(md);
    13978         return NULL;
    13979     }
    13980     if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) {
     10586        return false;
     10587    }
     10588    if (!psMetadataAdd(md, PS_LIST_TAIL, "uri", PS_DATA_STRING, NULL, object->uri)) {
    1398110589        psError(PS_ERR_UNKNOWN, false, "failed to add item uri");
    1398210590        psFree(md);
    13983         return NULL;
    13984     }
    13985     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     10591        return false;
     10592    }
     10593    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    1398610594        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1398710595        psFree(md);
    13988         return NULL;
    13989     }
    13990     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     10596        return false;
     10597    }
     10598    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    1399110599        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1399210600        psFree(md);
    13993         return NULL;
    13994     }
    13995     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     10601        return false;
     10602    }
     10603    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    1399610604        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1399710605        psFree(md);
    13998         return NULL;
    13999     }
    14000     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     10606        return false;
     10607    }
     10608    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    1400110609        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1400210610        psFree(md);
    14003         return NULL;
    14004     }
    14005     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     10611        return false;
     10612    }
     10613    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    1400610614        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1400710615        psFree(md);
    14008         return NULL;
    14009     }
    14010     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     10616        return false;
     10617    }
     10618    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    1401110619        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1401210620        psFree(md);
    14013         return NULL;
    14014     }
     10621        return false;
     10622    }
     10623
    1401510624
    1401610625    return md;
     
    1401910628detResidImfileRow *detResidImfileObjectFromMetadata(psMetadata *md)
    1402010629{
    14021     bool            status;
    14022     psS32           det_id;
    14023     psS32           iteration;
    14024     char            *exp_tag;
    14025     char            *class_id;
    14026     char            *uri;
    14027     char            *recipe;
    14028     psF64           bg;
    14029     psF64           bg_stdev;
    14030     psF64           bg_mean_stdev;
    14031     char            *b1_uri;
    14032     char            *b2_uri;
    14033 
    14034     det_id = psMetadataLookupS32(&status, md, "det_id");
     10630
     10631bool status = false;
     10632    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    1403510633    if (!status) {
    1403610634        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    1403710635        return false;
    1403810636    }
    14039     iteration = psMetadataLookupS32(&status, md, "iteration");
     10637    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    1404010638    if (!status) {
    1404110639        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    1404210640        return false;
    1404310641    }
    14044     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     10642    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    1404510643    if (!status) {
    1404610644        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    1404710645        return false;
    1404810646    }
    14049     class_id = psMetadataLookupPtr(&status, md, "class_id");
     10647    char* class_id = psMetadataLookupPtr(&status, md, "class_id");
    1405010648    if (!status) {
    1405110649        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");
    1405210650        return false;
    1405310651    }
    14054     uri = psMetadataLookupPtr(&status, md, "uri");
     10652    char* uri = psMetadataLookupPtr(&status, md, "uri");
    1405510653    if (!status) {
    1405610654        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");
    1405710655        return false;
    1405810656    }
    14059     recipe = psMetadataLookupPtr(&status, md, "recipe");
     10657    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    1406010658    if (!status) {
    1406110659        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    1406210660        return false;
    1406310661    }
    14064     bg = psMetadataLookupF64(&status, md, "bg");
     10662    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    1406510663    if (!status) {
    1406610664        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    1406710665        return false;
    1406810666    }
    14069     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     10667    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    1407010668    if (!status) {
    1407110669        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    1407210670        return false;
    1407310671    }
    14074     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     10672    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    1407510673    if (!status) {
    1407610674        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    1407710675        return false;
    1407810676    }
    14079     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     10677    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    1408010678    if (!status) {
    1408110679        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    1408210680        return false;
    1408310681    }
    14084     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     10682    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    1408510683    if (!status) {
    1408610684        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     
    1421710815bool detResidExpCreateTable(psDB *dbh)
    1421810816{
    14219     psMetadata      *md;
    14220     bool            status;
    14221 
    14222     md = psMetadataAlloc();
    14223     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     10817    psMetadata *md = psMetadataAlloc();
     10818    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    1422410819        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1422510820        psFree(md);
    1422610821        return false;
    1422710822    }
    14228     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     10823    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    1422910824        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1423010825        psFree(md);
    1423110826        return false;
    1423210827    }
    14233     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) {
     10828    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, "Primary Key", "64")) {
    1423410829        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1423510830        psFree(md);
    1423610831        return false;
    1423710832    }
    14238     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     10833    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, "64")) {
    1423910834        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1424010835        psFree(md);
    1424110836        return false;
    1424210837    }
    14243     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     10838    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    1424410839        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1424510840        psFree(md);
    1424610841        return false;
    1424710842    }
    14248     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     10843    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    1424910844        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1425010845        psFree(md);
    1425110846        return false;
    1425210847    }
    14253     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     10848    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    1425410849        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1425510850        psFree(md);
    1425610851        return false;
    1425710852    }
    14258     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "255")) {
     10853    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, "255")) {
    1425910854        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1426010855        psFree(md);
    1426110856        return false;
    1426210857    }
    14263     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "255")) {
     10858    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, "255")) {
    1426410859        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1426510860        psFree(md);
    1426610861        return false;
    1426710862    }
    14268     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
     10863    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, 0)) {
    1426910864        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    1427010865        psFree(md);
     
    1427210867    }
    1427310868
    14274     status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md);
     10869    bool status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md);
    1427510870
    1427610871    psFree(md);
     
    1428610881bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept)
    1428710882{
    14288     psMetadata      *md;
    14289     bool            status;
    14290 
    14291     md = psMetadataAlloc();
    14292     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     10883    psMetadata *md = psMetadataAlloc();
     10884    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    1429310885        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1429410886        psFree(md);
    1429510887        return false;
    1429610888    }
    14297     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     10889    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    1429810890        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1429910891        psFree(md);
    1430010892        return false;
    1430110893    }
    14302     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) {
     10894    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, exp_tag)) {
    1430310895        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1430410896        psFree(md);
    1430510897        return false;
    1430610898    }
    14307     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     10899    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, recipe)) {
    1430810900        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1430910901        psFree(md);
    1431010902        return false;
    1431110903    }
    14312     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     10904    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    1431310905        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1431410906        psFree(md);
    1431510907        return false;
    1431610908    }
    14317     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     10909    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    1431810910        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1431910911        psFree(md);
    1432010912        return false;
    1432110913    }
    14322     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     10914    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    1432310915        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1432410916        psFree(md);
    1432510917        return false;
    1432610918    }
    14327     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     10919    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, b1_uri)) {
    1432810920        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1432910921        psFree(md);
    1433010922        return false;
    1433110923    }
    14332     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     10924    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, b2_uri)) {
    1433310925        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1433410926        psFree(md);
     
    1434110933    }
    1434210934
    14343     status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md);
     10935    bool status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md);
    1434410936    psFree(md);
    1434510937
     
    1443511027psMetadata *detResidExpMetadataFromObject(const detResidExpRow *object)
    1443611028{
    14437     psMetadata      *md;
    14438 
    14439     md = psMetadataAlloc();
    14440     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     11029    psMetadata *md = psMetadataAlloc();
     11030    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    1444111031        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1444211032        psFree(md);
    14443         return NULL;
    14444     }
    14445     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     11033        return false;
     11034    }
     11035    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    1444611036        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1444711037        psFree(md);
    14448         return NULL;
    14449     }
    14450     if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) {
     11038        return false;
     11039    }
     11040    if (!psMetadataAdd(md, PS_LIST_TAIL, "exp_tag", PS_DATA_STRING, NULL, object->exp_tag)) {
    1445111041        psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag");
    1445211042        psFree(md);
    14453         return NULL;
    14454     }
    14455     if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     11043        return false;
     11044    }
     11045    if (!psMetadataAdd(md, PS_LIST_TAIL, "recipe", PS_DATA_STRING, NULL, object->recipe)) {
    1445611046        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
    1445711047        psFree(md);
    14458         return NULL;
    14459     }
    14460     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     11048        return false;
     11049    }
     11050    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    1446111051        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1446211052        psFree(md);
    14463         return NULL;
    14464     }
    14465     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     11053        return false;
     11054    }
     11055    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    1446611056        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1446711057        psFree(md);
    14468         return NULL;
    14469     }
    14470     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     11058        return false;
     11059    }
     11060    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    1447111061        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1447211062        psFree(md);
    14473         return NULL;
    14474     }
    14475     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     11063        return false;
     11064    }
     11065    if (!psMetadataAdd(md, PS_LIST_TAIL, "b1_uri", PS_DATA_STRING, NULL, object->b1_uri)) {
    1447611066        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
    1447711067        psFree(md);
    14478         return NULL;
    14479     }
    14480     if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     11068        return false;
     11069    }
     11070    if (!psMetadataAdd(md, PS_LIST_TAIL, "b2_uri", PS_DATA_STRING, NULL, object->b2_uri)) {
    1448111071        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
    1448211072        psFree(md);
    14483         return NULL;
     11073        return false;
    1448411074    }
    1448511075    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
    1448611076        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    1448711077        psFree(md);
    14488         return NULL;
    14489     }
     11078        return false;
     11079    }
     11080
    1449011081
    1449111082    return md;
     
    1449411085detResidExpRow *detResidExpObjectFromMetadata(psMetadata *md)
    1449511086{
    14496     bool            status;
    14497     psS32           det_id;
    14498     psS32           iteration;
    14499     char            *exp_tag;
    14500     char            *recipe;
    14501     psF64           bg;
    14502     psF64           bg_stdev;
    14503     psF64           bg_mean_stdev;
    14504     char            *b1_uri;
    14505     char            *b2_uri;
    14506     bool            accept;
    14507 
    14508     det_id = psMetadataLookupS32(&status, md, "det_id");
     11087
     11088bool status = false;
     11089    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    1450911090    if (!status) {
    1451011091        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    1451111092        return false;
    1451211093    }
    14513     iteration = psMetadataLookupS32(&status, md, "iteration");
     11094    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    1451411095    if (!status) {
    1451511096        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    1451611097        return false;
    1451711098    }
    14518     exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
     11099    char* exp_tag = psMetadataLookupPtr(&status, md, "exp_tag");
    1451911100    if (!status) {
    1452011101        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");
    1452111102        return false;
    1452211103    }
    14523     recipe = psMetadataLookupPtr(&status, md, "recipe");
     11104    char* recipe = psMetadataLookupPtr(&status, md, "recipe");
    1452411105    if (!status) {
    1452511106        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
    1452611107        return false;
    1452711108    }
    14528     bg = psMetadataLookupF64(&status, md, "bg");
     11109    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    1452911110    if (!status) {
    1453011111        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    1453111112        return false;
    1453211113    }
    14533     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     11114    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    1453411115    if (!status) {
    1453511116        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    1453611117        return false;
    1453711118    }
    14538     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     11119    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    1453911120    if (!status) {
    1454011121        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    1454111122        return false;
    1454211123    }
    14543     b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     11124    char* b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
    1454411125    if (!status) {
    1454511126        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
    1454611127        return false;
    1454711128    }
    14548     b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     11129    char* b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
    1454911130    if (!status) {
    1455011131        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
    1455111132        return false;
    1455211133    }
    14553     accept = psMetadataLookupBool(&status, md, "accept");
     11134    bool accept = psMetadataLookupBool(&status, md, "accept");
    1455411135    if (!status) {
    1455511136        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
     
    1467811259bool detRunSummaryCreateTable(psDB *dbh)
    1467911260{
    14680     psMetadata      *md;
    14681     bool            status;
    14682 
    14683     md = psMetadataAlloc();
    14684     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     11261    psMetadata *md = psMetadataAlloc();
     11262    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, "Primary Key", 0)) {
    1468511263        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1468611264        psFree(md);
    1468711265        return false;
    1468811266    }
    14689     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     11267    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, "Primary Key", 0)) {
    1469011268        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1469111269        psFree(md);
    1469211270        return false;
    1469311271    }
    14694     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     11272    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, 0.0)) {
    1469511273        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1469611274        psFree(md);
    1469711275        return false;
    1469811276    }
    14699     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     11277    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, 0.0)) {
    1470011278        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1470111279        psFree(md);
    1470211280        return false;
    1470311281    }
    14704     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     11282    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, 0.0)) {
    1470511283        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1470611284        psFree(md);
    1470711285        return false;
    1470811286    }
    14709     if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {
     11287    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, 0)) {
    1471011288        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    1471111289        psFree(md);
     
    1471311291    }
    1471411292
    14715     status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md);
     11293    bool status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md);
    1471611294
    1471711295    psFree(md);
     
    1472711305bool detRunSummaryInsert(psDB * dbh, psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept)
    1472811306{
    14729     psMetadata      *md;
    14730     bool            status;
    14731 
    14732     md = psMetadataAlloc();
    14733     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     11307    psMetadata *md = psMetadataAlloc();
     11308    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, det_id)) {
    1473411309        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1473511310        psFree(md);
    1473611311        return false;
    1473711312    }
    14738     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     11313    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, iteration)) {
    1473911314        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1474011315        psFree(md);
    1474111316        return false;
    1474211317    }
    14743     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     11318    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, bg)) {
    1474411319        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1474511320        psFree(md);
    1474611321        return false;
    1474711322    }
    14748     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     11323    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, bg_stdev)) {
    1474911324        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1475011325        psFree(md);
    1475111326        return false;
    1475211327    }
    14753     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     11328    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, bg_mean_stdev)) {
    1475411329        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1475511330        psFree(md);
     
    1476211337    }
    1476311338
    14764     status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md);
     11339    bool status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md);
    1476511340    psFree(md);
    1476611341
     
    1485611431psMetadata *detRunSummaryMetadataFromObject(const detRunSummaryRow *object)
    1485711432{
    14858     psMetadata      *md;
    14859 
    14860     md = psMetadataAlloc();
    14861     if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     11433    psMetadata *md = psMetadataAlloc();
     11434    if (!psMetadataAdd(md, PS_LIST_TAIL, "det_id", PS_DATA_S32, NULL, object->det_id)) {
    1486211435        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
    1486311436        psFree(md);
    14864         return NULL;
    14865     }
    14866     if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     11437        return false;
     11438    }
     11439    if (!psMetadataAdd(md, PS_LIST_TAIL, "iteration", PS_DATA_S32, NULL, object->iteration)) {
    1486711440        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
    1486811441        psFree(md);
    14869         return NULL;
    14870     }
    14871     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     11442        return false;
     11443    }
     11444    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg", PS_DATA_F64, NULL, object->bg)) {
    1487211445        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
    1487311446        psFree(md);
    14874         return NULL;
    14875     }
    14876     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     11447        return false;
     11448    }
     11449    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_stdev", PS_DATA_F64, NULL, object->bg_stdev)) {
    1487711450        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
    1487811451        psFree(md);
    14879         return NULL;
    14880     }
    14881     if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     11452        return false;
     11453    }
     11454    if (!psMetadataAdd(md, PS_LIST_TAIL, "bg_mean_stdev", PS_DATA_F64, NULL, object->bg_mean_stdev)) {
    1488211455        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
    1488311456        psFree(md);
    14884         return NULL;
     11457        return false;
    1488511458    }
    1488611459    if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {
    1488711460        psError(PS_ERR_UNKNOWN, false, "failed to add item accept");
    1488811461        psFree(md);
    14889         return NULL;
    14890     }
     11462        return false;
     11463    }
     11464
    1489111465
    1489211466    return md;
     
    1489511469detRunSummaryRow *detRunSummaryObjectFromMetadata(psMetadata *md)
    1489611470{
    14897     bool            status;
    14898     psS32           det_id;
    14899     psS32           iteration;
    14900     psF64           bg;
    14901     psF64           bg_stdev;
    14902     psF64           bg_mean_stdev;
    14903     bool            accept;
    14904 
    14905     det_id = psMetadataLookupS32(&status, md, "det_id");
     11471
     11472bool status = false;
     11473    psS32 det_id = psMetadataLookupS32(&status, md, "det_id");
    1490611474    if (!status) {
    1490711475        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
    1490811476        return false;
    1490911477    }
    14910     iteration = psMetadataLookupS32(&status, md, "iteration");
     11478    psS32 iteration = psMetadataLookupS32(&status, md, "iteration");
    1491111479    if (!status) {
    1491211480        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
    1491311481        return false;
    1491411482    }
    14915     bg = psMetadataLookupF64(&status, md, "bg");
     11483    psF64 bg = psMetadataLookupF64(&status, md, "bg");
    1491611484    if (!status) {
    1491711485        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
    1491811486        return false;
    1491911487    }
    14920     bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     11488    psF64 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
    1492111489    if (!status) {
    1492211490        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
    1492311491        return false;
    1492411492    }
    14925     bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     11493    psF64 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
    1492611494    if (!status) {
    1492711495        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
    1492811496        return false;
    1492911497    }
    14930     accept = psMetadataLookupBool(&status, md, "accept");
     11498    bool accept = psMetadataLookupBool(&status, md, "accept");
    1493111499    if (!status) {
    1493211500        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");
Note: See TracChangeset for help on using the changeset viewer.