IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9684


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

VERSION 0.0.50

Location:
trunk/ippdb
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippdb/Makefile.am

    r9301 r9684  
    1010man_MANS = \
    1111    $(top_builddir)/docs/man/man3/ippdb.3 \
    12     $(top_builddir)/docs/man/man3/weatherRow.3 \
    13     $(top_builddir)/docs/man/man3/skyp_transparencyRow.3 \
    14     $(top_builddir)/docs/man/man3/skyp_absorptionRow.3 \
    15     $(top_builddir)/docs/man/man3/skyp_emissionRow.3 \
    16     $(top_builddir)/docs/man/man3/dimmRow.3 \
    17     $(top_builddir)/docs/man/man3/skyp_irRow.3 \
    18     $(top_builddir)/docs/man/man3/domeRow.3 \
    19     $(top_builddir)/docs/man/man3/telescopeRow.3 \
    2012    $(top_builddir)/docs/man/man3/summitExpRow.3 \
    2113    $(top_builddir)/docs/man/man3/pzPendingExpRow.3 \
     
    4840
    4941
    50 docs/man/man3/ippdb.3 docs/man/man3/weatherRow.3 docs/man/man3/skyp_transparencyRow.3 docs/man/man3/skyp_absorptionRow.3 docs/man/man3/skyp_emissionRow.3 docs/man/man3/dimmRow.3 docs/man/man3/skyp_irRow.3 docs/man/man3/domeRow.3 docs/man/man3/telescopeRow.3 docs/man/man3/summitExpRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawDetrendExpRow.3 docs/man/man3/rawScienceExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2ProcessedExpRow.3 docs/man/man3/p2ProcessedImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/p3ProcessedExpRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detProcessedExpRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detNormalizedExpRow.3 docs/man/man3/detMasterFrameRow.3 docs/man/man3/detMasterImfileRow.3 docs/man/man3/detResidImfileRow.3 docs/man/man3/detResidExpRow.3 docs/man/man3/detRunSummaryRow.3:
     42docs/man/man3/ippdb.3 docs/man/man3/summitExpRow.3 docs/man/man3/pzPendingExpRow.3 docs/man/man3/pzPendingImfileRow.3 docs/man/man3/newExpRow.3 docs/man/man3/newImfileRow.3 docs/man/man3/rawDetrendExpRow.3 docs/man/man3/rawScienceExpRow.3 docs/man/man3/rawImfileRow.3 docs/man/man3/p1PendingExpRow.3 docs/man/man3/p2PendingExpRow.3 docs/man/man3/p2PendingImfileRow.3 docs/man/man3/p2ProcessedExpRow.3 docs/man/man3/p2ProcessedImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/p3ProcessedExpRow.3 docs/man/man3/detRunRow.3 docs/man/man3/detInputExpRow.3 docs/man/man3/detProcessedImfileRow.3 docs/man/man3/detProcessedExpRow.3 docs/man/man3/detStackedImfileRow.3 docs/man/man3/detNormalizedStatImfileRow.3 docs/man/man3/detNormalizedImfileRow.3 docs/man/man3/detNormalizedExpRow.3 docs/man/man3/detMasterFrameRow.3 docs/man/man3/detMasterImfileRow.3 docs/man/man3/detResidImfileRow.3 docs/man/man3/detResidExpRow.3 docs/man/man3/detRunSummaryRow.3:
    5143        $(DOXYGEN)
    5244
  • trunk/ippdb/configure.ac

    r9423 r9684  
    77AC_PREREQ(2.59)
    88
    9 AC_INIT([ippdb], [0.0.49], [pan-starrs.ifa.hawaii.edu])
     9AC_INIT([ippdb], [0.0.50], [pan-starrs.ifa.hawaii.edu])
    1010AC_CONFIG_SRCDIR([ippdb.pc.in])
    1111
  • 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");
  • trunk/ippdb/src/ippdb.h

    r9423 r9684  
    125125);
    126126
    127 /** weatherRow data structure
    128  *
    129  * Structure for representing a single row of weather table data.
    130  */
    131 
    132 typedef struct {
    133     psF32           temp01;
    134     psF32           humi01;
    135     psF32           temp02;
    136     psF32           humi02;
    137     psF32           temp03;
    138     psF32           humi03;
    139     psF32           pressure;
    140 } weatherRow;
    141 
    142 /** Creates a new weatherRow object
    143  *
    144  *  @return A new weatherRow object or NULL on failure.
    145  */
    146 
    147 weatherRow *weatherRowAlloc(
    148     psF32           temp01,
    149     psF32           humi01,
    150     psF32           temp02,
    151     psF32           humi02,
    152     psF32           temp03,
    153     psF32           humi03,
    154     psF32           pressure
    155 );
    156 
    157 /** Creates a new weather table
    158  *
    159  * @return true on success
    160  */
    161 
    162 bool weatherCreateTable(
    163     psDB            *dbh                ///< Database handle
    164 );
    165 
    166 /** Deletes a weather table
    167  *
    168  * @return true on success
    169  */
    170 
    171 bool weatherDropTable(
    172     psDB            *dbh                ///< Database handle
    173 );
    174 
    175 /** Insert a single row into a table
    176  *
    177  * This function constructs and inserts a single row based on it's parameters.
    178  *
    179  * @return true on success
    180  */
    181 
    182 bool weatherInsert(
    183     psDB            *dbh,               ///< Database handle
    184     psF32           temp01,
    185     psF32           humi01,
    186     psF32           temp02,
    187     psF32           humi02,
    188     psF32           temp03,
    189     psF32           humi03,
    190     psF32           pressure
    191 );
    192 
    193 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    194  *
    195  * @return A The number of rows removed or a negative value on error
    196  */
    197 
    198 long long weatherDelete(
    199     psDB            *dbh,               ///< Database handle
    200     const psMetadata *where,            ///< Row match criteria
    201     unsigned long long limit            ///< Maximum number of elements to delete
    202 );
    203 
    204 /** Insert a single weatherRow object into a table
    205  *
    206  * This function constructs and inserts a single row based on it's parameters.
    207  *
    208  * @return true on success
    209  */
    210 
    211 bool weatherInsertObject(
    212     psDB            *dbh,               ///< Database handle
    213     weatherRow      *object             ///< weatherRow object
    214 );
    215 
    216 /** Insert an array of weatherRow object into a table
    217  *
    218  * This function constructs and inserts multiple rows based on it's parameters.
    219  *
    220  * @return true on success
    221  */
    222 
    223 bool weatherInsertObjects(
    224     psDB            *dbh,               ///< Database handle
    225     psArray         *objects            ///< array of weatherRow objects
    226 );
    227 
    228 /** Insert data from a binary FITS table weatherRow into the database
    229  *
    230  * This function expects a psFits object with a FITS table as the first
    231  * extension.  The table must have at least one row of data in it, that is of
    232  * the appropriate format (number of columns and their type).  All other
    233  * extensions are ignored.
    234  *
    235  * @return true on success
    236  */
    237 
    238 bool weatherInsertFits(
    239     psDB            *dbh,               ///< Database handle
    240     const psFits    *fits               ///< psFits object
    241 );
    242 
    243 /** Selects up to limit from the database and returns them in a binary FITS table
    244  *
    245  * This function assumes an empty psFits object and will create a FITS table
    246  * as the first extension.
    247  *
    248  *  See psDBSelectRows() for documentation on the format of where.
    249  *
    250  * @return true on success
    251  */
    252 
    253 bool weatherSelectRowsFits(
    254     psDB            *dbh,               ///< Database handle
    255     psFits          *fits,              ///< psFits object
    256     const psMetadata *where,            ///< Row match criteria
    257     unsigned long long limit            ///< Maximum number of elements to return
    258 );
    259 
    260 /** Convert a weatherRow into an equivalent psMetadata
    261  *
    262  * @return A psMetadata pointer or NULL on error
    263  */
    264 
    265 psMetadata *weatherMetadataFromObject(
    266     const weatherRow *object             ///< fooRow to convert into a psMetadata
    267 );
    268 
    269 /** Convert a psMetadata into an equivalent fooRow
    270  *
    271  * @return A weatherRow pointer or NULL on error
    272  */
    273 
    274 weatherRow *weatherObjectFromMetadata(
    275     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    276 );
    277 /** Selects up to limit rows from the database and returns as weatherRow objects in a psArray
    278  *
    279  *  See psDBSelectRows() for documentation on the format of where.
    280  *
    281  * @return A psArray pointer or NULL on error
    282  */
    283 
    284 psArray *weatherSelectRowObjects(
    285     psDB            *dbh,               ///< Database handle
    286     const psMetadata *where,            ///< Row match criteria
    287     unsigned long long limit            ///< Maximum number of elements to return
    288 );
    289 /** Deletes a row from the database coresponding to an weather
    290  *
    291  *  Note that a 'where' search psMetadata is constructed from each object and
    292  *  used to find rows to delete.
    293  *
    294  * @return A The number of rows removed or a negative value on error
    295  */
    296 
    297 bool weatherDeleteObject(
    298     psDB            *dbh,               ///< Database handle
    299     const weatherRow *object    ///< Object to delete
    300 );
    301 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    302  *
    303  *  Note that a 'where' search psMetadata is constructed from each object and
    304  *  used to find rows to delete.
    305  *
    306  * @return A The number of rows removed or a negative value on error
    307  */
    308 
    309 long long weatherDeleteRowObjects(
    310     psDB            *dbh,               ///< Database handle
    311     const psArray   *objects,           ///< Array of objects to delete
    312     unsigned long long limit            ///< Maximum number of elements to delete
    313 );
    314 /** Formats and prints an array of weatherRow objects
    315  *
    316  * When mdcf is set the formated output is in psMetadataConfig
    317  * format, otherwise it is in a simple tabular format.
    318  *
    319  * @return true on success
    320  */
    321 
    322 bool weatherPrintObjects(
    323     FILE            *stream,            ///< a stream
    324     psArray         *objects,           ///< An array of weatherRow objects
    325     bool            mdcf                ///< format as mdconfig or simple
    326 );
    327 /** skyp_transparencyRow data structure
    328  *
    329  * Structure for representing a single row of skyp_transparency table data.
    330  */
    331 
    332 typedef struct {
    333     char            *filter;
    334     psF64           trans;
    335     psS32           nstars;
    336     psF64           ra;
    337     psF64           decl;
    338     psF32           exptime;
    339     psF64           sky_bright;
    340 } skyp_transparencyRow;
    341 
    342 /** Creates a new skyp_transparencyRow object
    343  *
    344  *  @return A new skyp_transparencyRow object or NULL on failure.
    345  */
    346 
    347 skyp_transparencyRow *skyp_transparencyRowAlloc(
    348     const char      *filter,
    349     psF64           trans,
    350     psS32           nstars,
    351     psF64           ra,
    352     psF64           decl,
    353     psF32           exptime,
    354     psF64           sky_bright
    355 );
    356 
    357 /** Creates a new skyp_transparency table
    358  *
    359  * @return true on success
    360  */
    361 
    362 bool skyp_transparencyCreateTable(
    363     psDB            *dbh                ///< Database handle
    364 );
    365 
    366 /** Deletes a skyp_transparency table
    367  *
    368  * @return true on success
    369  */
    370 
    371 bool skyp_transparencyDropTable(
    372     psDB            *dbh                ///< Database handle
    373 );
    374 
    375 /** Insert a single row into a table
    376  *
    377  * This function constructs and inserts a single row based on it's parameters.
    378  *
    379  * @return true on success
    380  */
    381 
    382 bool skyp_transparencyInsert(
    383     psDB            *dbh,               ///< Database handle
    384     const char      *filter,
    385     psF64           trans,
    386     psS32           nstars,
    387     psF64           ra,
    388     psF64           decl,
    389     psF32           exptime,
    390     psF64           sky_bright
    391 );
    392 
    393 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    394  *
    395  * @return A The number of rows removed or a negative value on error
    396  */
    397 
    398 long long skyp_transparencyDelete(
    399     psDB            *dbh,               ///< Database handle
    400     const psMetadata *where,            ///< Row match criteria
    401     unsigned long long limit            ///< Maximum number of elements to delete
    402 );
    403 
    404 /** Insert a single skyp_transparencyRow object into a table
    405  *
    406  * This function constructs and inserts a single row based on it's parameters.
    407  *
    408  * @return true on success
    409  */
    410 
    411 bool skyp_transparencyInsertObject(
    412     psDB            *dbh,               ///< Database handle
    413     skyp_transparencyRow *object             ///< skyp_transparencyRow object
    414 );
    415 
    416 /** Insert an array of skyp_transparencyRow object into a table
    417  *
    418  * This function constructs and inserts multiple rows based on it's parameters.
    419  *
    420  * @return true on success
    421  */
    422 
    423 bool skyp_transparencyInsertObjects(
    424     psDB            *dbh,               ///< Database handle
    425     psArray         *objects            ///< array of skyp_transparencyRow objects
    426 );
    427 
    428 /** Insert data from a binary FITS table skyp_transparencyRow into the database
    429  *
    430  * This function expects a psFits object with a FITS table as the first
    431  * extension.  The table must have at least one row of data in it, that is of
    432  * the appropriate format (number of columns and their type).  All other
    433  * extensions are ignored.
    434  *
    435  * @return true on success
    436  */
    437 
    438 bool skyp_transparencyInsertFits(
    439     psDB            *dbh,               ///< Database handle
    440     const psFits    *fits               ///< psFits object
    441 );
    442 
    443 /** Selects up to limit from the database and returns them in a binary FITS table
    444  *
    445  * This function assumes an empty psFits object and will create a FITS table
    446  * as the first extension.
    447  *
    448  *  See psDBSelectRows() for documentation on the format of where.
    449  *
    450  * @return true on success
    451  */
    452 
    453 bool skyp_transparencySelectRowsFits(
    454     psDB            *dbh,               ///< Database handle
    455     psFits          *fits,              ///< psFits object
    456     const psMetadata *where,            ///< Row match criteria
    457     unsigned long long limit            ///< Maximum number of elements to return
    458 );
    459 
    460 /** Convert a skyp_transparencyRow into an equivalent psMetadata
    461  *
    462  * @return A psMetadata pointer or NULL on error
    463  */
    464 
    465 psMetadata *skyp_transparencyMetadataFromObject(
    466     const skyp_transparencyRow *object             ///< fooRow to convert into a psMetadata
    467 );
    468 
    469 /** Convert a psMetadata into an equivalent fooRow
    470  *
    471  * @return A skyp_transparencyRow pointer or NULL on error
    472  */
    473 
    474 skyp_transparencyRow *skyp_transparencyObjectFromMetadata(
    475     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    476 );
    477 /** Selects up to limit rows from the database and returns as skyp_transparencyRow objects in a psArray
    478  *
    479  *  See psDBSelectRows() for documentation on the format of where.
    480  *
    481  * @return A psArray pointer or NULL on error
    482  */
    483 
    484 psArray *skyp_transparencySelectRowObjects(
    485     psDB            *dbh,               ///< Database handle
    486     const psMetadata *where,            ///< Row match criteria
    487     unsigned long long limit            ///< Maximum number of elements to return
    488 );
    489 /** Deletes a row from the database coresponding to an skyp_transparency
    490  *
    491  *  Note that a 'where' search psMetadata is constructed from each object and
    492  *  used to find rows to delete.
    493  *
    494  * @return A The number of rows removed or a negative value on error
    495  */
    496 
    497 bool skyp_transparencyDeleteObject(
    498     psDB            *dbh,               ///< Database handle
    499     const skyp_transparencyRow *object    ///< Object to delete
    500 );
    501 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    502  *
    503  *  Note that a 'where' search psMetadata is constructed from each object and
    504  *  used to find rows to delete.
    505  *
    506  * @return A The number of rows removed or a negative value on error
    507  */
    508 
    509 long long skyp_transparencyDeleteRowObjects(
    510     psDB            *dbh,               ///< Database handle
    511     const psArray   *objects,           ///< Array of objects to delete
    512     unsigned long long limit            ///< Maximum number of elements to delete
    513 );
    514 /** Formats and prints an array of skyp_transparencyRow objects
    515  *
    516  * When mdcf is set the formated output is in psMetadataConfig
    517  * format, otherwise it is in a simple tabular format.
    518  *
    519  * @return true on success
    520  */
    521 
    522 bool skyp_transparencyPrintObjects(
    523     FILE            *stream,            ///< a stream
    524     psArray         *objects,           ///< An array of skyp_transparencyRow objects
    525     bool            mdcf                ///< format as mdconfig or simple
    526 );
    527 /** skyp_absorptionRow data structure
    528  *
    529  * Structure for representing a single row of skyp_absorption table data.
    530  */
    531 
    532 typedef struct {
    533     char            *disperser_id;
    534     psF32           atmcomp1;
    535     psF32           atmcomp2;
    536     psF32           atmcomp3;
    537     psS32           nstars;
    538     psF64           ra;
    539     psF64           decl;
    540     psF32           exptime;
    541     psF64           sky_bright;
    542 } skyp_absorptionRow;
    543 
    544 /** Creates a new skyp_absorptionRow object
    545  *
    546  *  @return A new skyp_absorptionRow object or NULL on failure.
    547  */
    548 
    549 skyp_absorptionRow *skyp_absorptionRowAlloc(
    550     const char      *disperser_id,
    551     psF32           atmcomp1,
    552     psF32           atmcomp2,
    553     psF32           atmcomp3,
    554     psS32           nstars,
    555     psF64           ra,
    556     psF64           decl,
    557     psF32           exptime,
    558     psF64           sky_bright
    559 );
    560 
    561 /** Creates a new skyp_absorption table
    562  *
    563  * @return true on success
    564  */
    565 
    566 bool skyp_absorptionCreateTable(
    567     psDB            *dbh                ///< Database handle
    568 );
    569 
    570 /** Deletes a skyp_absorption table
    571  *
    572  * @return true on success
    573  */
    574 
    575 bool skyp_absorptionDropTable(
    576     psDB            *dbh                ///< Database handle
    577 );
    578 
    579 /** Insert a single row into a table
    580  *
    581  * This function constructs and inserts a single row based on it's parameters.
    582  *
    583  * @return true on success
    584  */
    585 
    586 bool skyp_absorptionInsert(
    587     psDB            *dbh,               ///< Database handle
    588     const char      *disperser_id,
    589     psF32           atmcomp1,
    590     psF32           atmcomp2,
    591     psF32           atmcomp3,
    592     psS32           nstars,
    593     psF64           ra,
    594     psF64           decl,
    595     psF32           exptime,
    596     psF64           sky_bright
    597 );
    598 
    599 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    600  *
    601  * @return A The number of rows removed or a negative value on error
    602  */
    603 
    604 long long skyp_absorptionDelete(
    605     psDB            *dbh,               ///< Database handle
    606     const psMetadata *where,            ///< Row match criteria
    607     unsigned long long limit            ///< Maximum number of elements to delete
    608 );
    609 
    610 /** Insert a single skyp_absorptionRow object into a table
    611  *
    612  * This function constructs and inserts a single row based on it's parameters.
    613  *
    614  * @return true on success
    615  */
    616 
    617 bool skyp_absorptionInsertObject(
    618     psDB            *dbh,               ///< Database handle
    619     skyp_absorptionRow *object             ///< skyp_absorptionRow object
    620 );
    621 
    622 /** Insert an array of skyp_absorptionRow object into a table
    623  *
    624  * This function constructs and inserts multiple rows based on it's parameters.
    625  *
    626  * @return true on success
    627  */
    628 
    629 bool skyp_absorptionInsertObjects(
    630     psDB            *dbh,               ///< Database handle
    631     psArray         *objects            ///< array of skyp_absorptionRow objects
    632 );
    633 
    634 /** Insert data from a binary FITS table skyp_absorptionRow into the database
    635  *
    636  * This function expects a psFits object with a FITS table as the first
    637  * extension.  The table must have at least one row of data in it, that is of
    638  * the appropriate format (number of columns and their type).  All other
    639  * extensions are ignored.
    640  *
    641  * @return true on success
    642  */
    643 
    644 bool skyp_absorptionInsertFits(
    645     psDB            *dbh,               ///< Database handle
    646     const psFits    *fits               ///< psFits object
    647 );
    648 
    649 /** Selects up to limit from the database and returns them in a binary FITS table
    650  *
    651  * This function assumes an empty psFits object and will create a FITS table
    652  * as the first extension.
    653  *
    654  *  See psDBSelectRows() for documentation on the format of where.
    655  *
    656  * @return true on success
    657  */
    658 
    659 bool skyp_absorptionSelectRowsFits(
    660     psDB            *dbh,               ///< Database handle
    661     psFits          *fits,              ///< psFits object
    662     const psMetadata *where,            ///< Row match criteria
    663     unsigned long long limit            ///< Maximum number of elements to return
    664 );
    665 
    666 /** Convert a skyp_absorptionRow into an equivalent psMetadata
    667  *
    668  * @return A psMetadata pointer or NULL on error
    669  */
    670 
    671 psMetadata *skyp_absorptionMetadataFromObject(
    672     const skyp_absorptionRow *object             ///< fooRow to convert into a psMetadata
    673 );
    674 
    675 /** Convert a psMetadata into an equivalent fooRow
    676  *
    677  * @return A skyp_absorptionRow pointer or NULL on error
    678  */
    679 
    680 skyp_absorptionRow *skyp_absorptionObjectFromMetadata(
    681     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    682 );
    683 /** Selects up to limit rows from the database and returns as skyp_absorptionRow objects in a psArray
    684  *
    685  *  See psDBSelectRows() for documentation on the format of where.
    686  *
    687  * @return A psArray pointer or NULL on error
    688  */
    689 
    690 psArray *skyp_absorptionSelectRowObjects(
    691     psDB            *dbh,               ///< Database handle
    692     const psMetadata *where,            ///< Row match criteria
    693     unsigned long long limit            ///< Maximum number of elements to return
    694 );
    695 /** Deletes a row from the database coresponding to an skyp_absorption
    696  *
    697  *  Note that a 'where' search psMetadata is constructed from each object and
    698  *  used to find rows to delete.
    699  *
    700  * @return A The number of rows removed or a negative value on error
    701  */
    702 
    703 bool skyp_absorptionDeleteObject(
    704     psDB            *dbh,               ///< Database handle
    705     const skyp_absorptionRow *object    ///< Object to delete
    706 );
    707 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    708  *
    709  *  Note that a 'where' search psMetadata is constructed from each object and
    710  *  used to find rows to delete.
    711  *
    712  * @return A The number of rows removed or a negative value on error
    713  */
    714 
    715 long long skyp_absorptionDeleteRowObjects(
    716     psDB            *dbh,               ///< Database handle
    717     const psArray   *objects,           ///< Array of objects to delete
    718     unsigned long long limit            ///< Maximum number of elements to delete
    719 );
    720 /** Formats and prints an array of skyp_absorptionRow objects
    721  *
    722  * When mdcf is set the formated output is in psMetadataConfig
    723  * format, otherwise it is in a simple tabular format.
    724  *
    725  * @return true on success
    726  */
    727 
    728 bool skyp_absorptionPrintObjects(
    729     FILE            *stream,            ///< a stream
    730     psArray         *objects,           ///< An array of skyp_absorptionRow objects
    731     bool            mdcf                ///< format as mdconfig or simple
    732 );
    733 /** skyp_emissionRow data structure
    734  *
    735  * Structure for representing a single row of skyp_emission table data.
    736  */
    737 
    738 typedef struct {
    739     char            *disperser_id;
    740     psF32           atmcomp1;
    741     psF32           atmcomp2;
    742     psF32           atmcomp3;
    743     psF32           continuum;
    744     psF32           exptime;
    745 } skyp_emissionRow;
    746 
    747 /** Creates a new skyp_emissionRow object
    748  *
    749  *  @return A new skyp_emissionRow object or NULL on failure.
    750  */
    751 
    752 skyp_emissionRow *skyp_emissionRowAlloc(
    753     const char      *disperser_id,
    754     psF32           atmcomp1,
    755     psF32           atmcomp2,
    756     psF32           atmcomp3,
    757     psF32           continuum,
    758     psF32           exptime
    759 );
    760 
    761 /** Creates a new skyp_emission table
    762  *
    763  * @return true on success
    764  */
    765 
    766 bool skyp_emissionCreateTable(
    767     psDB            *dbh                ///< Database handle
    768 );
    769 
    770 /** Deletes a skyp_emission table
    771  *
    772  * @return true on success
    773  */
    774 
    775 bool skyp_emissionDropTable(
    776     psDB            *dbh                ///< Database handle
    777 );
    778 
    779 /** Insert a single row into a table
    780  *
    781  * This function constructs and inserts a single row based on it's parameters.
    782  *
    783  * @return true on success
    784  */
    785 
    786 bool skyp_emissionInsert(
    787     psDB            *dbh,               ///< Database handle
    788     const char      *disperser_id,
    789     psF32           atmcomp1,
    790     psF32           atmcomp2,
    791     psF32           atmcomp3,
    792     psF32           continuum,
    793     psF32           exptime
    794 );
    795 
    796 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    797  *
    798  * @return A The number of rows removed or a negative value on error
    799  */
    800 
    801 long long skyp_emissionDelete(
    802     psDB            *dbh,               ///< Database handle
    803     const psMetadata *where,            ///< Row match criteria
    804     unsigned long long limit            ///< Maximum number of elements to delete
    805 );
    806 
    807 /** Insert a single skyp_emissionRow object into a table
    808  *
    809  * This function constructs and inserts a single row based on it's parameters.
    810  *
    811  * @return true on success
    812  */
    813 
    814 bool skyp_emissionInsertObject(
    815     psDB            *dbh,               ///< Database handle
    816     skyp_emissionRow *object             ///< skyp_emissionRow object
    817 );
    818 
    819 /** Insert an array of skyp_emissionRow object into a table
    820  *
    821  * This function constructs and inserts multiple rows based on it's parameters.
    822  *
    823  * @return true on success
    824  */
    825 
    826 bool skyp_emissionInsertObjects(
    827     psDB            *dbh,               ///< Database handle
    828     psArray         *objects            ///< array of skyp_emissionRow objects
    829 );
    830 
    831 /** Insert data from a binary FITS table skyp_emissionRow into the database
    832  *
    833  * This function expects a psFits object with a FITS table as the first
    834  * extension.  The table must have at least one row of data in it, that is of
    835  * the appropriate format (number of columns and their type).  All other
    836  * extensions are ignored.
    837  *
    838  * @return true on success
    839  */
    840 
    841 bool skyp_emissionInsertFits(
    842     psDB            *dbh,               ///< Database handle
    843     const psFits    *fits               ///< psFits object
    844 );
    845 
    846 /** Selects up to limit from the database and returns them in a binary FITS table
    847  *
    848  * This function assumes an empty psFits object and will create a FITS table
    849  * as the first extension.
    850  *
    851  *  See psDBSelectRows() for documentation on the format of where.
    852  *
    853  * @return true on success
    854  */
    855 
    856 bool skyp_emissionSelectRowsFits(
    857     psDB            *dbh,               ///< Database handle
    858     psFits          *fits,              ///< psFits object
    859     const psMetadata *where,            ///< Row match criteria
    860     unsigned long long limit            ///< Maximum number of elements to return
    861 );
    862 
    863 /** Convert a skyp_emissionRow into an equivalent psMetadata
    864  *
    865  * @return A psMetadata pointer or NULL on error
    866  */
    867 
    868 psMetadata *skyp_emissionMetadataFromObject(
    869     const skyp_emissionRow *object             ///< fooRow to convert into a psMetadata
    870 );
    871 
    872 /** Convert a psMetadata into an equivalent fooRow
    873  *
    874  * @return A skyp_emissionRow pointer or NULL on error
    875  */
    876 
    877 skyp_emissionRow *skyp_emissionObjectFromMetadata(
    878     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    879 );
    880 /** Selects up to limit rows from the database and returns as skyp_emissionRow objects in a psArray
    881  *
    882  *  See psDBSelectRows() for documentation on the format of where.
    883  *
    884  * @return A psArray pointer or NULL on error
    885  */
    886 
    887 psArray *skyp_emissionSelectRowObjects(
    888     psDB            *dbh,               ///< Database handle
    889     const psMetadata *where,            ///< Row match criteria
    890     unsigned long long limit            ///< Maximum number of elements to return
    891 );
    892 /** Deletes a row from the database coresponding to an skyp_emission
    893  *
    894  *  Note that a 'where' search psMetadata is constructed from each object and
    895  *  used to find rows to delete.
    896  *
    897  * @return A The number of rows removed or a negative value on error
    898  */
    899 
    900 bool skyp_emissionDeleteObject(
    901     psDB            *dbh,               ///< Database handle
    902     const skyp_emissionRow *object    ///< Object to delete
    903 );
    904 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    905  *
    906  *  Note that a 'where' search psMetadata is constructed from each object and
    907  *  used to find rows to delete.
    908  *
    909  * @return A The number of rows removed or a negative value on error
    910  */
    911 
    912 long long skyp_emissionDeleteRowObjects(
    913     psDB            *dbh,               ///< Database handle
    914     const psArray   *objects,           ///< Array of objects to delete
    915     unsigned long long limit            ///< Maximum number of elements to delete
    916 );
    917 /** Formats and prints an array of skyp_emissionRow objects
    918  *
    919  * When mdcf is set the formated output is in psMetadataConfig
    920  * format, otherwise it is in a simple tabular format.
    921  *
    922  * @return true on success
    923  */
    924 
    925 bool skyp_emissionPrintObjects(
    926     FILE            *stream,            ///< a stream
    927     psArray         *objects,           ///< An array of skyp_emissionRow objects
    928     bool            mdcf                ///< format as mdconfig or simple
    929 );
    930 /** dimmRow data structure
    931  *
    932  * Structure for representing a single row of dimm table data.
    933  */
    934 
    935 typedef struct {
    936     psF32           sigmax;
    937     psF32           sigmay;
    938     psF32           fwhm;
    939     psF64           ra;
    940     psF64           decl;
    941     psF32           expttime;
    942     char            *telescope_id;
    943 } dimmRow;
    944 
    945 /** Creates a new dimmRow object
    946  *
    947  *  @return A new dimmRow object or NULL on failure.
    948  */
    949 
    950 dimmRow *dimmRowAlloc(
    951     psF32           sigmax,
    952     psF32           sigmay,
    953     psF32           fwhm,
    954     psF64           ra,
    955     psF64           decl,
    956     psF32           expttime,
    957     const char      *telescope_id
    958 );
    959 
    960 /** Creates a new dimm table
    961  *
    962  * @return true on success
    963  */
    964 
    965 bool dimmCreateTable(
    966     psDB            *dbh                ///< Database handle
    967 );
    968 
    969 /** Deletes a dimm table
    970  *
    971  * @return true on success
    972  */
    973 
    974 bool dimmDropTable(
    975     psDB            *dbh                ///< Database handle
    976 );
    977 
    978 /** Insert a single row into a table
    979  *
    980  * This function constructs and inserts a single row based on it's parameters.
    981  *
    982  * @return true on success
    983  */
    984 
    985 bool dimmInsert(
    986     psDB            *dbh,               ///< Database handle
    987     psF32           sigmax,
    988     psF32           sigmay,
    989     psF32           fwhm,
    990     psF64           ra,
    991     psF64           decl,
    992     psF32           expttime,
    993     const char      *telescope_id
    994 );
    995 
    996 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    997  *
    998  * @return A The number of rows removed or a negative value on error
    999  */
    1000 
    1001 long long dimmDelete(
    1002     psDB            *dbh,               ///< Database handle
    1003     const psMetadata *where,            ///< Row match criteria
    1004     unsigned long long limit            ///< Maximum number of elements to delete
    1005 );
    1006 
    1007 /** Insert a single dimmRow object into a table
    1008  *
    1009  * This function constructs and inserts a single row based on it's parameters.
    1010  *
    1011  * @return true on success
    1012  */
    1013 
    1014 bool dimmInsertObject(
    1015     psDB            *dbh,               ///< Database handle
    1016     dimmRow         *object             ///< dimmRow object
    1017 );
    1018 
    1019 /** Insert an array of dimmRow object into a table
    1020  *
    1021  * This function constructs and inserts multiple rows based on it's parameters.
    1022  *
    1023  * @return true on success
    1024  */
    1025 
    1026 bool dimmInsertObjects(
    1027     psDB            *dbh,               ///< Database handle
    1028     psArray         *objects            ///< array of dimmRow objects
    1029 );
    1030 
    1031 /** Insert data from a binary FITS table dimmRow into the database
    1032  *
    1033  * This function expects a psFits object with a FITS table as the first
    1034  * extension.  The table must have at least one row of data in it, that is of
    1035  * the appropriate format (number of columns and their type).  All other
    1036  * extensions are ignored.
    1037  *
    1038  * @return true on success
    1039  */
    1040 
    1041 bool dimmInsertFits(
    1042     psDB            *dbh,               ///< Database handle
    1043     const psFits    *fits               ///< psFits object
    1044 );
    1045 
    1046 /** Selects up to limit from the database and returns them in a binary FITS table
    1047  *
    1048  * This function assumes an empty psFits object and will create a FITS table
    1049  * as the first extension.
    1050  *
    1051  *  See psDBSelectRows() for documentation on the format of where.
    1052  *
    1053  * @return true on success
    1054  */
    1055 
    1056 bool dimmSelectRowsFits(
    1057     psDB            *dbh,               ///< Database handle
    1058     psFits          *fits,              ///< psFits object
    1059     const psMetadata *where,            ///< Row match criteria
    1060     unsigned long long limit            ///< Maximum number of elements to return
    1061 );
    1062 
    1063 /** Convert a dimmRow into an equivalent psMetadata
    1064  *
    1065  * @return A psMetadata pointer or NULL on error
    1066  */
    1067 
    1068 psMetadata *dimmMetadataFromObject(
    1069     const dimmRow   *object             ///< fooRow to convert into a psMetadata
    1070 );
    1071 
    1072 /** Convert a psMetadata into an equivalent fooRow
    1073  *
    1074  * @return A dimmRow pointer or NULL on error
    1075  */
    1076 
    1077 dimmRow *dimmObjectFromMetadata(
    1078     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    1079 );
    1080 /** Selects up to limit rows from the database and returns as dimmRow objects in a psArray
    1081  *
    1082  *  See psDBSelectRows() for documentation on the format of where.
    1083  *
    1084  * @return A psArray pointer or NULL on error
    1085  */
    1086 
    1087 psArray *dimmSelectRowObjects(
    1088     psDB            *dbh,               ///< Database handle
    1089     const psMetadata *where,            ///< Row match criteria
    1090     unsigned long long limit            ///< Maximum number of elements to return
    1091 );
    1092 /** Deletes a row from the database coresponding to an dimm
    1093  *
    1094  *  Note that a 'where' search psMetadata is constructed from each object and
    1095  *  used to find rows to delete.
    1096  *
    1097  * @return A The number of rows removed or a negative value on error
    1098  */
    1099 
    1100 bool dimmDeleteObject(
    1101     psDB            *dbh,               ///< Database handle
    1102     const dimmRow *object    ///< Object to delete
    1103 );
    1104 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1105  *
    1106  *  Note that a 'where' search psMetadata is constructed from each object and
    1107  *  used to find rows to delete.
    1108  *
    1109  * @return A The number of rows removed or a negative value on error
    1110  */
    1111 
    1112 long long dimmDeleteRowObjects(
    1113     psDB            *dbh,               ///< Database handle
    1114     const psArray   *objects,           ///< Array of objects to delete
    1115     unsigned long long limit            ///< Maximum number of elements to delete
    1116 );
    1117 /** Formats and prints an array of dimmRow objects
    1118  *
    1119  * When mdcf is set the formated output is in psMetadataConfig
    1120  * format, otherwise it is in a simple tabular format.
    1121  *
    1122  * @return true on success
    1123  */
    1124 
    1125 bool dimmPrintObjects(
    1126     FILE            *stream,            ///< a stream
    1127     psArray         *objects,           ///< An array of dimmRow objects
    1128     bool            mdcf                ///< format as mdconfig or simple
    1129 );
    1130 /** skyp_irRow data structure
    1131  *
    1132  * Structure for representing a single row of skyp_ir table data.
    1133  */
    1134 
    1135 typedef struct {
    1136     psF64           sky_bright;
    1137     psF64           sky_var;
    1138     psF64           ra;
    1139     psF64           decl;
    1140     psF32           fov_x;
    1141     psF32           fov_y;
    1142 } skyp_irRow;
    1143 
    1144 /** Creates a new skyp_irRow object
    1145  *
    1146  *  @return A new skyp_irRow object or NULL on failure.
    1147  */
    1148 
    1149 skyp_irRow *skyp_irRowAlloc(
    1150     psF64           sky_bright,
    1151     psF64           sky_var,
    1152     psF64           ra,
    1153     psF64           decl,
    1154     psF32           fov_x,
    1155     psF32           fov_y
    1156 );
    1157 
    1158 /** Creates a new skyp_ir table
    1159  *
    1160  * @return true on success
    1161  */
    1162 
    1163 bool skyp_irCreateTable(
    1164     psDB            *dbh                ///< Database handle
    1165 );
    1166 
    1167 /** Deletes a skyp_ir table
    1168  *
    1169  * @return true on success
    1170  */
    1171 
    1172 bool skyp_irDropTable(
    1173     psDB            *dbh                ///< Database handle
    1174 );
    1175 
    1176 /** Insert a single row into a table
    1177  *
    1178  * This function constructs and inserts a single row based on it's parameters.
    1179  *
    1180  * @return true on success
    1181  */
    1182 
    1183 bool skyp_irInsert(
    1184     psDB            *dbh,               ///< Database handle
    1185     psF64           sky_bright,
    1186     psF64           sky_var,
    1187     psF64           ra,
    1188     psF64           decl,
    1189     psF32           fov_x,
    1190     psF32           fov_y
    1191 );
    1192 
    1193 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1194  *
    1195  * @return A The number of rows removed or a negative value on error
    1196  */
    1197 
    1198 long long skyp_irDelete(
    1199     psDB            *dbh,               ///< Database handle
    1200     const psMetadata *where,            ///< Row match criteria
    1201     unsigned long long limit            ///< Maximum number of elements to delete
    1202 );
    1203 
    1204 /** Insert a single skyp_irRow object into a table
    1205  *
    1206  * This function constructs and inserts a single row based on it's parameters.
    1207  *
    1208  * @return true on success
    1209  */
    1210 
    1211 bool skyp_irInsertObject(
    1212     psDB            *dbh,               ///< Database handle
    1213     skyp_irRow      *object             ///< skyp_irRow object
    1214 );
    1215 
    1216 /** Insert an array of skyp_irRow object into a table
    1217  *
    1218  * This function constructs and inserts multiple rows based on it's parameters.
    1219  *
    1220  * @return true on success
    1221  */
    1222 
    1223 bool skyp_irInsertObjects(
    1224     psDB            *dbh,               ///< Database handle
    1225     psArray         *objects            ///< array of skyp_irRow objects
    1226 );
    1227 
    1228 /** Insert data from a binary FITS table skyp_irRow into the database
    1229  *
    1230  * This function expects a psFits object with a FITS table as the first
    1231  * extension.  The table must have at least one row of data in it, that is of
    1232  * the appropriate format (number of columns and their type).  All other
    1233  * extensions are ignored.
    1234  *
    1235  * @return true on success
    1236  */
    1237 
    1238 bool skyp_irInsertFits(
    1239     psDB            *dbh,               ///< Database handle
    1240     const psFits    *fits               ///< psFits object
    1241 );
    1242 
    1243 /** Selects up to limit from the database and returns them in a binary FITS table
    1244  *
    1245  * This function assumes an empty psFits object and will create a FITS table
    1246  * as the first extension.
    1247  *
    1248  *  See psDBSelectRows() for documentation on the format of where.
    1249  *
    1250  * @return true on success
    1251  */
    1252 
    1253 bool skyp_irSelectRowsFits(
    1254     psDB            *dbh,               ///< Database handle
    1255     psFits          *fits,              ///< psFits object
    1256     const psMetadata *where,            ///< Row match criteria
    1257     unsigned long long limit            ///< Maximum number of elements to return
    1258 );
    1259 
    1260 /** Convert a skyp_irRow into an equivalent psMetadata
    1261  *
    1262  * @return A psMetadata pointer or NULL on error
    1263  */
    1264 
    1265 psMetadata *skyp_irMetadataFromObject(
    1266     const skyp_irRow *object             ///< fooRow to convert into a psMetadata
    1267 );
    1268 
    1269 /** Convert a psMetadata into an equivalent fooRow
    1270  *
    1271  * @return A skyp_irRow pointer or NULL on error
    1272  */
    1273 
    1274 skyp_irRow *skyp_irObjectFromMetadata(
    1275     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    1276 );
    1277 /** Selects up to limit rows from the database and returns as skyp_irRow objects in a psArray
    1278  *
    1279  *  See psDBSelectRows() for documentation on the format of where.
    1280  *
    1281  * @return A psArray pointer or NULL on error
    1282  */
    1283 
    1284 psArray *skyp_irSelectRowObjects(
    1285     psDB            *dbh,               ///< Database handle
    1286     const psMetadata *where,            ///< Row match criteria
    1287     unsigned long long limit            ///< Maximum number of elements to return
    1288 );
    1289 /** Deletes a row from the database coresponding to an skyp_ir
    1290  *
    1291  *  Note that a 'where' search psMetadata is constructed from each object and
    1292  *  used to find rows to delete.
    1293  *
    1294  * @return A The number of rows removed or a negative value on error
    1295  */
    1296 
    1297 bool skyp_irDeleteObject(
    1298     psDB            *dbh,               ///< Database handle
    1299     const skyp_irRow *object    ///< Object to delete
    1300 );
    1301 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1302  *
    1303  *  Note that a 'where' search psMetadata is constructed from each object and
    1304  *  used to find rows to delete.
    1305  *
    1306  * @return A The number of rows removed or a negative value on error
    1307  */
    1308 
    1309 long long skyp_irDeleteRowObjects(
    1310     psDB            *dbh,               ///< Database handle
    1311     const psArray   *objects,           ///< Array of objects to delete
    1312     unsigned long long limit            ///< Maximum number of elements to delete
    1313 );
    1314 /** Formats and prints an array of skyp_irRow objects
    1315  *
    1316  * When mdcf is set the formated output is in psMetadataConfig
    1317  * format, otherwise it is in a simple tabular format.
    1318  *
    1319  * @return true on success
    1320  */
    1321 
    1322 bool skyp_irPrintObjects(
    1323     FILE            *stream,            ///< a stream
    1324     psArray         *objects,           ///< An array of skyp_irRow objects
    1325     bool            mdcf                ///< format as mdconfig or simple
    1326 );
    1327 /** domeRow data structure
    1328  *
    1329  * Structure for representing a single row of dome table data.
    1330  */
    1331 
    1332 typedef struct {
    1333     psF32           az;
    1334     bool            open;
    1335     bool            light;
    1336     bool            track;
    1337 } domeRow;
    1338 
    1339 /** Creates a new domeRow object
    1340  *
    1341  *  @return A new domeRow object or NULL on failure.
    1342  */
    1343 
    1344 domeRow *domeRowAlloc(
    1345     psF32           az,
    1346     bool            open,
    1347     bool            light,
    1348     bool            track
    1349 );
    1350 
    1351 /** Creates a new dome table
    1352  *
    1353  * @return true on success
    1354  */
    1355 
    1356 bool domeCreateTable(
    1357     psDB            *dbh                ///< Database handle
    1358 );
    1359 
    1360 /** Deletes a dome table
    1361  *
    1362  * @return true on success
    1363  */
    1364 
    1365 bool domeDropTable(
    1366     psDB            *dbh                ///< Database handle
    1367 );
    1368 
    1369 /** Insert a single row into a table
    1370  *
    1371  * This function constructs and inserts a single row based on it's parameters.
    1372  *
    1373  * @return true on success
    1374  */
    1375 
    1376 bool domeInsert(
    1377     psDB            *dbh,               ///< Database handle
    1378     psF32           az,
    1379     bool            open,
    1380     bool            light,
    1381     bool            track
    1382 );
    1383 
    1384 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1385  *
    1386  * @return A The number of rows removed or a negative value on error
    1387  */
    1388 
    1389 long long domeDelete(
    1390     psDB            *dbh,               ///< Database handle
    1391     const psMetadata *where,            ///< Row match criteria
    1392     unsigned long long limit            ///< Maximum number of elements to delete
    1393 );
    1394 
    1395 /** Insert a single domeRow object into a table
    1396  *
    1397  * This function constructs and inserts a single row based on it's parameters.
    1398  *
    1399  * @return true on success
    1400  */
    1401 
    1402 bool domeInsertObject(
    1403     psDB            *dbh,               ///< Database handle
    1404     domeRow         *object             ///< domeRow object
    1405 );
    1406 
    1407 /** Insert an array of domeRow object into a table
    1408  *
    1409  * This function constructs and inserts multiple rows based on it's parameters.
    1410  *
    1411  * @return true on success
    1412  */
    1413 
    1414 bool domeInsertObjects(
    1415     psDB            *dbh,               ///< Database handle
    1416     psArray         *objects            ///< array of domeRow objects
    1417 );
    1418 
    1419 /** Insert data from a binary FITS table domeRow into the database
    1420  *
    1421  * This function expects a psFits object with a FITS table as the first
    1422  * extension.  The table must have at least one row of data in it, that is of
    1423  * the appropriate format (number of columns and their type).  All other
    1424  * extensions are ignored.
    1425  *
    1426  * @return true on success
    1427  */
    1428 
    1429 bool domeInsertFits(
    1430     psDB            *dbh,               ///< Database handle
    1431     const psFits    *fits               ///< psFits object
    1432 );
    1433 
    1434 /** Selects up to limit from the database and returns them in a binary FITS table
    1435  *
    1436  * This function assumes an empty psFits object and will create a FITS table
    1437  * as the first extension.
    1438  *
    1439  *  See psDBSelectRows() for documentation on the format of where.
    1440  *
    1441  * @return true on success
    1442  */
    1443 
    1444 bool domeSelectRowsFits(
    1445     psDB            *dbh,               ///< Database handle
    1446     psFits          *fits,              ///< psFits object
    1447     const psMetadata *where,            ///< Row match criteria
    1448     unsigned long long limit            ///< Maximum number of elements to return
    1449 );
    1450 
    1451 /** Convert a domeRow into an equivalent psMetadata
    1452  *
    1453  * @return A psMetadata pointer or NULL on error
    1454  */
    1455 
    1456 psMetadata *domeMetadataFromObject(
    1457     const domeRow   *object             ///< fooRow to convert into a psMetadata
    1458 );
    1459 
    1460 /** Convert a psMetadata into an equivalent fooRow
    1461  *
    1462  * @return A domeRow pointer or NULL on error
    1463  */
    1464 
    1465 domeRow *domeObjectFromMetadata(
    1466     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    1467 );
    1468 /** Selects up to limit rows from the database and returns as domeRow objects in a psArray
    1469  *
    1470  *  See psDBSelectRows() for documentation on the format of where.
    1471  *
    1472  * @return A psArray pointer or NULL on error
    1473  */
    1474 
    1475 psArray *domeSelectRowObjects(
    1476     psDB            *dbh,               ///< Database handle
    1477     const psMetadata *where,            ///< Row match criteria
    1478     unsigned long long limit            ///< Maximum number of elements to return
    1479 );
    1480 /** Deletes a row from the database coresponding to an dome
    1481  *
    1482  *  Note that a 'where' search psMetadata is constructed from each object and
    1483  *  used to find rows to delete.
    1484  *
    1485  * @return A The number of rows removed or a negative value on error
    1486  */
    1487 
    1488 bool domeDeleteObject(
    1489     psDB            *dbh,               ///< Database handle
    1490     const domeRow *object    ///< Object to delete
    1491 );
    1492 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1493  *
    1494  *  Note that a 'where' search psMetadata is constructed from each object and
    1495  *  used to find rows to delete.
    1496  *
    1497  * @return A The number of rows removed or a negative value on error
    1498  */
    1499 
    1500 long long domeDeleteRowObjects(
    1501     psDB            *dbh,               ///< Database handle
    1502     const psArray   *objects,           ///< Array of objects to delete
    1503     unsigned long long limit            ///< Maximum number of elements to delete
    1504 );
    1505 /** Formats and prints an array of domeRow objects
    1506  *
    1507  * When mdcf is set the formated output is in psMetadataConfig
    1508  * format, otherwise it is in a simple tabular format.
    1509  *
    1510  * @return true on success
    1511  */
    1512 
    1513 bool domePrintObjects(
    1514     FILE            *stream,            ///< a stream
    1515     psArray         *objects,           ///< An array of domeRow objects
    1516     bool            mdcf                ///< format as mdconfig or simple
    1517 );
    1518 /** telescopeRow data structure
    1519  *
    1520  * Structure for representing a single row of telescope table data.
    1521  */
    1522 
    1523 typedef struct {
    1524     char            *guide;
    1525     psF32           alt;
    1526     psF32           az;
    1527     psF64           ra;
    1528     psF64           decl;
    1529 } telescopeRow;
    1530 
    1531 /** Creates a new telescopeRow object
    1532  *
    1533  *  @return A new telescopeRow object or NULL on failure.
    1534  */
    1535 
    1536 telescopeRow *telescopeRowAlloc(
    1537     const char      *guide,
    1538     psF32           alt,
    1539     psF32           az,
    1540     psF64           ra,
    1541     psF64           decl
    1542 );
    1543 
    1544 /** Creates a new telescope table
    1545  *
    1546  * @return true on success
    1547  */
    1548 
    1549 bool telescopeCreateTable(
    1550     psDB            *dbh                ///< Database handle
    1551 );
    1552 
    1553 /** Deletes a telescope table
    1554  *
    1555  * @return true on success
    1556  */
    1557 
    1558 bool telescopeDropTable(
    1559     psDB            *dbh                ///< Database handle
    1560 );
    1561 
    1562 /** Insert a single row into a table
    1563  *
    1564  * This function constructs and inserts a single row based on it's parameters.
    1565  *
    1566  * @return true on success
    1567  */
    1568 
    1569 bool telescopeInsert(
    1570     psDB            *dbh,               ///< Database handle
    1571     const char      *guide,
    1572     psF32           alt,
    1573     psF32           az,
    1574     psF64           ra,
    1575     psF64           decl
    1576 );
    1577 
    1578 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1579  *
    1580  * @return A The number of rows removed or a negative value on error
    1581  */
    1582 
    1583 long long telescopeDelete(
    1584     psDB            *dbh,               ///< Database handle
    1585     const psMetadata *where,            ///< Row match criteria
    1586     unsigned long long limit            ///< Maximum number of elements to delete
    1587 );
    1588 
    1589 /** Insert a single telescopeRow object into a table
    1590  *
    1591  * This function constructs and inserts a single row based on it's parameters.
    1592  *
    1593  * @return true on success
    1594  */
    1595 
    1596 bool telescopeInsertObject(
    1597     psDB            *dbh,               ///< Database handle
    1598     telescopeRow    *object             ///< telescopeRow object
    1599 );
    1600 
    1601 /** Insert an array of telescopeRow object into a table
    1602  *
    1603  * This function constructs and inserts multiple rows based on it's parameters.
    1604  *
    1605  * @return true on success
    1606  */
    1607 
    1608 bool telescopeInsertObjects(
    1609     psDB            *dbh,               ///< Database handle
    1610     psArray         *objects            ///< array of telescopeRow objects
    1611 );
    1612 
    1613 /** Insert data from a binary FITS table telescopeRow into the database
    1614  *
    1615  * This function expects a psFits object with a FITS table as the first
    1616  * extension.  The table must have at least one row of data in it, that is of
    1617  * the appropriate format (number of columns and their type).  All other
    1618  * extensions are ignored.
    1619  *
    1620  * @return true on success
    1621  */
    1622 
    1623 bool telescopeInsertFits(
    1624     psDB            *dbh,               ///< Database handle
    1625     const psFits    *fits               ///< psFits object
    1626 );
    1627 
    1628 /** Selects up to limit from the database and returns them in a binary FITS table
    1629  *
    1630  * This function assumes an empty psFits object and will create a FITS table
    1631  * as the first extension.
    1632  *
    1633  *  See psDBSelectRows() for documentation on the format of where.
    1634  *
    1635  * @return true on success
    1636  */
    1637 
    1638 bool telescopeSelectRowsFits(
    1639     psDB            *dbh,               ///< Database handle
    1640     psFits          *fits,              ///< psFits object
    1641     const psMetadata *where,            ///< Row match criteria
    1642     unsigned long long limit            ///< Maximum number of elements to return
    1643 );
    1644 
    1645 /** Convert a telescopeRow into an equivalent psMetadata
    1646  *
    1647  * @return A psMetadata pointer or NULL on error
    1648  */
    1649 
    1650 psMetadata *telescopeMetadataFromObject(
    1651     const telescopeRow *object             ///< fooRow to convert into a psMetadata
    1652 );
    1653 
    1654 /** Convert a psMetadata into an equivalent fooRow
    1655  *
    1656  * @return A telescopeRow pointer or NULL on error
    1657  */
    1658 
    1659 telescopeRow *telescopeObjectFromMetadata(
    1660     psMetadata      *md                 ///< psMetadata to convert into a fooRow
    1661 );
    1662 /** Selects up to limit rows from the database and returns as telescopeRow objects in a psArray
    1663  *
    1664  *  See psDBSelectRows() for documentation on the format of where.
    1665  *
    1666  * @return A psArray pointer or NULL on error
    1667  */
    1668 
    1669 psArray *telescopeSelectRowObjects(
    1670     psDB            *dbh,               ///< Database handle
    1671     const psMetadata *where,            ///< Row match criteria
    1672     unsigned long long limit            ///< Maximum number of elements to return
    1673 );
    1674 /** Deletes a row from the database coresponding to an telescope
    1675  *
    1676  *  Note that a 'where' search psMetadata is constructed from each object and
    1677  *  used to find rows to delete.
    1678  *
    1679  * @return A The number of rows removed or a negative value on error
    1680  */
    1681 
    1682 bool telescopeDeleteObject(
    1683     psDB            *dbh,               ///< Database handle
    1684     const telescopeRow *object    ///< Object to delete
    1685 );
    1686 /** Deletes up to limit rows from the database and returns the number of rows actually deleted.
    1687  *
    1688  *  Note that a 'where' search psMetadata is constructed from each object and
    1689  *  used to find rows to delete.
    1690  *
    1691  * @return A The number of rows removed or a negative value on error
    1692  */
    1693 
    1694 long long telescopeDeleteRowObjects(
    1695     psDB            *dbh,               ///< Database handle
    1696     const psArray   *objects,           ///< Array of objects to delete
    1697     unsigned long long limit            ///< Maximum number of elements to delete
    1698 );
    1699 /** Formats and prints an array of telescopeRow objects
    1700  *
    1701  * When mdcf is set the formated output is in psMetadataConfig
    1702  * format, otherwise it is in a simple tabular format.
    1703  *
    1704  * @return true on success
    1705  */
    1706 
    1707 bool telescopePrintObjects(
    1708     FILE            *stream,            ///< a stream
    1709     psArray         *objects,           ///< An array of telescopeRow objects
    1710     bool            mdcf                ///< format as mdconfig or simple
    1711 );
    1712127/** summitExpRow data structure
    1713128 *
     
    27131128    psF64           posang;
    27141129    char            *object;
     1130    psTime*         dateobs;
    27151131} rawDetrendExpRow;
    27161132
     
    27381154    psF32           ccd_temp,
    27391155    psF64           posang,
    2740     const char      *object
     1156    const char      *object,
     1157    psTime*         dateobs
    27411158);
    27421159
     
    27851202    psF32           ccd_temp,
    27861203    psF64           posang,
    2787     const char      *object
     1204    const char      *object,
     1205    psTime*         dateobs
    27881206);
    27891207
     
    29461364    psF64           posang;
    29471365    char            *object;
     1366    psTime*         dateobs;
    29481367} rawScienceExpRow;
    29491368
     
    29711390    psF32           ccd_temp,
    29721391    psF64           posang,
    2973     const char      *object
     1392    const char      *object,
     1393    psTime*         dateobs
    29741394);
    29751395
     
    30181438    psF32           ccd_temp,
    30191439    psF64           posang,
    3020     const char      *object
     1440    const char      *object,
     1441    psTime*         dateobs
    30211442);
    30221443
     
    31791600    psF64           posang;
    31801601    char            *object;
     1602    psTime*         dateobs;
    31811603} rawImfileRow;
    31821604
     
    32041626    psF32           ccd_temp,
    32051627    psF64           posang,
    3206     const char      *object
     1628    const char      *object,
     1629    psTime*         dateobs
    32071630);
    32081631
     
    32511674    psF32           ccd_temp,
    32521675    psF64           posang,
    3253     const char      *object
     1676    const char      *object,
     1677    psTime*         dateobs
    32541678);
    32551679
  • trunk/ippdb/tests/alloc.c

    r9423 r9684  
    99{
    1010    {
    11         weatherRow      *object;
    12 
    13         object = weatherRowAlloc(32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32    );
    14 
    15         if (!object) {
    16             exit(EXIT_FAILURE);
    17         }
    18 
    19         if (!object->temp01 == 32.32) {
    20             psFree(object);
    21             exit(EXIT_FAILURE);
    22         }
    23         if (!object->humi01 == 32.32) {
    24             psFree(object);
    25             exit(EXIT_FAILURE);
    26         }
    27         if (!object->temp02 == 32.32) {
    28             psFree(object);
    29             exit(EXIT_FAILURE);
    30         }
    31         if (!object->humi02 == 32.32) {
    32             psFree(object);
    33             exit(EXIT_FAILURE);
    34         }
    35         if (!object->temp03 == 32.32) {
    36             psFree(object);
    37             exit(EXIT_FAILURE);
    38         }
    39         if (!object->humi03 == 32.32) {
    40             psFree(object);
    41             exit(EXIT_FAILURE);
    42         }
    43         if (!object->pressure == 32.32) {
    44             psFree(object);
    45             exit(EXIT_FAILURE);
    46         }
    47 
    48         psFree(object);
    49     }
    50 
    51     {
    52         skyp_transparencyRow *object;
    53 
    54         object = skyp_transparencyRowAlloc("a string", 64.64, -32, 64.64, 64.64, 32.32, 64.64    );
    55 
    56         if (!object) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
     11        summitExpRow    *object;
     12
     13        object = summitExpRowAlloc("a string", "a string", "a string", "a string", "a string"    );
     14
     15        if (!object) {
     16            exit(EXIT_FAILURE);
     17        }
     18
     19        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     20            psFree(object);
     21            exit(EXIT_FAILURE);
     22        }
     23        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     24            psFree(object);
     25            exit(EXIT_FAILURE);
     26        }
     27        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     28            psFree(object);
     29            exit(EXIT_FAILURE);
     30        }
     31        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     32            psFree(object);
     33            exit(EXIT_FAILURE);
     34        }
     35        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     36            psFree(object);
     37            exit(EXIT_FAILURE);
     38        }
     39
     40        psFree(object);
     41    }
     42
     43    {
     44        pzPendingExpRow *object;
     45
     46        object = pzPendingExpRowAlloc("a string", "a string", "a string", "a string", -32    );
     47
     48        if (!object) {
     49            exit(EXIT_FAILURE);
     50        }
     51
     52        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     53            psFree(object);
     54            exit(EXIT_FAILURE);
     55        }
     56        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     57            psFree(object);
     58            exit(EXIT_FAILURE);
     59        }
     60        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     61            psFree(object);
     62            exit(EXIT_FAILURE);
     63        }
     64        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     65            psFree(object);
     66            exit(EXIT_FAILURE);
     67        }
     68        if (!object->imfiles == -32) {
     69            psFree(object);
     70            exit(EXIT_FAILURE);
     71        }
     72
     73        psFree(object);
     74    }
     75
     76    {
     77        pzPendingImfileRow *object;
     78
     79        object = pzPendingImfileRowAlloc("a string", "a string", "a string", -32, "a string", "a string", "a string", "a string"    );
     80
     81        if (!object) {
     82            exit(EXIT_FAILURE);
     83        }
     84
     85        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     86            psFree(object);
     87            exit(EXIT_FAILURE);
     88        }
     89        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     90            psFree(object);
     91            exit(EXIT_FAILURE);
     92        }
     93        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     94            psFree(object);
     95            exit(EXIT_FAILURE);
     96        }
     97        if (!object->bytes == -32) {
     98            psFree(object);
     99            exit(EXIT_FAILURE);
     100        }
     101        if (strncmp(object->md5sum, "a string", MAX_STRING_LENGTH)) {
     102            psFree(object);
     103            exit(EXIT_FAILURE);
     104        }
     105        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     106            psFree(object);
     107            exit(EXIT_FAILURE);
     108        }
     109        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     110            psFree(object);
     111            exit(EXIT_FAILURE);
     112        }
     113        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     114            psFree(object);
     115            exit(EXIT_FAILURE);
     116        }
     117
     118        psFree(object);
     119    }
     120
     121    {
     122        newExpRow       *object;
     123
     124        object = newExpRowAlloc("a string", "a string", "a string", "a string", "a string", -32    );
     125
     126        if (!object) {
     127            exit(EXIT_FAILURE);
     128        }
     129
     130        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     131            psFree(object);
     132            exit(EXIT_FAILURE);
     133        }
     134        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     135            psFree(object);
     136            exit(EXIT_FAILURE);
     137        }
     138        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     139            psFree(object);
     140            exit(EXIT_FAILURE);
     141        }
     142        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     143            psFree(object);
     144            exit(EXIT_FAILURE);
     145        }
     146        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     147            psFree(object);
     148            exit(EXIT_FAILURE);
     149        }
     150        if (!object->imfiles == -32) {
     151            psFree(object);
     152            exit(EXIT_FAILURE);
     153        }
     154
     155        psFree(object);
     156    }
     157
     158    {
     159        newImfileRow    *object;
     160
     161        object = newImfileRowAlloc("a string", "a string", "a string", "a string"    );
     162
     163        if (!object) {
     164            exit(EXIT_FAILURE);
     165        }
     166
     167        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     168            psFree(object);
     169            exit(EXIT_FAILURE);
     170        }
     171        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     172            psFree(object);
     173            exit(EXIT_FAILURE);
     174        }
     175        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     176            psFree(object);
     177            exit(EXIT_FAILURE);
     178        }
     179        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     180            psFree(object);
     181            exit(EXIT_FAILURE);
     182        }
     183
     184        psFree(object);
     185    }
     186
     187    {
     188        rawDetrendExpRow *object;
     189
     190        object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z"    );
     191
     192        if (!object) {
     193            exit(EXIT_FAILURE);
     194        }
     195
     196        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     197            psFree(object);
     198            exit(EXIT_FAILURE);
     199        }
     200        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     201            psFree(object);
     202            exit(EXIT_FAILURE);
     203        }
     204        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     205            psFree(object);
     206            exit(EXIT_FAILURE);
     207        }
     208        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     209            psFree(object);
     210            exit(EXIT_FAILURE);
     211        }
     212        if (!object->imfiles == -32) {
     213            psFree(object);
     214            exit(EXIT_FAILURE);
     215        }
    60216        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    61217            psFree(object);
    62218            exit(EXIT_FAILURE);
    63219        }
    64         if (!object->trans == 64.64) {
    65             psFree(object);
    66             exit(EXIT_FAILURE);
    67         }
    68         if (!object->nstars == -32) {
     220        if (!object->airmass == 32.32) {
    69221            psFree(object);
    70222            exit(EXIT_FAILURE);
     
    78230            exit(EXIT_FAILURE);
    79231        }
    80         if (!object->exptime == 32.32) {
    81             psFree(object);
    82             exit(EXIT_FAILURE);
    83         }
    84         if (!object->sky_bright == 64.64) {
    85             psFree(object);
    86             exit(EXIT_FAILURE);
    87         }
    88 
    89         psFree(object);
    90     }
    91 
    92     {
    93         skyp_absorptionRow *object;
    94 
    95         object = skyp_absorptionRowAlloc("a string", 32.32, 32.32, 32.32, -32, 64.64, 64.64, 32.32, 64.64    );
    96 
    97         if (!object) {
    98             exit(EXIT_FAILURE);
    99         }
    100 
    101         if (strncmp(object->disperser_id, "a string", MAX_STRING_LENGTH)) {
    102             psFree(object);
    103             exit(EXIT_FAILURE);
    104         }
    105         if (!object->atmcomp1 == 32.32) {
    106             psFree(object);
    107             exit(EXIT_FAILURE);
    108         }
    109         if (!object->atmcomp2 == 32.32) {
    110             psFree(object);
    111             exit(EXIT_FAILURE);
    112         }
    113         if (!object->atmcomp3 == 32.32) {
    114             psFree(object);
    115             exit(EXIT_FAILURE);
    116         }
    117         if (!object->nstars == -32) {
     232        if (!object->exp_time == 32.32) {
     233            psFree(object);
     234            exit(EXIT_FAILURE);
     235        }
     236        if (!object->bg == 64.64) {
     237            psFree(object);
     238            exit(EXIT_FAILURE);
     239        }
     240        if (!object->bg_stdev == 64.64) {
     241            psFree(object);
     242            exit(EXIT_FAILURE);
     243        }
     244        if (!object->bg_mean_stdev == 64.64) {
     245            psFree(object);
     246            exit(EXIT_FAILURE);
     247        }
     248        if (!object->alt == 64.64) {
     249            psFree(object);
     250            exit(EXIT_FAILURE);
     251        }
     252        if (!object->az == 64.64) {
     253            psFree(object);
     254            exit(EXIT_FAILURE);
     255        }
     256        if (!object->ccd_temp == 32.32) {
     257            psFree(object);
     258            exit(EXIT_FAILURE);
     259        }
     260        if (!object->posang == 64.64) {
     261            psFree(object);
     262            exit(EXIT_FAILURE);
     263        }
     264        if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
     265            psFree(object);
     266            exit(EXIT_FAILURE);
     267        }
     268            psFree(object);
     269            exit(EXIT_FAILURE);
     270        }
     271
     272        psFree(object);
     273    }
     274
     275    {
     276        rawScienceExpRow *object;
     277
     278        object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z"    );
     279
     280        if (!object) {
     281            exit(EXIT_FAILURE);
     282        }
     283
     284        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     285            psFree(object);
     286            exit(EXIT_FAILURE);
     287        }
     288        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     289            psFree(object);
     290            exit(EXIT_FAILURE);
     291        }
     292        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     293            psFree(object);
     294            exit(EXIT_FAILURE);
     295        }
     296        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     297            psFree(object);
     298            exit(EXIT_FAILURE);
     299        }
     300        if (!object->imfiles == -32) {
     301            psFree(object);
     302            exit(EXIT_FAILURE);
     303        }
     304        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
     305            psFree(object);
     306            exit(EXIT_FAILURE);
     307        }
     308        if (!object->airmass == 32.32) {
    118309            psFree(object);
    119310            exit(EXIT_FAILURE);
     
    127318            exit(EXIT_FAILURE);
    128319        }
    129         if (!object->exptime == 32.32) {
    130             psFree(object);
    131             exit(EXIT_FAILURE);
    132         }
    133         if (!object->sky_bright == 64.64) {
    134             psFree(object);
    135             exit(EXIT_FAILURE);
    136         }
    137 
    138         psFree(object);
    139     }
    140 
    141     {
    142         skyp_emissionRow *object;
    143 
    144         object = skyp_emissionRowAlloc("a string", 32.32, 32.32, 32.32, 32.32, 32.32    );
    145 
    146         if (!object) {
    147             exit(EXIT_FAILURE);
    148         }
    149 
    150         if (strncmp(object->disperser_id, "a string", MAX_STRING_LENGTH)) {
    151             psFree(object);
    152             exit(EXIT_FAILURE);
    153         }
    154         if (!object->atmcomp1 == 32.32) {
    155             psFree(object);
    156             exit(EXIT_FAILURE);
    157         }
    158         if (!object->atmcomp2 == 32.32) {
    159             psFree(object);
    160             exit(EXIT_FAILURE);
    161         }
    162         if (!object->atmcomp3 == 32.32) {
    163             psFree(object);
    164             exit(EXIT_FAILURE);
    165         }
    166         if (!object->continuum == 32.32) {
    167             psFree(object);
    168             exit(EXIT_FAILURE);
    169         }
    170         if (!object->exptime == 32.32) {
    171             psFree(object);
    172             exit(EXIT_FAILURE);
    173         }
    174 
    175         psFree(object);
    176     }
    177 
    178     {
    179         dimmRow         *object;
    180 
    181         object = dimmRowAlloc(32.32, 32.32, 32.32, 64.64, 64.64, 32.32, "a string"    );
    182 
    183         if (!object) {
    184             exit(EXIT_FAILURE);
    185         }
    186 
    187         if (!object->sigmax == 32.32) {
    188             psFree(object);
    189             exit(EXIT_FAILURE);
    190         }
    191         if (!object->sigmay == 32.32) {
    192             psFree(object);
    193             exit(EXIT_FAILURE);
    194         }
    195         if (!object->fwhm == 32.32) {
     320        if (!object->exp_time == 32.32) {
     321            psFree(object);
     322            exit(EXIT_FAILURE);
     323        }
     324        if (!object->bg == 64.64) {
     325            psFree(object);
     326            exit(EXIT_FAILURE);
     327        }
     328        if (!object->bg_stdev == 64.64) {
     329            psFree(object);
     330            exit(EXIT_FAILURE);
     331        }
     332        if (!object->bg_mean_stdev == 64.64) {
     333            psFree(object);
     334            exit(EXIT_FAILURE);
     335        }
     336        if (!object->alt == 64.64) {
     337            psFree(object);
     338            exit(EXIT_FAILURE);
     339        }
     340        if (!object->az == 64.64) {
     341            psFree(object);
     342            exit(EXIT_FAILURE);
     343        }
     344        if (!object->ccd_temp == 32.32) {
     345            psFree(object);
     346            exit(EXIT_FAILURE);
     347        }
     348        if (!object->posang == 64.64) {
     349            psFree(object);
     350            exit(EXIT_FAILURE);
     351        }
     352        if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
     353            psFree(object);
     354            exit(EXIT_FAILURE);
     355        }
     356            psFree(object);
     357            exit(EXIT_FAILURE);
     358        }
     359
     360        psFree(object);
     361    }
     362
     363    {
     364        rawImfileRow    *object;
     365
     366        object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z"    );
     367
     368        if (!object) {
     369            exit(EXIT_FAILURE);
     370        }
     371
     372        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     373            psFree(object);
     374            exit(EXIT_FAILURE);
     375        }
     376        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     377            psFree(object);
     378            exit(EXIT_FAILURE);
     379        }
     380        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     381            psFree(object);
     382            exit(EXIT_FAILURE);
     383        }
     384        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     385            psFree(object);
     386            exit(EXIT_FAILURE);
     387        }
     388        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     389            psFree(object);
     390            exit(EXIT_FAILURE);
     391        }
     392        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
     393            psFree(object);
     394            exit(EXIT_FAILURE);
     395        }
     396        if (!object->airmass == 32.32) {
    196397            psFree(object);
    197398            exit(EXIT_FAILURE);
     
    205406            exit(EXIT_FAILURE);
    206407        }
    207         if (!object->expttime == 32.32) {
    208             psFree(object);
    209             exit(EXIT_FAILURE);
    210         }
    211         if (strncmp(object->telescope_id, "a string", MAX_STRING_LENGTH)) {
    212             psFree(object);
    213             exit(EXIT_FAILURE);
    214         }
    215 
    216         psFree(object);
    217     }
    218 
    219     {
    220         skyp_irRow      *object;
    221 
    222         object = skyp_irRowAlloc(64.64, 64.64, 64.64, 64.64, 32.32, 32.32    );
    223 
    224         if (!object) {
    225             exit(EXIT_FAILURE);
    226         }
    227 
    228         if (!object->sky_bright == 64.64) {
    229             psFree(object);
    230             exit(EXIT_FAILURE);
    231         }
    232         if (!object->sky_var == 64.64) {
    233             psFree(object);
    234             exit(EXIT_FAILURE);
    235         }
    236         if (!object->ra == 64.64) {
    237             psFree(object);
    238             exit(EXIT_FAILURE);
    239         }
    240         if (!object->decl == 64.64) {
    241             psFree(object);
    242             exit(EXIT_FAILURE);
    243         }
    244         if (!object->fov_x == 32.32) {
    245             psFree(object);
    246             exit(EXIT_FAILURE);
    247         }
    248         if (!object->fov_y == 32.32) {
    249             psFree(object);
    250             exit(EXIT_FAILURE);
    251         }
    252 
    253         psFree(object);
    254     }
    255 
    256     {
    257         domeRow         *object;
    258 
    259         object = domeRowAlloc(32.32, true, true, true    );
    260 
    261         if (!object) {
    262             exit(EXIT_FAILURE);
    263         }
    264 
    265         if (!object->az == 32.32) {
    266             psFree(object);
    267             exit(EXIT_FAILURE);
    268         }
    269         if (!object->open == true) {
    270             psFree(object);
    271             exit(EXIT_FAILURE);
    272         }
    273         if (!object->light == true) {
    274             psFree(object);
    275             exit(EXIT_FAILURE);
    276         }
    277         if (!object->track == true) {
    278             psFree(object);
    279             exit(EXIT_FAILURE);
    280         }
    281 
    282         psFree(object);
    283     }
    284 
    285     {
    286         telescopeRow    *object;
    287 
    288         object = telescopeRowAlloc("a string", 32.32, 32.32, 64.64, 64.64    );
    289 
    290         if (!object) {
    291             exit(EXIT_FAILURE);
    292         }
    293 
    294         if (strncmp(object->guide, "a string", MAX_STRING_LENGTH)) {
    295             psFree(object);
    296             exit(EXIT_FAILURE);
    297         }
    298         if (!object->alt == 32.32) {
    299             psFree(object);
    300             exit(EXIT_FAILURE);
    301         }
    302         if (!object->az == 32.32) {
    303             psFree(object);
    304             exit(EXIT_FAILURE);
    305         }
    306         if (!object->ra == 64.64) {
    307             psFree(object);
    308             exit(EXIT_FAILURE);
    309         }
    310         if (!object->decl == 64.64) {
    311             psFree(object);
    312             exit(EXIT_FAILURE);
    313         }
    314 
    315         psFree(object);
    316     }
    317 
    318     {
    319         summitExpRow    *object;
    320 
    321         object = summitExpRowAlloc("a string", "a string", "a string", "a string", "a string"    );
    322 
    323         if (!object) {
    324             exit(EXIT_FAILURE);
    325         }
    326 
    327         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    328             psFree(object);
    329             exit(EXIT_FAILURE);
    330         }
    331         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    332             psFree(object);
    333             exit(EXIT_FAILURE);
    334         }
    335         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    336             psFree(object);
    337             exit(EXIT_FAILURE);
    338         }
    339         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    340             psFree(object);
    341             exit(EXIT_FAILURE);
    342         }
    343         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    344             psFree(object);
    345             exit(EXIT_FAILURE);
    346         }
    347 
    348         psFree(object);
    349     }
    350 
    351     {
    352         pzPendingExpRow *object;
    353 
    354         object = pzPendingExpRowAlloc("a string", "a string", "a string", "a string", -32    );
    355 
    356         if (!object) {
    357             exit(EXIT_FAILURE);
    358         }
    359 
    360         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    361             psFree(object);
    362             exit(EXIT_FAILURE);
    363         }
    364         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    365             psFree(object);
    366             exit(EXIT_FAILURE);
    367         }
    368         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    369             psFree(object);
    370             exit(EXIT_FAILURE);
    371         }
    372         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    373             psFree(object);
    374             exit(EXIT_FAILURE);
    375         }
    376         if (!object->imfiles == -32) {
    377             psFree(object);
    378             exit(EXIT_FAILURE);
    379         }
    380 
    381         psFree(object);
    382     }
    383 
    384     {
    385         pzPendingImfileRow *object;
    386 
    387         object = pzPendingImfileRowAlloc("a string", "a string", "a string", -32, "a string", "a string", "a string", "a string"    );
    388 
    389         if (!object) {
    390             exit(EXIT_FAILURE);
    391         }
    392 
    393         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    394             psFree(object);
    395             exit(EXIT_FAILURE);
    396         }
    397         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    398             psFree(object);
    399             exit(EXIT_FAILURE);
    400         }
    401         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    402             psFree(object);
    403             exit(EXIT_FAILURE);
    404         }
    405         if (!object->bytes == -32) {
    406             psFree(object);
    407             exit(EXIT_FAILURE);
    408         }
    409         if (strncmp(object->md5sum, "a string", MAX_STRING_LENGTH)) {
    410             psFree(object);
    411             exit(EXIT_FAILURE);
    412         }
    413         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    414             psFree(object);
    415             exit(EXIT_FAILURE);
    416         }
    417         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    418             psFree(object);
    419             exit(EXIT_FAILURE);
    420         }
    421         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    422             psFree(object);
    423             exit(EXIT_FAILURE);
    424         }
    425 
    426         psFree(object);
    427     }
    428 
    429     {
    430         newExpRow       *object;
    431 
    432         object = newExpRowAlloc("a string", "a string", "a string", "a string", "a string", -32    );
    433 
    434         if (!object) {
    435             exit(EXIT_FAILURE);
    436         }
    437 
    438         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    439             psFree(object);
    440             exit(EXIT_FAILURE);
    441         }
    442         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    443             psFree(object);
    444             exit(EXIT_FAILURE);
    445         }
    446         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    447             psFree(object);
    448             exit(EXIT_FAILURE);
    449         }
    450         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    451             psFree(object);
    452             exit(EXIT_FAILURE);
    453         }
    454         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    455             psFree(object);
    456             exit(EXIT_FAILURE);
    457         }
    458         if (!object->imfiles == -32) {
    459             psFree(object);
    460             exit(EXIT_FAILURE);
    461         }
    462 
    463         psFree(object);
    464     }
    465 
    466     {
    467         newImfileRow    *object;
    468 
    469         object = newImfileRowAlloc("a string", "a string", "a string", "a string"    );
    470 
    471         if (!object) {
    472             exit(EXIT_FAILURE);
    473         }
    474 
    475         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    476             psFree(object);
    477             exit(EXIT_FAILURE);
    478         }
    479         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    480             psFree(object);
    481             exit(EXIT_FAILURE);
    482         }
    483         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    484             psFree(object);
    485             exit(EXIT_FAILURE);
    486         }
    487         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    488             psFree(object);
    489             exit(EXIT_FAILURE);
    490         }
    491 
    492         psFree(object);
    493     }
    494 
    495     {
    496         rawDetrendExpRow *object;
    497 
    498         object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string"    );
    499 
    500         if (!object) {
    501             exit(EXIT_FAILURE);
    502         }
    503 
    504         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    505             psFree(object);
    506             exit(EXIT_FAILURE);
    507         }
    508         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    509             psFree(object);
    510             exit(EXIT_FAILURE);
    511         }
    512         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    513             psFree(object);
    514             exit(EXIT_FAILURE);
    515         }
    516         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    517             psFree(object);
    518             exit(EXIT_FAILURE);
    519         }
    520         if (!object->imfiles == -32) {
    521             psFree(object);
    522             exit(EXIT_FAILURE);
    523         }
    524         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    525             psFree(object);
    526             exit(EXIT_FAILURE);
    527         }
    528         if (!object->airmass == 32.32) {
    529             psFree(object);
    530             exit(EXIT_FAILURE);
    531         }
    532         if (!object->ra == 64.64) {
    533             psFree(object);
    534             exit(EXIT_FAILURE);
    535         }
    536         if (!object->decl == 64.64) {
    537             psFree(object);
    538             exit(EXIT_FAILURE);
    539         }
    540408        if (!object->exp_time == 32.32) {
    541409            psFree(object);
     
    574442            exit(EXIT_FAILURE);
    575443        }
    576 
    577         psFree(object);
    578     }
    579 
    580     {
    581         rawScienceExpRow *object;
    582 
    583         object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string"    );
    584 
    585         if (!object) {
    586             exit(EXIT_FAILURE);
    587         }
    588 
    589         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    590             psFree(object);
    591             exit(EXIT_FAILURE);
    592         }
    593         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    594             psFree(object);
    595             exit(EXIT_FAILURE);
    596         }
    597         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    598             psFree(object);
    599             exit(EXIT_FAILURE);
    600         }
    601         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    602             psFree(object);
    603             exit(EXIT_FAILURE);
    604         }
    605         if (!object->imfiles == -32) {
    606             psFree(object);
    607             exit(EXIT_FAILURE);
    608         }
    609         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    610             psFree(object);
    611             exit(EXIT_FAILURE);
    612         }
    613         if (!object->airmass == 32.32) {
    614             psFree(object);
    615             exit(EXIT_FAILURE);
    616         }
    617         if (!object->ra == 64.64) {
    618             psFree(object);
    619             exit(EXIT_FAILURE);
    620         }
    621         if (!object->decl == 64.64) {
    622             psFree(object);
    623             exit(EXIT_FAILURE);
    624         }
    625         if (!object->exp_time == 32.32) {
    626             psFree(object);
    627             exit(EXIT_FAILURE);
    628         }
    629         if (!object->bg == 64.64) {
    630             psFree(object);
    631             exit(EXIT_FAILURE);
    632         }
    633         if (!object->bg_stdev == 64.64) {
    634             psFree(object);
    635             exit(EXIT_FAILURE);
    636         }
    637         if (!object->bg_mean_stdev == 64.64) {
    638             psFree(object);
    639             exit(EXIT_FAILURE);
    640         }
    641         if (!object->alt == 64.64) {
    642             psFree(object);
    643             exit(EXIT_FAILURE);
    644         }
    645         if (!object->az == 64.64) {
    646             psFree(object);
    647             exit(EXIT_FAILURE);
    648         }
    649         if (!object->ccd_temp == 32.32) {
    650             psFree(object);
    651             exit(EXIT_FAILURE);
    652         }
    653         if (!object->posang == 64.64) {
    654             psFree(object);
    655             exit(EXIT_FAILURE);
    656         }
    657         if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
    658             psFree(object);
    659             exit(EXIT_FAILURE);
    660         }
    661 
    662         psFree(object);
    663     }
    664 
    665     {
    666         rawImfileRow    *object;
    667 
    668         object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string"    );
    669 
    670         if (!object) {
    671             exit(EXIT_FAILURE);
    672         }
    673 
    674         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    675             psFree(object);
    676             exit(EXIT_FAILURE);
    677         }
    678         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    679             psFree(object);
    680             exit(EXIT_FAILURE);
    681         }
    682         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    683             psFree(object);
    684             exit(EXIT_FAILURE);
    685         }
    686         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    687             psFree(object);
    688             exit(EXIT_FAILURE);
    689         }
    690         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    691             psFree(object);
    692             exit(EXIT_FAILURE);
    693         }
    694         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    695             psFree(object);
    696             exit(EXIT_FAILURE);
    697         }
    698         if (!object->airmass == 32.32) {
    699             psFree(object);
    700             exit(EXIT_FAILURE);
    701         }
    702         if (!object->ra == 64.64) {
    703             psFree(object);
    704             exit(EXIT_FAILURE);
    705         }
    706         if (!object->decl == 64.64) {
    707             psFree(object);
    708             exit(EXIT_FAILURE);
    709         }
    710         if (!object->exp_time == 32.32) {
    711             psFree(object);
    712             exit(EXIT_FAILURE);
    713         }
    714         if (!object->bg == 64.64) {
    715             psFree(object);
    716             exit(EXIT_FAILURE);
    717         }
    718         if (!object->bg_stdev == 64.64) {
    719             psFree(object);
    720             exit(EXIT_FAILURE);
    721         }
    722         if (!object->bg_mean_stdev == 64.64) {
    723             psFree(object);
    724             exit(EXIT_FAILURE);
    725         }
    726         if (!object->alt == 64.64) {
    727             psFree(object);
    728             exit(EXIT_FAILURE);
    729         }
    730         if (!object->az == 64.64) {
    731             psFree(object);
    732             exit(EXIT_FAILURE);
    733         }
    734         if (!object->ccd_temp == 32.32) {
    735             psFree(object);
    736             exit(EXIT_FAILURE);
    737         }
    738         if (!object->posang == 64.64) {
    739             psFree(object);
    740             exit(EXIT_FAILURE);
    741         }
    742         if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
    743444            psFree(object);
    744445            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/createtable.c

    r9301 r9684  
    1313        }
    1414
    15         if(!weatherCreateTable(dbh)) {
    16             exit(EXIT_FAILURE);
    17         }
    18 
    19         psDBCleanup(dbh);
    20     }
    21 
    22     {
    23         psDB            *dbh;
    24 
    25         dbh = psDBInit("localhost", "test", NULL, "test");
    26         if (!dbh) {
    27             exit(EXIT_FAILURE);
    28         }
    29 
    30         if(!skyp_transparencyCreateTable(dbh)) {
    31             exit(EXIT_FAILURE);
    32         }
    33 
    34         psDBCleanup(dbh);
    35     }
    36 
    37     {
    38         psDB            *dbh;
    39 
    40         dbh = psDBInit("localhost", "test", NULL, "test");
    41         if (!dbh) {
    42             exit(EXIT_FAILURE);
    43         }
    44 
    45         if(!skyp_absorptionCreateTable(dbh)) {
    46             exit(EXIT_FAILURE);
    47         }
    48 
    49         psDBCleanup(dbh);
    50     }
    51 
    52     {
    53         psDB            *dbh;
    54 
    55         dbh = psDBInit("localhost", "test", NULL, "test");
    56         if (!dbh) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
    60         if(!skyp_emissionCreateTable(dbh)) {
    61             exit(EXIT_FAILURE);
    62         }
    63 
    64         psDBCleanup(dbh);
    65     }
    66 
    67     {
    68         psDB            *dbh;
    69 
    70         dbh = psDBInit("localhost", "test", NULL, "test");
    71         if (!dbh) {
    72             exit(EXIT_FAILURE);
    73         }
    74 
    75         if(!dimmCreateTable(dbh)) {
    76             exit(EXIT_FAILURE);
    77         }
    78 
    79         psDBCleanup(dbh);
    80     }
    81 
    82     {
    83         psDB            *dbh;
    84 
    85         dbh = psDBInit("localhost", "test", NULL, "test");
    86         if (!dbh) {
    87             exit(EXIT_FAILURE);
    88         }
    89 
    90         if(!skyp_irCreateTable(dbh)) {
    91             exit(EXIT_FAILURE);
    92         }
    93 
    94         psDBCleanup(dbh);
    95     }
    96 
    97     {
    98         psDB            *dbh;
    99 
    100         dbh = psDBInit("localhost", "test", NULL, "test");
    101         if (!dbh) {
    102             exit(EXIT_FAILURE);
    103         }
    104 
    105         if(!domeCreateTable(dbh)) {
    106             exit(EXIT_FAILURE);
    107         }
    108 
    109         psDBCleanup(dbh);
    110     }
    111 
    112     {
    113         psDB            *dbh;
    114 
    115         dbh = psDBInit("localhost", "test", NULL, "test");
    116         if (!dbh) {
    117             exit(EXIT_FAILURE);
    118         }
    119 
    120         if(!telescopeCreateTable(dbh)) {
    121             exit(EXIT_FAILURE);
    122         }
    123 
    124         psDBCleanup(dbh);
    125     }
    126 
    127     {
    128         psDB            *dbh;
    129 
    130         dbh = psDBInit("localhost", "test", NULL, "test");
    131         if (!dbh) {
    132             exit(EXIT_FAILURE);
    133         }
    134 
    13515        if(!summitExpCreateTable(dbh)) {
    13616            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/dbcleanup.c

    r9301 r9684  
    1111    }
    1212
    13     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS weather");
    14     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_transparency");
    15     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_absorption");
    16     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_emission");
    17     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS dimm");
    18     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_ir");
    19     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS dome");
    20     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS telescope");
    2113    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS summitExp");
    2214    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS pzPendingExp");
  • trunk/ippdb/tests/dbsetup.c

    r9301 r9684  
    1313
    1414    // remove the table if it already exists
    15     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS weather");
    16     weatherCreateTable(dbh);
    17 
    18     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_transparency");
    19     skyp_transparencyCreateTable(dbh);
    20 
    21     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_absorption");
    22     skyp_absorptionCreateTable(dbh);
    23 
    24     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_emission");
    25     skyp_emissionCreateTable(dbh);
    26 
    27     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS dimm");
    28     dimmCreateTable(dbh);
    29 
    30     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS skyp_ir");
    31     skyp_irCreateTable(dbh);
    32 
    33     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS dome");
    34     domeCreateTable(dbh);
    35 
    36     p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS telescope");
    37     telescopeCreateTable(dbh);
    38 
    3915    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS summitExp");
    4016    summitExpCreateTable(dbh);
  • trunk/ippdb/tests/droptable.c

    r9301 r9684  
    1313        }
    1414
    15         if (!weatherDropTable(dbh)) {
    16             exit(EXIT_FAILURE);
    17         }
    18 
    19         psDBCleanup(dbh);
    20     }
    21 
    22     {
    23         psDB            *dbh;
    24 
    25         dbh = psDBInit("localhost", "test", NULL, "test");
    26         if (!dbh) {
    27             exit(EXIT_FAILURE);
    28         }
    29 
    30         if (!skyp_transparencyDropTable(dbh)) {
    31             exit(EXIT_FAILURE);
    32         }
    33 
    34         psDBCleanup(dbh);
    35     }
    36 
    37     {
    38         psDB            *dbh;
    39 
    40         dbh = psDBInit("localhost", "test", NULL, "test");
    41         if (!dbh) {
    42             exit(EXIT_FAILURE);
    43         }
    44 
    45         if (!skyp_absorptionDropTable(dbh)) {
    46             exit(EXIT_FAILURE);
    47         }
    48 
    49         psDBCleanup(dbh);
    50     }
    51 
    52     {
    53         psDB            *dbh;
    54 
    55         dbh = psDBInit("localhost", "test", NULL, "test");
    56         if (!dbh) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
    60         if (!skyp_emissionDropTable(dbh)) {
    61             exit(EXIT_FAILURE);
    62         }
    63 
    64         psDBCleanup(dbh);
    65     }
    66 
    67     {
    68         psDB            *dbh;
    69 
    70         dbh = psDBInit("localhost", "test", NULL, "test");
    71         if (!dbh) {
    72             exit(EXIT_FAILURE);
    73         }
    74 
    75         if (!dimmDropTable(dbh)) {
    76             exit(EXIT_FAILURE);
    77         }
    78 
    79         psDBCleanup(dbh);
    80     }
    81 
    82     {
    83         psDB            *dbh;
    84 
    85         dbh = psDBInit("localhost", "test", NULL, "test");
    86         if (!dbh) {
    87             exit(EXIT_FAILURE);
    88         }
    89 
    90         if (!skyp_irDropTable(dbh)) {
    91             exit(EXIT_FAILURE);
    92         }
    93 
    94         psDBCleanup(dbh);
    95     }
    96 
    97     {
    98         psDB            *dbh;
    99 
    100         dbh = psDBInit("localhost", "test", NULL, "test");
    101         if (!dbh) {
    102             exit(EXIT_FAILURE);
    103         }
    104 
    105         if (!domeDropTable(dbh)) {
    106             exit(EXIT_FAILURE);
    107         }
    108 
    109         psDBCleanup(dbh);
    110     }
    111 
    112     {
    113         psDB            *dbh;
    114 
    115         dbh = psDBInit("localhost", "test", NULL, "test");
    116         if (!dbh) {
    117             exit(EXIT_FAILURE);
    118         }
    119 
    120         if (!telescopeDropTable(dbh)) {
    121             exit(EXIT_FAILURE);
    122         }
    123 
    124         psDBCleanup(dbh);
    125     }
    126 
    127     {
    128         psDB            *dbh;
    129 
    130         dbh = psDBInit("localhost", "test", NULL, "test");
    131         if (!dbh) {
    132             exit(EXIT_FAILURE);
    133         }
    134 
    13515        if (!summitExpDropTable(dbh)) {
    13616            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/insert.c

    r9423 r9684  
    1313        }
    1414
    15         if (!weatherInsert(dbh, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32)) {
    16             exit(EXIT_FAILURE);
    17         }
    18 
    19         psDBCleanup(dbh);
    20     }
    21 
    22     {
    23         psDB            *dbh;
    24 
    25         dbh = psDBInit("localhost", "test", NULL, "test");
    26         if (!dbh) {
    27             exit(EXIT_FAILURE);
    28         }
    29 
    30         if (!skyp_transparencyInsert(dbh, "a string", 64.64, -32, 64.64, 64.64, 32.32, 64.64)) {
    31             exit(EXIT_FAILURE);
    32         }
    33 
    34         psDBCleanup(dbh);
    35     }
    36 
    37     {
    38         psDB            *dbh;
    39 
    40         dbh = psDBInit("localhost", "test", NULL, "test");
    41         if (!dbh) {
    42             exit(EXIT_FAILURE);
    43         }
    44 
    45         if (!skyp_absorptionInsert(dbh, "a string", 32.32, 32.32, 32.32, -32, 64.64, 64.64, 32.32, 64.64)) {
    46             exit(EXIT_FAILURE);
    47         }
    48 
    49         psDBCleanup(dbh);
    50     }
    51 
    52     {
    53         psDB            *dbh;
    54 
    55         dbh = psDBInit("localhost", "test", NULL, "test");
    56         if (!dbh) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
    60         if (!skyp_emissionInsert(dbh, "a string", 32.32, 32.32, 32.32, 32.32, 32.32)) {
    61             exit(EXIT_FAILURE);
    62         }
    63 
    64         psDBCleanup(dbh);
    65     }
    66 
    67     {
    68         psDB            *dbh;
    69 
    70         dbh = psDBInit("localhost", "test", NULL, "test");
    71         if (!dbh) {
    72             exit(EXIT_FAILURE);
    73         }
    74 
    75         if (!dimmInsert(dbh, 32.32, 32.32, 32.32, 64.64, 64.64, 32.32, "a string")) {
    76             exit(EXIT_FAILURE);
    77         }
    78 
    79         psDBCleanup(dbh);
    80     }
    81 
    82     {
    83         psDB            *dbh;
    84 
    85         dbh = psDBInit("localhost", "test", NULL, "test");
    86         if (!dbh) {
    87             exit(EXIT_FAILURE);
    88         }
    89 
    90         if (!skyp_irInsert(dbh, 64.64, 64.64, 64.64, 64.64, 32.32, 32.32)) {
    91             exit(EXIT_FAILURE);
    92         }
    93 
    94         psDBCleanup(dbh);
    95     }
    96 
    97     {
    98         psDB            *dbh;
    99 
    100         dbh = psDBInit("localhost", "test", NULL, "test");
    101         if (!dbh) {
    102             exit(EXIT_FAILURE);
    103         }
    104 
    105         if (!domeInsert(dbh, 32.32, true, true, true)) {
    106             exit(EXIT_FAILURE);
    107         }
    108 
    109         psDBCleanup(dbh);
    110     }
    111 
    112     {
    113         psDB            *dbh;
    114 
    115         dbh = psDBInit("localhost", "test", NULL, "test");
    116         if (!dbh) {
    117             exit(EXIT_FAILURE);
    118         }
    119 
    120         if (!telescopeInsert(dbh, "a string", 32.32, 32.32, 64.64, 64.64)) {
    121             exit(EXIT_FAILURE);
    122         }
    123 
    124         psDBCleanup(dbh);
    125     }
    126 
    127     {
    128         psDB            *dbh;
    129 
    130         dbh = psDBInit("localhost", "test", NULL, "test");
    131         if (!dbh) {
    132             exit(EXIT_FAILURE);
    133         }
    134 
    13515        if (!summitExpInsert(dbh, "a string", "a string", "a string", "a string", "a string")) {
    13616            exit(EXIT_FAILURE);
     
    20888        }
    20989
    210         if (!rawDetrendExpInsert(dbh, "a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string")) {
    211             exit(EXIT_FAILURE);
    212         }
    213 
    214         psDBCleanup(dbh);
    215     }
    216 
    217     {
    218         psDB            *dbh;
    219 
    220         dbh = psDBInit("localhost", "test", NULL, "test");
    221         if (!dbh) {
    222             exit(EXIT_FAILURE);
    223         }
    224 
    225         if (!rawScienceExpInsert(dbh, "a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string")) {
    226             exit(EXIT_FAILURE);
    227         }
    228 
    229         psDBCleanup(dbh);
    230     }
    231 
    232     {
    233         psDB            *dbh;
    234 
    235         dbh = psDBInit("localhost", "test", NULL, "test");
    236         if (!dbh) {
    237             exit(EXIT_FAILURE);
    238         }
    239 
    240         if (!rawImfileInsert(dbh, "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string")) {
     90        if (!rawDetrendExpInsert(dbh, "a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z")) {
     91            exit(EXIT_FAILURE);
     92        }
     93
     94        psDBCleanup(dbh);
     95    }
     96
     97    {
     98        psDB            *dbh;
     99
     100        dbh = psDBInit("localhost", "test", NULL, "test");
     101        if (!dbh) {
     102            exit(EXIT_FAILURE);
     103        }
     104
     105        if (!rawScienceExpInsert(dbh, "a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z")) {
     106            exit(EXIT_FAILURE);
     107        }
     108
     109        psDBCleanup(dbh);
     110    }
     111
     112    {
     113        psDB            *dbh;
     114
     115        dbh = psDBInit("localhost", "test", NULL, "test");
     116        if (!dbh) {
     117            exit(EXIT_FAILURE);
     118        }
     119
     120        if (!rawImfileInsert(dbh, "a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z")) {
    241121            exit(EXIT_FAILURE);
    242122        }
  • trunk/ippdb/tests/insertfits.c

    r9301 r9684  
    2424        }
    2525
    26         if (!weatherInsertFits(dbh, fits)) {
    27             exit(EXIT_FAILURE);
    28         }
    29 
    30         if (!psFitsClose(fits)) {
    31             exit(EXIT_FAILURE);
    32         }
    33 
    34         psDBCleanup(dbh);
    35     }
    36 
    37     {
    38         psDB            *dbh;
    39         psFits          *fits;
    40 
    41         dbh = psDBInit("localhost", "test", NULL, "test");
    42         if (!dbh) {
    43             exit(EXIT_FAILURE);
    44         }
    45 
    46         // open a temp
    47         fits = psFitsOpen(TMP_FILENAME, "r");
    48         if (!fits) {
    49             exit(EXIT_FAILURE);
    50         }
    51 
    52         if (!skyp_transparencyInsertFits(dbh, fits)) {
    53             exit(EXIT_FAILURE);
    54         }
    55 
    56         if (!psFitsClose(fits)) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
    60         psDBCleanup(dbh);
    61     }
    62 
    63     {
    64         psDB            *dbh;
    65         psFits          *fits;
    66 
    67         dbh = psDBInit("localhost", "test", NULL, "test");
    68         if (!dbh) {
    69             exit(EXIT_FAILURE);
    70         }
    71 
    72         // open a temp
    73         fits = psFitsOpen(TMP_FILENAME, "r");
    74         if (!fits) {
    75             exit(EXIT_FAILURE);
    76         }
    77 
    78         if (!skyp_absorptionInsertFits(dbh, fits)) {
    79             exit(EXIT_FAILURE);
    80         }
    81 
    82         if (!psFitsClose(fits)) {
    83             exit(EXIT_FAILURE);
    84         }
    85 
    86         psDBCleanup(dbh);
    87     }
    88 
    89     {
    90         psDB            *dbh;
    91         psFits          *fits;
    92 
    93         dbh = psDBInit("localhost", "test", NULL, "test");
    94         if (!dbh) {
    95             exit(EXIT_FAILURE);
    96         }
    97 
    98         // open a temp
    99         fits = psFitsOpen(TMP_FILENAME, "r");
    100         if (!fits) {
    101             exit(EXIT_FAILURE);
    102         }
    103 
    104         if (!skyp_emissionInsertFits(dbh, fits)) {
    105             exit(EXIT_FAILURE);
    106         }
    107 
    108         if (!psFitsClose(fits)) {
    109             exit(EXIT_FAILURE);
    110         }
    111 
    112         psDBCleanup(dbh);
    113     }
    114 
    115     {
    116         psDB            *dbh;
    117         psFits          *fits;
    118 
    119         dbh = psDBInit("localhost", "test", NULL, "test");
    120         if (!dbh) {
    121             exit(EXIT_FAILURE);
    122         }
    123 
    124         // open a temp
    125         fits = psFitsOpen(TMP_FILENAME, "r");
    126         if (!fits) {
    127             exit(EXIT_FAILURE);
    128         }
    129 
    130         if (!dimmInsertFits(dbh, fits)) {
    131             exit(EXIT_FAILURE);
    132         }
    133 
    134         if (!psFitsClose(fits)) {
    135             exit(EXIT_FAILURE);
    136         }
    137 
    138         psDBCleanup(dbh);
    139     }
    140 
    141     {
    142         psDB            *dbh;
    143         psFits          *fits;
    144 
    145         dbh = psDBInit("localhost", "test", NULL, "test");
    146         if (!dbh) {
    147             exit(EXIT_FAILURE);
    148         }
    149 
    150         // open a temp
    151         fits = psFitsOpen(TMP_FILENAME, "r");
    152         if (!fits) {
    153             exit(EXIT_FAILURE);
    154         }
    155 
    156         if (!skyp_irInsertFits(dbh, fits)) {
    157             exit(EXIT_FAILURE);
    158         }
    159 
    160         if (!psFitsClose(fits)) {
    161             exit(EXIT_FAILURE);
    162         }
    163 
    164         psDBCleanup(dbh);
    165     }
    166 
    167     {
    168         psDB            *dbh;
    169         psFits          *fits;
    170 
    171         dbh = psDBInit("localhost", "test", NULL, "test");
    172         if (!dbh) {
    173             exit(EXIT_FAILURE);
    174         }
    175 
    176         // open a temp
    177         fits = psFitsOpen(TMP_FILENAME, "r");
    178         if (!fits) {
    179             exit(EXIT_FAILURE);
    180         }
    181 
    182         if (!domeInsertFits(dbh, fits)) {
    183             exit(EXIT_FAILURE);
    184         }
    185 
    186         if (!psFitsClose(fits)) {
    187             exit(EXIT_FAILURE);
    188         }
    189 
    190         psDBCleanup(dbh);
    191     }
    192 
    193     {
    194         psDB            *dbh;
    195         psFits          *fits;
    196 
    197         dbh = psDBInit("localhost", "test", NULL, "test");
    198         if (!dbh) {
    199             exit(EXIT_FAILURE);
    200         }
    201 
    202         // open a temp
    203         fits = psFitsOpen(TMP_FILENAME, "r");
    204         if (!fits) {
    205             exit(EXIT_FAILURE);
    206         }
    207 
    208         if (!telescopeInsertFits(dbh, fits)) {
    209             exit(EXIT_FAILURE);
    210         }
    211 
    212         if (!psFitsClose(fits)) {
    213             exit(EXIT_FAILURE);
    214         }
    215 
    216         psDBCleanup(dbh);
    217     }
    218 
    219     {
    220         psDB            *dbh;
    221         psFits          *fits;
    222 
    223         dbh = psDBInit("localhost", "test", NULL, "test");
    224         if (!dbh) {
    225             exit(EXIT_FAILURE);
    226         }
    227 
    228         // open a temp
    229         fits = psFitsOpen(TMP_FILENAME, "r");
    230         if (!fits) {
    231             exit(EXIT_FAILURE);
    232         }
    233 
    23426        if (!summitExpInsertFits(dbh, fits)) {
    23527            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/insertobject.c

    r9423 r9684  
    77    {
    88        psDB            *dbh;
    9         weatherRow      *object;
    10 
    11         dbh = psDBInit("localhost", "test", NULL, "test");
    12         if (!dbh) {
    13             exit(EXIT_FAILURE);
    14         }
    15 
    16         object = weatherRowAlloc(32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32);
    17         if (!object) {
    18             exit(EXIT_FAILURE);
    19         }
    20 
    21         if (!weatherInsertObject(dbh, object)) {
    22             exit(EXIT_FAILURE);
    23         }
    24 
    25         psFree(object);
    26         psDBCleanup(dbh);
    27     }
    28 
    29     {
    30         psDB            *dbh;
    31         skyp_transparencyRow *object;
    32 
    33         dbh = psDBInit("localhost", "test", NULL, "test");
    34         if (!dbh) {
    35             exit(EXIT_FAILURE);
    36         }
    37 
    38         object = skyp_transparencyRowAlloc("a string", 64.64, -32, 64.64, 64.64, 32.32, 64.64);
    39         if (!object) {
    40             exit(EXIT_FAILURE);
    41         }
    42 
    43         if (!skyp_transparencyInsertObject(dbh, object)) {
    44             exit(EXIT_FAILURE);
    45         }
    46 
    47         psFree(object);
    48         psDBCleanup(dbh);
    49     }
    50 
    51     {
    52         psDB            *dbh;
    53         skyp_absorptionRow *object;
    54 
    55         dbh = psDBInit("localhost", "test", NULL, "test");
    56         if (!dbh) {
    57             exit(EXIT_FAILURE);
    58         }
    59 
    60         object = skyp_absorptionRowAlloc("a string", 32.32, 32.32, 32.32, -32, 64.64, 64.64, 32.32, 64.64);
    61         if (!object) {
    62             exit(EXIT_FAILURE);
    63         }
    64 
    65         if (!skyp_absorptionInsertObject(dbh, object)) {
    66             exit(EXIT_FAILURE);
    67         }
    68 
    69         psFree(object);
    70         psDBCleanup(dbh);
    71     }
    72 
    73     {
    74         psDB            *dbh;
    75         skyp_emissionRow *object;
    76 
    77         dbh = psDBInit("localhost", "test", NULL, "test");
    78         if (!dbh) {
    79             exit(EXIT_FAILURE);
    80         }
    81 
    82         object = skyp_emissionRowAlloc("a string", 32.32, 32.32, 32.32, 32.32, 32.32);
    83         if (!object) {
    84             exit(EXIT_FAILURE);
    85         }
    86 
    87         if (!skyp_emissionInsertObject(dbh, object)) {
    88             exit(EXIT_FAILURE);
    89         }
    90 
    91         psFree(object);
    92         psDBCleanup(dbh);
    93     }
    94 
    95     {
    96         psDB            *dbh;
    97         dimmRow         *object;
    98 
    99         dbh = psDBInit("localhost", "test", NULL, "test");
    100         if (!dbh) {
    101             exit(EXIT_FAILURE);
    102         }
    103 
    104         object = dimmRowAlloc(32.32, 32.32, 32.32, 64.64, 64.64, 32.32, "a string");
    105         if (!object) {
    106             exit(EXIT_FAILURE);
    107         }
    108 
    109         if (!dimmInsertObject(dbh, object)) {
    110             exit(EXIT_FAILURE);
    111         }
    112 
    113         psFree(object);
    114         psDBCleanup(dbh);
    115     }
    116 
    117     {
    118         psDB            *dbh;
    119         skyp_irRow      *object;
    120 
    121         dbh = psDBInit("localhost", "test", NULL, "test");
    122         if (!dbh) {
    123             exit(EXIT_FAILURE);
    124         }
    125 
    126         object = skyp_irRowAlloc(64.64, 64.64, 64.64, 64.64, 32.32, 32.32);
    127         if (!object) {
    128             exit(EXIT_FAILURE);
    129         }
    130 
    131         if (!skyp_irInsertObject(dbh, object)) {
    132             exit(EXIT_FAILURE);
    133         }
    134 
    135         psFree(object);
    136         psDBCleanup(dbh);
    137     }
    138 
    139     {
    140         psDB            *dbh;
    141         domeRow         *object;
    142 
    143         dbh = psDBInit("localhost", "test", NULL, "test");
    144         if (!dbh) {
    145             exit(EXIT_FAILURE);
    146         }
    147 
    148         object = domeRowAlloc(32.32, true, true, true);
    149         if (!object) {
    150             exit(EXIT_FAILURE);
    151         }
    152 
    153         if (!domeInsertObject(dbh, object)) {
    154             exit(EXIT_FAILURE);
    155         }
    156 
    157         psFree(object);
    158         psDBCleanup(dbh);
    159     }
    160 
    161     {
    162         psDB            *dbh;
    163         telescopeRow    *object;
    164 
    165         dbh = psDBInit("localhost", "test", NULL, "test");
    166         if (!dbh) {
    167             exit(EXIT_FAILURE);
    168         }
    169 
    170         object = telescopeRowAlloc("a string", 32.32, 32.32, 64.64, 64.64);
    171         if (!object) {
    172             exit(EXIT_FAILURE);
    173         }
    174 
    175         if (!telescopeInsertObject(dbh, object)) {
    176             exit(EXIT_FAILURE);
    177         }
    178 
    179         psFree(object);
    180         psDBCleanup(dbh);
    181     }
    182 
    183     {
    184         psDB            *dbh;
    1859        summitExpRow    *object;
    18610
     
    300124        }
    301125
    302         object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
     126        object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
    303127        if (!object) {
    304128            exit(EXIT_FAILURE);
     
    322146        }
    323147
    324         object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
     148        object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
    325149        if (!object) {
    326150            exit(EXIT_FAILURE);
     
    344168        }
    345169
    346         object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
     170        object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
    347171        if (!object) {
    348172            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/metadatafromobject.c

    r9423 r9684  
    1010    {
    1111        psMetadata      *md;
    12         weatherRow      *object;
    13         bool            status;
    14 
    15         object = weatherRowAlloc(32.32, 32.32, 32.32, 32.32, 32.32, 32.32, 32.32);
    16         if (!object) {
    17             exit(EXIT_FAILURE);
    18         }
    19 
    20         md = weatherMetadataFromObject(object);
    21         if (!md) {
    22             exit(EXIT_FAILURE);
    23         }
    24 
    25         psFree(object);
    26 
    27         if (!psMetadataLookupF32(&status, md, "temp01") == 32.32) {
    28             psFree(md);
    29             exit(EXIT_FAILURE);
    30         }
    31         if (!psMetadataLookupF32(&status, md, "humi01") == 32.32) {
    32             psFree(md);
    33             exit(EXIT_FAILURE);
    34         }
    35         if (!psMetadataLookupF32(&status, md, "temp02") == 32.32) {
    36             psFree(md);
    37             exit(EXIT_FAILURE);
    38         }
    39         if (!psMetadataLookupF32(&status, md, "humi02") == 32.32) {
    40             psFree(md);
    41             exit(EXIT_FAILURE);
    42         }
    43         if (!psMetadataLookupF32(&status, md, "temp03") == 32.32) {
    44             psFree(md);
    45             exit(EXIT_FAILURE);
    46         }
    47         if (!psMetadataLookupF32(&status, md, "humi03") == 32.32) {
    48             psFree(md);
    49             exit(EXIT_FAILURE);
    50         }
    51         if (!psMetadataLookupF32(&status, md, "pressure") == 32.32) {
    52             psFree(md);
    53             exit(EXIT_FAILURE);
    54         }
    55 
    56         psFree(md);
    57     }
    58 
    59     {
    60         psMetadata      *md;
    61         skyp_transparencyRow *object;
    62         bool            status;
    63 
    64         object = skyp_transparencyRowAlloc("a string", 64.64, -32, 64.64, 64.64, 32.32, 64.64);
    65         if (!object) {
    66             exit(EXIT_FAILURE);
    67         }
    68 
    69         md = skyp_transparencyMetadataFromObject(object);
    70         if (!md) {
    71             exit(EXIT_FAILURE);
    72         }
    73 
    74         psFree(object);
    75 
     12        summitExpRow    *object;
     13        bool            status;
     14
     15        object = summitExpRowAlloc("a string", "a string", "a string", "a string", "a string");
     16        if (!object) {
     17            exit(EXIT_FAILURE);
     18        }
     19
     20        md = summitExpMetadataFromObject(object);
     21        if (!md) {
     22            exit(EXIT_FAILURE);
     23        }
     24
     25        psFree(object);
     26
     27        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
     28            psFree(md);
     29            exit(EXIT_FAILURE);
     30        }
     31        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     32            psFree(md);
     33            exit(EXIT_FAILURE);
     34        }
     35        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     36            psFree(md);
     37            exit(EXIT_FAILURE);
     38        }
     39        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     40            psFree(md);
     41            exit(EXIT_FAILURE);
     42        }
     43        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
     44            psFree(md);
     45            exit(EXIT_FAILURE);
     46        }
     47
     48        psFree(md);
     49    }
     50
     51    {
     52        psMetadata      *md;
     53        pzPendingExpRow *object;
     54        bool            status;
     55
     56        object = pzPendingExpRowAlloc("a string", "a string", "a string", "a string", -32);
     57        if (!object) {
     58            exit(EXIT_FAILURE);
     59        }
     60
     61        md = pzPendingExpMetadataFromObject(object);
     62        if (!md) {
     63            exit(EXIT_FAILURE);
     64        }
     65
     66        psFree(object);
     67
     68        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
     69            psFree(md);
     70            exit(EXIT_FAILURE);
     71        }
     72        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     73            psFree(md);
     74            exit(EXIT_FAILURE);
     75        }
     76        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     77            psFree(md);
     78            exit(EXIT_FAILURE);
     79        }
     80        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     81            psFree(md);
     82            exit(EXIT_FAILURE);
     83        }
     84        if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
     85            psFree(md);
     86            exit(EXIT_FAILURE);
     87        }
     88
     89        psFree(md);
     90    }
     91
     92    {
     93        psMetadata      *md;
     94        pzPendingImfileRow *object;
     95        bool            status;
     96
     97        object = pzPendingImfileRowAlloc("a string", "a string", "a string", -32, "a string", "a string", "a string", "a string");
     98        if (!object) {
     99            exit(EXIT_FAILURE);
     100        }
     101
     102        md = pzPendingImfileMetadataFromObject(object);
     103        if (!md) {
     104            exit(EXIT_FAILURE);
     105        }
     106
     107        psFree(object);
     108
     109        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
     110            psFree(md);
     111            exit(EXIT_FAILURE);
     112        }
     113        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     114            psFree(md);
     115            exit(EXIT_FAILURE);
     116        }
     117        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     118            psFree(md);
     119            exit(EXIT_FAILURE);
     120        }
     121        if (!psMetadataLookupS32(&status, md, "bytes") == -32) {
     122            psFree(md);
     123            exit(EXIT_FAILURE);
     124        }
     125        if (strncmp(psMetadataLookupPtr(&status, md, "md5sum"), "a string", MAX_STRING_LENGTH)) {
     126            psFree(md);
     127            exit(EXIT_FAILURE);
     128        }
     129        if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
     130            psFree(md);
     131            exit(EXIT_FAILURE);
     132        }
     133        if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
     134            psFree(md);
     135            exit(EXIT_FAILURE);
     136        }
     137        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
     138            psFree(md);
     139            exit(EXIT_FAILURE);
     140        }
     141
     142        psFree(md);
     143    }
     144
     145    {
     146        psMetadata      *md;
     147        newExpRow       *object;
     148        bool            status;
     149
     150        object = newExpRowAlloc("a string", "a string", "a string", "a string", "a string", -32);
     151        if (!object) {
     152            exit(EXIT_FAILURE);
     153        }
     154
     155        md = newExpMetadataFromObject(object);
     156        if (!md) {
     157            exit(EXIT_FAILURE);
     158        }
     159
     160        psFree(object);
     161
     162        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
     163            psFree(md);
     164            exit(EXIT_FAILURE);
     165        }
     166        if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
     167            psFree(md);
     168            exit(EXIT_FAILURE);
     169        }
     170        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     171            psFree(md);
     172            exit(EXIT_FAILURE);
     173        }
     174        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     175            psFree(md);
     176            exit(EXIT_FAILURE);
     177        }
     178        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     179            psFree(md);
     180            exit(EXIT_FAILURE);
     181        }
     182        if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
     183            psFree(md);
     184            exit(EXIT_FAILURE);
     185        }
     186
     187        psFree(md);
     188    }
     189
     190    {
     191        psMetadata      *md;
     192        newImfileRow    *object;
     193        bool            status;
     194
     195        object = newImfileRowAlloc("a string", "a string", "a string", "a string");
     196        if (!object) {
     197            exit(EXIT_FAILURE);
     198        }
     199
     200        md = newImfileMetadataFromObject(object);
     201        if (!md) {
     202            exit(EXIT_FAILURE);
     203        }
     204
     205        psFree(object);
     206
     207        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
     208            psFree(md);
     209            exit(EXIT_FAILURE);
     210        }
     211        if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
     212            psFree(md);
     213            exit(EXIT_FAILURE);
     214        }
     215        if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
     216            psFree(md);
     217            exit(EXIT_FAILURE);
     218        }
     219        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
     220            psFree(md);
     221            exit(EXIT_FAILURE);
     222        }
     223
     224        psFree(md);
     225    }
     226
     227    {
     228        psMetadata      *md;
     229        rawDetrendExpRow *object;
     230        bool            status;
     231
     232        object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
     233        if (!object) {
     234            exit(EXIT_FAILURE);
     235        }
     236
     237        md = rawDetrendExpMetadataFromObject(object);
     238        if (!md) {
     239            exit(EXIT_FAILURE);
     240        }
     241
     242        psFree(object);
     243
     244        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
     245            psFree(md);
     246            exit(EXIT_FAILURE);
     247        }
     248        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     249            psFree(md);
     250            exit(EXIT_FAILURE);
     251        }
     252        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     253            psFree(md);
     254            exit(EXIT_FAILURE);
     255        }
     256        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     257            psFree(md);
     258            exit(EXIT_FAILURE);
     259        }
     260        if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
     261            psFree(md);
     262            exit(EXIT_FAILURE);
     263        }
    76264        if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
    77265            psFree(md);
    78266            exit(EXIT_FAILURE);
    79267        }
    80         if (!psMetadataLookupF64(&status, md, "trans") == 64.64) {
    81             psFree(md);
    82             exit(EXIT_FAILURE);
    83         }
    84         if (!psMetadataLookupS32(&status, md, "nstars") == -32) {
     268        if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    85269            psFree(md);
    86270            exit(EXIT_FAILURE);
     
    94278            exit(EXIT_FAILURE);
    95279        }
    96         if (!psMetadataLookupF32(&status, md, "exptime") == 32.32) {
    97             psFree(md);
    98             exit(EXIT_FAILURE);
    99         }
    100         if (!psMetadataLookupF64(&status, md, "sky_bright") == 64.64) {
    101             psFree(md);
    102             exit(EXIT_FAILURE);
    103         }
    104 
    105         psFree(md);
    106     }
    107 
    108     {
    109         psMetadata      *md;
    110         skyp_absorptionRow *object;
    111         bool            status;
    112 
    113         object = skyp_absorptionRowAlloc("a string", 32.32, 32.32, 32.32, -32, 64.64, 64.64, 32.32, 64.64);
    114         if (!object) {
    115             exit(EXIT_FAILURE);
    116         }
    117 
    118         md = skyp_absorptionMetadataFromObject(object);
    119         if (!md) {
    120             exit(EXIT_FAILURE);
    121         }
    122 
    123         psFree(object);
    124 
    125         if (strncmp(psMetadataLookupPtr(&status, md, "disperser_id"), "a string", MAX_STRING_LENGTH)) {
    126             psFree(md);
    127             exit(EXIT_FAILURE);
    128         }
    129         if (!psMetadataLookupF32(&status, md, "atmcomp1") == 32.32) {
    130             psFree(md);
    131             exit(EXIT_FAILURE);
    132         }
    133         if (!psMetadataLookupF32(&status, md, "atmcomp2") == 32.32) {
    134             psFree(md);
    135             exit(EXIT_FAILURE);
    136         }
    137         if (!psMetadataLookupF32(&status, md, "atmcomp3") == 32.32) {
    138             psFree(md);
    139             exit(EXIT_FAILURE);
    140         }
    141         if (!psMetadataLookupS32(&status, md, "nstars") == -32) {
     280        if (!psMetadataLookupF32(&status, md, "exp_time") == 32.32) {
     281            psFree(md);
     282            exit(EXIT_FAILURE);
     283        }
     284        if (!psMetadataLookupF64(&status, md, "bg") == 64.64) {
     285            psFree(md);
     286            exit(EXIT_FAILURE);
     287        }
     288        if (!psMetadataLookupF64(&status, md, "bg_stdev") == 64.64) {
     289            psFree(md);
     290            exit(EXIT_FAILURE);
     291        }
     292        if (!psMetadataLookupF64(&status, md, "bg_mean_stdev") == 64.64) {
     293            psFree(md);
     294            exit(EXIT_FAILURE);
     295        }
     296        if (!psMetadataLookupF64(&status, md, "alt") == 64.64) {
     297            psFree(md);
     298            exit(EXIT_FAILURE);
     299        }
     300        if (!psMetadataLookupF64(&status, md, "az") == 64.64) {
     301            psFree(md);
     302            exit(EXIT_FAILURE);
     303        }
     304        if (!psMetadataLookupF32(&status, md, "ccd_temp") == 32.32) {
     305            psFree(md);
     306            exit(EXIT_FAILURE);
     307        }
     308        if (!psMetadataLookupF64(&status, md, "posang") == 64.64) {
     309            psFree(md);
     310            exit(EXIT_FAILURE);
     311        }
     312        if (strncmp(psMetadataLookupPtr(&status, md, "object"), "a string", MAX_STRING_LENGTH)) {
     313            psFree(md);
     314            exit(EXIT_FAILURE);
     315        }
     316            psFree(md);
     317            exit(EXIT_FAILURE);
     318        }
     319
     320        psFree(md);
     321    }
     322
     323    {
     324        psMetadata      *md;
     325        rawScienceExpRow *object;
     326        bool            status;
     327
     328        object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
     329        if (!object) {
     330            exit(EXIT_FAILURE);
     331        }
     332
     333        md = rawScienceExpMetadataFromObject(object);
     334        if (!md) {
     335            exit(EXIT_FAILURE);
     336        }
     337
     338        psFree(object);
     339
     340        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
     341            psFree(md);
     342            exit(EXIT_FAILURE);
     343        }
     344        if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
     345            psFree(md);
     346            exit(EXIT_FAILURE);
     347        }
     348        if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
     349            psFree(md);
     350            exit(EXIT_FAILURE);
     351        }
     352        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     353            psFree(md);
     354            exit(EXIT_FAILURE);
     355        }
     356        if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
     357            psFree(md);
     358            exit(EXIT_FAILURE);
     359        }
     360        if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
     361            psFree(md);
     362            exit(EXIT_FAILURE);
     363        }
     364        if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    142365            psFree(md);
    143366            exit(EXIT_FAILURE);
     
    151374            exit(EXIT_FAILURE);
    152375        }
    153         if (!psMetadataLookupF32(&status, md, "exptime") == 32.32) {
    154             psFree(md);
    155             exit(EXIT_FAILURE);
    156         }
    157         if (!psMetadataLookupF64(&status, md, "sky_bright") == 64.64) {
    158             psFree(md);
    159             exit(EXIT_FAILURE);
    160         }
    161 
    162         psFree(md);
    163     }
    164 
    165     {
    166         psMetadata      *md;
    167         skyp_emissionRow *object;
    168         bool            status;
    169 
    170         object = skyp_emissionRowAlloc("a string", 32.32, 32.32, 32.32, 32.32, 32.32);
    171         if (!object) {
    172             exit(EXIT_FAILURE);
    173         }
    174 
    175         md = skyp_emissionMetadataFromObject(object);
    176         if (!md) {
    177             exit(EXIT_FAILURE);
    178         }
    179 
    180         psFree(object);
    181 
    182         if (strncmp(psMetadataLookupPtr(&status, md, "disperser_id"), "a string", MAX_STRING_LENGTH)) {
    183             psFree(md);
    184             exit(EXIT_FAILURE);
    185         }
    186         if (!psMetadataLookupF32(&status, md, "atmcomp1") == 32.32) {
    187             psFree(md);
    188             exit(EXIT_FAILURE);
    189         }
    190         if (!psMetadataLookupF32(&status, md, "atmcomp2") == 32.32) {
    191             psFree(md);
    192             exit(EXIT_FAILURE);
    193         }
    194         if (!psMetadataLookupF32(&status, md, "atmcomp3") == 32.32) {
    195             psFree(md);
    196             exit(EXIT_FAILURE);
    197         }
    198         if (!psMetadataLookupF32(&status, md, "continuum") == 32.32) {
    199             psFree(md);
    200             exit(EXIT_FAILURE);
    201         }
    202         if (!psMetadataLookupF32(&status, md, "exptime") == 32.32) {
    203             psFree(md);
    204             exit(EXIT_FAILURE);
    205         }
    206 
    207         psFree(md);
    208     }
    209 
    210     {
    211         psMetadata      *md;
    212         dimmRow         *object;
    213         bool            status;
    214 
    215         object = dimmRowAlloc(32.32, 32.32, 32.32, 64.64, 64.64, 32.32, "a string");
    216         if (!object) {
    217             exit(EXIT_FAILURE);
    218         }
    219 
    220         md = dimmMetadataFromObject(object);
    221         if (!md) {
    222             exit(EXIT_FAILURE);
    223         }
    224 
    225         psFree(object);
    226 
    227         if (!psMetadataLookupF32(&status, md, "sigmax") == 32.32) {
    228             psFree(md);
    229             exit(EXIT_FAILURE);
    230         }
    231         if (!psMetadataLookupF32(&status, md, "sigmay") == 32.32) {
    232             psFree(md);
    233             exit(EXIT_FAILURE);
    234         }
    235         if (!psMetadataLookupF32(&status, md, "fwhm") == 32.32) {
     376        if (!psMetadataLookupF32(&status, md, "exp_time") == 32.32) {
     377            psFree(md);
     378            exit(EXIT_FAILURE);
     379        }
     380        if (!psMetadataLookupF64(&status, md, "bg") == 64.64) {
     381            psFree(md);
     382            exit(EXIT_FAILURE);
     383        }
     384        if (!psMetadataLookupF64(&status, md, "bg_stdev") == 64.64) {
     385            psFree(md);
     386            exit(EXIT_FAILURE);
     387        }
     388        if (!psMetadataLookupF64(&status, md, "bg_mean_stdev") == 64.64) {
     389            psFree(md);
     390            exit(EXIT_FAILURE);
     391        }
     392        if (!psMetadataLookupF64(&status, md, "alt") == 64.64) {
     393            psFree(md);
     394            exit(EXIT_FAILURE);
     395        }
     396        if (!psMetadataLookupF64(&status, md, "az") == 64.64) {
     397            psFree(md);
     398            exit(EXIT_FAILURE);
     399        }
     400        if (!psMetadataLookupF32(&status, md, "ccd_temp") == 32.32) {
     401            psFree(md);
     402            exit(EXIT_FAILURE);
     403        }
     404        if (!psMetadataLookupF64(&status, md, "posang") == 64.64) {
     405            psFree(md);
     406            exit(EXIT_FAILURE);
     407        }
     408        if (strncmp(psMetadataLookupPtr(&status, md, "object"), "a string", MAX_STRING_LENGTH)) {
     409            psFree(md);
     410            exit(EXIT_FAILURE);
     411        }
     412            psFree(md);
     413            exit(EXIT_FAILURE);
     414        }
     415
     416        psFree(md);
     417    }
     418
     419    {
     420        psMetadata      *md;
     421        rawImfileRow    *object;
     422        bool            status;
     423
     424        object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string", "0001-01-01T00:00:00Z");
     425        if (!object) {
     426            exit(EXIT_FAILURE);
     427        }
     428
     429        md = rawImfileMetadataFromObject(object);
     430        if (!md) {
     431            exit(EXIT_FAILURE);
     432        }
     433
     434        psFree(object);
     435
     436        if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
     437            psFree(md);
     438            exit(EXIT_FAILURE);
     439        }
     440        if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
     441            psFree(md);
     442            exit(EXIT_FAILURE);
     443        }
     444        if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
     445            psFree(md);
     446            exit(EXIT_FAILURE);
     447        }
     448        if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
     449            psFree(md);
     450            exit(EXIT_FAILURE);
     451        }
     452        if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
     453            psFree(md);
     454            exit(EXIT_FAILURE);
     455        }
     456        if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
     457            psFree(md);
     458            exit(EXIT_FAILURE);
     459        }
     460        if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    236461            psFree(md);
    237462            exit(EXIT_FAILURE);
     
    245470            exit(EXIT_FAILURE);
    246471        }
    247         if (!psMetadataLookupF32(&status, md, "expttime") == 32.32) {
    248             psFree(md);
    249             exit(EXIT_FAILURE);
    250         }
    251         if (strncmp(psMetadataLookupPtr(&status, md, "telescope_id"), "a string", MAX_STRING_LENGTH)) {
    252             psFree(md);
    253             exit(EXIT_FAILURE);
    254         }
    255 
    256         psFree(md);
    257     }
    258 
    259     {
    260         psMetadata      *md;
    261         skyp_irRow      *object;
    262         bool            status;
    263 
    264         object = skyp_irRowAlloc(64.64, 64.64, 64.64, 64.64, 32.32, 32.32);
    265         if (!object) {
    266             exit(EXIT_FAILURE);
    267         }
    268 
    269         md = skyp_irMetadataFromObject(object);
    270         if (!md) {
    271             exit(EXIT_FAILURE);
    272         }
    273 
    274         psFree(object);
    275 
    276         if (!psMetadataLookupF64(&status, md, "sky_bright") == 64.64) {
    277             psFree(md);
    278             exit(EXIT_FAILURE);
    279         }
    280         if (!psMetadataLookupF64(&status, md, "sky_var") == 64.64) {
    281             psFree(md);
    282             exit(EXIT_FAILURE);
    283         }
    284         if (!psMetadataLookupF64(&status, md, "ra") == 64.64) {
    285             psFree(md);
    286             exit(EXIT_FAILURE);
    287         }
    288         if (!psMetadataLookupF64(&status, md, "decl") == 64.64) {
    289             psFree(md);
    290             exit(EXIT_FAILURE);
    291         }
    292         if (!psMetadataLookupF32(&status, md, "fov_x") == 32.32) {
    293             psFree(md);
    294             exit(EXIT_FAILURE);
    295         }
    296         if (!psMetadataLookupF32(&status, md, "fov_y") == 32.32) {
    297             psFree(md);
    298             exit(EXIT_FAILURE);
    299         }
    300 
    301         psFree(md);
    302     }
    303 
    304     {
    305         psMetadata      *md;
    306         domeRow         *object;
    307         bool            status;
    308 
    309         object = domeRowAlloc(32.32, true, true, true);
    310         if (!object) {
    311             exit(EXIT_FAILURE);
    312         }
    313 
    314         md = domeMetadataFromObject(object);
    315         if (!md) {
    316             exit(EXIT_FAILURE);
    317         }
    318 
    319         psFree(object);
    320 
    321         if (!psMetadataLookupF32(&status, md, "az") == 32.32) {
    322             psFree(md);
    323             exit(EXIT_FAILURE);
    324         }
    325         if (!psMetadataLookupBool(&status, md, "open") == true) {
    326             psFree(md);
    327             exit(EXIT_FAILURE);
    328         }
    329         if (!psMetadataLookupBool(&status, md, "light") == true) {
    330             psFree(md);
    331             exit(EXIT_FAILURE);
    332         }
    333         if (!psMetadataLookupBool(&status, md, "track") == true) {
    334             psFree(md);
    335             exit(EXIT_FAILURE);
    336         }
    337 
    338         psFree(md);
    339     }
    340 
    341     {
    342         psMetadata      *md;
    343         telescopeRow    *object;
    344         bool            status;
    345 
    346         object = telescopeRowAlloc("a string", 32.32, 32.32, 64.64, 64.64);
    347         if (!object) {
    348             exit(EXIT_FAILURE);
    349         }
    350 
    351         md = telescopeMetadataFromObject(object);
    352         if (!md) {
    353             exit(EXIT_FAILURE);
    354         }
    355 
    356         psFree(object);
    357 
    358         if (strncmp(psMetadataLookupPtr(&status, md, "guide"), "a string", MAX_STRING_LENGTH)) {
    359             psFree(md);
    360             exit(EXIT_FAILURE);
    361         }
    362         if (!psMetadataLookupF32(&status, md, "alt") == 32.32) {
    363             psFree(md);
    364             exit(EXIT_FAILURE);
    365         }
    366         if (!psMetadataLookupF32(&status, md, "az") == 32.32) {
    367             psFree(md);
    368             exit(EXIT_FAILURE);
    369         }
    370         if (!psMetadataLookupF64(&status, md, "ra") == 64.64) {
    371             psFree(md);
    372             exit(EXIT_FAILURE);
    373         }
    374         if (!psMetadataLookupF64(&status, md, "decl") == 64.64) {
    375             psFree(md);
    376             exit(EXIT_FAILURE);
    377         }
    378 
    379         psFree(md);
    380     }
    381 
    382     {
    383         psMetadata      *md;
    384         summitExpRow    *object;
    385         bool            status;
    386 
    387         object = summitExpRowAlloc("a string", "a string", "a string", "a string", "a string");
    388         if (!object) {
    389             exit(EXIT_FAILURE);
    390         }
    391 
    392         md = summitExpMetadataFromObject(object);
    393         if (!md) {
    394             exit(EXIT_FAILURE);
    395         }
    396 
    397         psFree(object);
    398 
    399         if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
    400             psFree(md);
    401             exit(EXIT_FAILURE);
    402         }
    403         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    404             psFree(md);
    405             exit(EXIT_FAILURE);
    406         }
    407         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    408             psFree(md);
    409             exit(EXIT_FAILURE);
    410         }
    411         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    412             psFree(md);
    413             exit(EXIT_FAILURE);
    414         }
    415         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
    416             psFree(md);
    417             exit(EXIT_FAILURE);
    418         }
    419 
    420         psFree(md);
    421     }
    422 
    423     {
    424         psMetadata      *md;
    425         pzPendingExpRow *object;
    426         bool            status;
    427 
    428         object = pzPendingExpRowAlloc("a string", "a string", "a string", "a string", -32);
    429         if (!object) {
    430             exit(EXIT_FAILURE);
    431         }
    432 
    433         md = pzPendingExpMetadataFromObject(object);
    434         if (!md) {
    435             exit(EXIT_FAILURE);
    436         }
    437 
    438         psFree(object);
    439 
    440         if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
    441             psFree(md);
    442             exit(EXIT_FAILURE);
    443         }
    444         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    445             psFree(md);
    446             exit(EXIT_FAILURE);
    447         }
    448         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    449             psFree(md);
    450             exit(EXIT_FAILURE);
    451         }
    452         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    453             psFree(md);
    454             exit(EXIT_FAILURE);
    455         }
    456         if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
    457             psFree(md);
    458             exit(EXIT_FAILURE);
    459         }
    460 
    461         psFree(md);
    462     }
    463 
    464     {
    465         psMetadata      *md;
    466         pzPendingImfileRow *object;
    467         bool            status;
    468 
    469         object = pzPendingImfileRowAlloc("a string", "a string", "a string", -32, "a string", "a string", "a string", "a string");
    470         if (!object) {
    471             exit(EXIT_FAILURE);
    472         }
    473 
    474         md = pzPendingImfileMetadataFromObject(object);
    475         if (!md) {
    476             exit(EXIT_FAILURE);
    477         }
    478 
    479         psFree(object);
    480 
    481         if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
    482             psFree(md);
    483             exit(EXIT_FAILURE);
    484         }
    485         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    486             psFree(md);
    487             exit(EXIT_FAILURE);
    488         }
    489         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    490             psFree(md);
    491             exit(EXIT_FAILURE);
    492         }
    493         if (!psMetadataLookupS32(&status, md, "bytes") == -32) {
    494             psFree(md);
    495             exit(EXIT_FAILURE);
    496         }
    497         if (strncmp(psMetadataLookupPtr(&status, md, "md5sum"), "a string", MAX_STRING_LENGTH)) {
    498             psFree(md);
    499             exit(EXIT_FAILURE);
    500         }
    501         if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
    502             psFree(md);
    503             exit(EXIT_FAILURE);
    504         }
    505         if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
    506             psFree(md);
    507             exit(EXIT_FAILURE);
    508         }
    509         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
    510             psFree(md);
    511             exit(EXIT_FAILURE);
    512         }
    513 
    514         psFree(md);
    515     }
    516 
    517     {
    518         psMetadata      *md;
    519         newExpRow       *object;
    520         bool            status;
    521 
    522         object = newExpRowAlloc("a string", "a string", "a string", "a string", "a string", -32);
    523         if (!object) {
    524             exit(EXIT_FAILURE);
    525         }
    526 
    527         md = newExpMetadataFromObject(object);
    528         if (!md) {
    529             exit(EXIT_FAILURE);
    530         }
    531 
    532         psFree(object);
    533 
    534         if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
    535             psFree(md);
    536             exit(EXIT_FAILURE);
    537         }
    538         if (strncmp(psMetadataLookupPtr(&status, md, "exp_id"), "a string", MAX_STRING_LENGTH)) {
    539             psFree(md);
    540             exit(EXIT_FAILURE);
    541         }
    542         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    543             psFree(md);
    544             exit(EXIT_FAILURE);
    545         }
    546         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    547             psFree(md);
    548             exit(EXIT_FAILURE);
    549         }
    550         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    551             psFree(md);
    552             exit(EXIT_FAILURE);
    553         }
    554         if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
    555             psFree(md);
    556             exit(EXIT_FAILURE);
    557         }
    558 
    559         psFree(md);
    560     }
    561 
    562     {
    563         psMetadata      *md;
    564         newImfileRow    *object;
    565         bool            status;
    566 
    567         object = newImfileRowAlloc("a string", "a string", "a string", "a string");
    568         if (!object) {
    569             exit(EXIT_FAILURE);
    570         }
    571 
    572         md = newImfileMetadataFromObject(object);
    573         if (!md) {
    574             exit(EXIT_FAILURE);
    575         }
    576 
    577         psFree(object);
    578 
    579         if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
    580             psFree(md);
    581             exit(EXIT_FAILURE);
    582         }
    583         if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
    584             psFree(md);
    585             exit(EXIT_FAILURE);
    586         }
    587         if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
    588             psFree(md);
    589             exit(EXIT_FAILURE);
    590         }
    591         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
    592             psFree(md);
    593             exit(EXIT_FAILURE);
    594         }
    595 
    596         psFree(md);
    597     }
    598 
    599     {
    600         psMetadata      *md;
    601         rawDetrendExpRow *object;
    602         bool            status;
    603 
    604         object = rawDetrendExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
    605         if (!object) {
    606             exit(EXIT_FAILURE);
    607         }
    608 
    609         md = rawDetrendExpMetadataFromObject(object);
    610         if (!md) {
    611             exit(EXIT_FAILURE);
    612         }
    613 
    614         psFree(object);
    615 
    616         if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
    617             psFree(md);
    618             exit(EXIT_FAILURE);
    619         }
    620         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    621             psFree(md);
    622             exit(EXIT_FAILURE);
    623         }
    624         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    625             psFree(md);
    626             exit(EXIT_FAILURE);
    627         }
    628         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    629             psFree(md);
    630             exit(EXIT_FAILURE);
    631         }
    632         if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
    633             psFree(md);
    634             exit(EXIT_FAILURE);
    635         }
    636         if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
    637             psFree(md);
    638             exit(EXIT_FAILURE);
    639         }
    640         if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    641             psFree(md);
    642             exit(EXIT_FAILURE);
    643         }
    644         if (!psMetadataLookupF64(&status, md, "ra") == 64.64) {
    645             psFree(md);
    646             exit(EXIT_FAILURE);
    647         }
    648         if (!psMetadataLookupF64(&status, md, "decl") == 64.64) {
    649             psFree(md);
    650             exit(EXIT_FAILURE);
    651         }
    652472        if (!psMetadataLookupF32(&status, md, "exp_time") == 32.32) {
    653473            psFree(md);
     
    686506            exit(EXIT_FAILURE);
    687507        }
    688 
    689         psFree(md);
    690     }
    691 
    692     {
    693         psMetadata      *md;
    694         rawScienceExpRow *object;
    695         bool            status;
    696 
    697         object = rawScienceExpRowAlloc("a string", "a string", "a string", "a string", -32, "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
    698         if (!object) {
    699             exit(EXIT_FAILURE);
    700         }
    701 
    702         md = rawScienceExpMetadataFromObject(object);
    703         if (!md) {
    704             exit(EXIT_FAILURE);
    705         }
    706 
    707         psFree(object);
    708 
    709         if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
    710             psFree(md);
    711             exit(EXIT_FAILURE);
    712         }
    713         if (strncmp(psMetadataLookupPtr(&status, md, "camera"), "a string", MAX_STRING_LENGTH)) {
    714             psFree(md);
    715             exit(EXIT_FAILURE);
    716         }
    717         if (strncmp(psMetadataLookupPtr(&status, md, "telescope"), "a string", MAX_STRING_LENGTH)) {
    718             psFree(md);
    719             exit(EXIT_FAILURE);
    720         }
    721         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    722             psFree(md);
    723             exit(EXIT_FAILURE);
    724         }
    725         if (!psMetadataLookupS32(&status, md, "imfiles") == -32) {
    726             psFree(md);
    727             exit(EXIT_FAILURE);
    728         }
    729         if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
    730             psFree(md);
    731             exit(EXIT_FAILURE);
    732         }
    733         if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    734             psFree(md);
    735             exit(EXIT_FAILURE);
    736         }
    737         if (!psMetadataLookupF64(&status, md, "ra") == 64.64) {
    738             psFree(md);
    739             exit(EXIT_FAILURE);
    740         }
    741         if (!psMetadataLookupF64(&status, md, "decl") == 64.64) {
    742             psFree(md);
    743             exit(EXIT_FAILURE);
    744         }
    745         if (!psMetadataLookupF32(&status, md, "exp_time") == 32.32) {
    746             psFree(md);
    747             exit(EXIT_FAILURE);
    748         }
    749         if (!psMetadataLookupF64(&status, md, "bg") == 64.64) {
    750             psFree(md);
    751             exit(EXIT_FAILURE);
    752         }
    753         if (!psMetadataLookupF64(&status, md, "bg_stdev") == 64.64) {
    754             psFree(md);
    755             exit(EXIT_FAILURE);
    756         }
    757         if (!psMetadataLookupF64(&status, md, "bg_mean_stdev") == 64.64) {
    758             psFree(md);
    759             exit(EXIT_FAILURE);
    760         }
    761         if (!psMetadataLookupF64(&status, md, "alt") == 64.64) {
    762             psFree(md);
    763             exit(EXIT_FAILURE);
    764         }
    765         if (!psMetadataLookupF64(&status, md, "az") == 64.64) {
    766             psFree(md);
    767             exit(EXIT_FAILURE);
    768         }
    769         if (!psMetadataLookupF32(&status, md, "ccd_temp") == 32.32) {
    770             psFree(md);
    771             exit(EXIT_FAILURE);
    772         }
    773         if (!psMetadataLookupF64(&status, md, "posang") == 64.64) {
    774             psFree(md);
    775             exit(EXIT_FAILURE);
    776         }
    777         if (strncmp(psMetadataLookupPtr(&status, md, "object"), "a string", MAX_STRING_LENGTH)) {
    778             psFree(md);
    779             exit(EXIT_FAILURE);
    780         }
    781 
    782         psFree(md);
    783     }
    784 
    785     {
    786         psMetadata      *md;
    787         rawImfileRow    *object;
    788         bool            status;
    789 
    790         object = rawImfileRowAlloc("a string", "a string", "a string", "a string", "a string", "a string", 32.32, 64.64, 64.64, 32.32, 64.64, 64.64, 64.64, 64.64, 64.64, 32.32, 64.64, "a string");
    791         if (!object) {
    792             exit(EXIT_FAILURE);
    793         }
    794 
    795         md = rawImfileMetadataFromObject(object);
    796         if (!md) {
    797             exit(EXIT_FAILURE);
    798         }
    799 
    800         psFree(object);
    801 
    802         if (strncmp(psMetadataLookupPtr(&status, md, "exp_tag"), "a string", MAX_STRING_LENGTH)) {
    803             psFree(md);
    804             exit(EXIT_FAILURE);
    805         }
    806         if (strncmp(psMetadataLookupPtr(&status, md, "class"), "a string", MAX_STRING_LENGTH)) {
    807             psFree(md);
    808             exit(EXIT_FAILURE);
    809         }
    810         if (strncmp(psMetadataLookupPtr(&status, md, "class_id"), "a string", MAX_STRING_LENGTH)) {
    811             psFree(md);
    812             exit(EXIT_FAILURE);
    813         }
    814         if (strncmp(psMetadataLookupPtr(&status, md, "uri"), "a string", MAX_STRING_LENGTH)) {
    815             psFree(md);
    816             exit(EXIT_FAILURE);
    817         }
    818         if (strncmp(psMetadataLookupPtr(&status, md, "exp_type"), "a string", MAX_STRING_LENGTH)) {
    819             psFree(md);
    820             exit(EXIT_FAILURE);
    821         }
    822         if (strncmp(psMetadataLookupPtr(&status, md, "filter"), "a string", MAX_STRING_LENGTH)) {
    823             psFree(md);
    824             exit(EXIT_FAILURE);
    825         }
    826         if (!psMetadataLookupF32(&status, md, "airmass") == 32.32) {
    827             psFree(md);
    828             exit(EXIT_FAILURE);
    829         }
    830         if (!psMetadataLookupF64(&status, md, "ra") == 64.64) {
    831             psFree(md);
    832             exit(EXIT_FAILURE);
    833         }
    834         if (!psMetadataLookupF64(&status, md, "decl") == 64.64) {
    835             psFree(md);
    836             exit(EXIT_FAILURE);
    837         }
    838         if (!psMetadataLookupF32(&status, md, "exp_time") == 32.32) {
    839             psFree(md);
    840             exit(EXIT_FAILURE);
    841         }
    842         if (!psMetadataLookupF64(&status, md, "bg") == 64.64) {
    843             psFree(md);
    844             exit(EXIT_FAILURE);
    845         }
    846         if (!psMetadataLookupF64(&status, md, "bg_stdev") == 64.64) {
    847             psFree(md);
    848             exit(EXIT_FAILURE);
    849         }
    850         if (!psMetadataLookupF64(&status, md, "bg_mean_stdev") == 64.64) {
    851             psFree(md);
    852             exit(EXIT_FAILURE);
    853         }
    854         if (!psMetadataLookupF64(&status, md, "alt") == 64.64) {
    855             psFree(md);
    856             exit(EXIT_FAILURE);
    857         }
    858         if (!psMetadataLookupF64(&status, md, "az") == 64.64) {
    859             psFree(md);
    860             exit(EXIT_FAILURE);
    861         }
    862         if (!psMetadataLookupF32(&status, md, "ccd_temp") == 32.32) {
    863             psFree(md);
    864             exit(EXIT_FAILURE);
    865         }
    866         if (!psMetadataLookupF64(&status, md, "posang") == 64.64) {
    867             psFree(md);
    868             exit(EXIT_FAILURE);
    869         }
    870         if (strncmp(psMetadataLookupPtr(&status, md, "object"), "a string", MAX_STRING_LENGTH)) {
    871508            psFree(md);
    872509            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/objectfrommetadata.c

    r9423 r9684  
    1010    {
    1111        psMetadata      *md;
    12         weatherRow      *object;
    13 
    14         md = psMetadataAlloc();
    15         if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, 32.32)) {
    16             psFree(md);
    17             exit(EXIT_FAILURE);
    18         }
    19         if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi01", 0, NULL, 32.32)) {
    20             psFree(md);
    21             exit(EXIT_FAILURE);
    22         }
    23         if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp02", 0, NULL, 32.32)) {
    24             psFree(md);
    25             exit(EXIT_FAILURE);
    26         }
    27         if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi02", 0, NULL, 32.32)) {
    28             psFree(md);
    29             exit(EXIT_FAILURE);
    30         }
    31         if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp03", 0, NULL, 32.32)) {
    32             psFree(md);
    33             exit(EXIT_FAILURE);
    34         }
    35         if (!psMetadataAddF32(md, PS_LIST_TAIL, "humi03", 0, NULL, 32.32)) {
    36             psFree(md);
    37             exit(EXIT_FAILURE);
    38         }
    39         if (!psMetadataAddF32(md, PS_LIST_TAIL, "pressure", 0, NULL, 32.32)) {
    40             psFree(md);
    41             exit(EXIT_FAILURE);
    42         }
    43 
    44         object = weatherObjectFromMetadata(md);
    45         if (!object) {
    46             psFree(md);
    47             exit(EXIT_FAILURE);
    48         }
    49 
    50         psFree(md);
    51 
    52         if (!object->temp01 == 32.32) {
    53             psFree(object);
    54             exit(EXIT_FAILURE);
    55         }
    56         if (!object->humi01 == 32.32) {
    57             psFree(object);
    58             exit(EXIT_FAILURE);
    59         }
    60         if (!object->temp02 == 32.32) {
    61             psFree(object);
    62             exit(EXIT_FAILURE);
    63         }
    64         if (!object->humi02 == 32.32) {
    65             psFree(object);
    66             exit(EXIT_FAILURE);
    67         }
    68         if (!object->temp03 == 32.32) {
    69             psFree(object);
    70             exit(EXIT_FAILURE);
    71         }
    72         if (!object->humi03 == 32.32) {
    73             psFree(object);
    74             exit(EXIT_FAILURE);
    75         }
    76         if (!object->pressure == 32.32) {
    77             psFree(object);
    78             exit(EXIT_FAILURE);
    79         }
    80 
    81         psFree(object);
    82     }
    83 
    84     {
    85         psMetadata      *md;
    86         skyp_transparencyRow *object;
    87 
    88         md = psMetadataAlloc();
     12        summitExpRow    *object;
     13
     14        md = psMetadataAlloc();
     15        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
     16            psFree(md);
     17            exit(EXIT_FAILURE);
     18        }
     19        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     20            psFree(md);
     21            exit(EXIT_FAILURE);
     22        }
     23        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     24            psFree(md);
     25            exit(EXIT_FAILURE);
     26        }
     27        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     28            psFree(md);
     29            exit(EXIT_FAILURE);
     30        }
     31        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
     32            psFree(md);
     33            exit(EXIT_FAILURE);
     34        }
     35
     36        object = summitExpObjectFromMetadata(md);
     37        if (!object) {
     38            psFree(md);
     39            exit(EXIT_FAILURE);
     40        }
     41
     42        psFree(md);
     43
     44        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     45            psFree(object);
     46            exit(EXIT_FAILURE);
     47        }
     48        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     49            psFree(object);
     50            exit(EXIT_FAILURE);
     51        }
     52        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     53            psFree(object);
     54            exit(EXIT_FAILURE);
     55        }
     56        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     57            psFree(object);
     58            exit(EXIT_FAILURE);
     59        }
     60        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     61            psFree(object);
     62            exit(EXIT_FAILURE);
     63        }
     64
     65        psFree(object);
     66    }
     67
     68    {
     69        psMetadata      *md;
     70        pzPendingExpRow *object;
     71
     72        md = psMetadataAlloc();
     73        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
     74            psFree(md);
     75            exit(EXIT_FAILURE);
     76        }
     77        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     78            psFree(md);
     79            exit(EXIT_FAILURE);
     80        }
     81        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     82            psFree(md);
     83            exit(EXIT_FAILURE);
     84        }
     85        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     86            psFree(md);
     87            exit(EXIT_FAILURE);
     88        }
     89        if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
     90            psFree(md);
     91            exit(EXIT_FAILURE);
     92        }
     93
     94        object = pzPendingExpObjectFromMetadata(md);
     95        if (!object) {
     96            psFree(md);
     97            exit(EXIT_FAILURE);
     98        }
     99
     100        psFree(md);
     101
     102        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     103            psFree(object);
     104            exit(EXIT_FAILURE);
     105        }
     106        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     107            psFree(object);
     108            exit(EXIT_FAILURE);
     109        }
     110        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     111            psFree(object);
     112            exit(EXIT_FAILURE);
     113        }
     114        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     115            psFree(object);
     116            exit(EXIT_FAILURE);
     117        }
     118        if (!object->imfiles == -32) {
     119            psFree(object);
     120            exit(EXIT_FAILURE);
     121        }
     122
     123        psFree(object);
     124    }
     125
     126    {
     127        psMetadata      *md;
     128        pzPendingImfileRow *object;
     129
     130        md = psMetadataAlloc();
     131        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
     132            psFree(md);
     133            exit(EXIT_FAILURE);
     134        }
     135        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     136            psFree(md);
     137            exit(EXIT_FAILURE);
     138        }
     139        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     140            psFree(md);
     141            exit(EXIT_FAILURE);
     142        }
     143        if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, -32)) {
     144            psFree(md);
     145            exit(EXIT_FAILURE);
     146        }
     147        if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, "a string")) {
     148            psFree(md);
     149            exit(EXIT_FAILURE);
     150        }
     151        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
     152            psFree(md);
     153            exit(EXIT_FAILURE);
     154        }
     155        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
     156            psFree(md);
     157            exit(EXIT_FAILURE);
     158        }
     159        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
     160            psFree(md);
     161            exit(EXIT_FAILURE);
     162        }
     163
     164        object = pzPendingImfileObjectFromMetadata(md);
     165        if (!object) {
     166            psFree(md);
     167            exit(EXIT_FAILURE);
     168        }
     169
     170        psFree(md);
     171
     172        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     173            psFree(object);
     174            exit(EXIT_FAILURE);
     175        }
     176        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     177            psFree(object);
     178            exit(EXIT_FAILURE);
     179        }
     180        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     181            psFree(object);
     182            exit(EXIT_FAILURE);
     183        }
     184        if (!object->bytes == -32) {
     185            psFree(object);
     186            exit(EXIT_FAILURE);
     187        }
     188        if (strncmp(object->md5sum, "a string", MAX_STRING_LENGTH)) {
     189            psFree(object);
     190            exit(EXIT_FAILURE);
     191        }
     192        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     193            psFree(object);
     194            exit(EXIT_FAILURE);
     195        }
     196        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     197            psFree(object);
     198            exit(EXIT_FAILURE);
     199        }
     200        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     201            psFree(object);
     202            exit(EXIT_FAILURE);
     203        }
     204
     205        psFree(object);
     206    }
     207
     208    {
     209        psMetadata      *md;
     210        newExpRow       *object;
     211
     212        md = psMetadataAlloc();
     213        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
     214            psFree(md);
     215            exit(EXIT_FAILURE);
     216        }
     217        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
     218            psFree(md);
     219            exit(EXIT_FAILURE);
     220        }
     221        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     222            psFree(md);
     223            exit(EXIT_FAILURE);
     224        }
     225        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     226            psFree(md);
     227            exit(EXIT_FAILURE);
     228        }
     229        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     230            psFree(md);
     231            exit(EXIT_FAILURE);
     232        }
     233        if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
     234            psFree(md);
     235            exit(EXIT_FAILURE);
     236        }
     237
     238        object = newExpObjectFromMetadata(md);
     239        if (!object) {
     240            psFree(md);
     241            exit(EXIT_FAILURE);
     242        }
     243
     244        psFree(md);
     245
     246        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     247            psFree(object);
     248            exit(EXIT_FAILURE);
     249        }
     250        if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
     251            psFree(object);
     252            exit(EXIT_FAILURE);
     253        }
     254        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     255            psFree(object);
     256            exit(EXIT_FAILURE);
     257        }
     258        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     259            psFree(object);
     260            exit(EXIT_FAILURE);
     261        }
     262        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     263            psFree(object);
     264            exit(EXIT_FAILURE);
     265        }
     266        if (!object->imfiles == -32) {
     267            psFree(object);
     268            exit(EXIT_FAILURE);
     269        }
     270
     271        psFree(object);
     272    }
     273
     274    {
     275        psMetadata      *md;
     276        newImfileRow    *object;
     277
     278        md = psMetadataAlloc();
     279        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
     280            psFree(md);
     281            exit(EXIT_FAILURE);
     282        }
     283        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
     284            psFree(md);
     285            exit(EXIT_FAILURE);
     286        }
     287        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
     288            psFree(md);
     289            exit(EXIT_FAILURE);
     290        }
     291        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
     292            psFree(md);
     293            exit(EXIT_FAILURE);
     294        }
     295
     296        object = newImfileObjectFromMetadata(md);
     297        if (!object) {
     298            psFree(md);
     299            exit(EXIT_FAILURE);
     300        }
     301
     302        psFree(md);
     303
     304        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     305            psFree(object);
     306            exit(EXIT_FAILURE);
     307        }
     308        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     309            psFree(object);
     310            exit(EXIT_FAILURE);
     311        }
     312        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     313            psFree(object);
     314            exit(EXIT_FAILURE);
     315        }
     316        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     317            psFree(object);
     318            exit(EXIT_FAILURE);
     319        }
     320
     321        psFree(object);
     322    }
     323
     324    {
     325        psMetadata      *md;
     326        rawDetrendExpRow *object;
     327
     328        md = psMetadataAlloc();
     329        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
     330            psFree(md);
     331            exit(EXIT_FAILURE);
     332        }
     333        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     334            psFree(md);
     335            exit(EXIT_FAILURE);
     336        }
     337        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     338            psFree(md);
     339            exit(EXIT_FAILURE);
     340        }
     341        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     342            psFree(md);
     343            exit(EXIT_FAILURE);
     344        }
     345        if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
     346            psFree(md);
     347            exit(EXIT_FAILURE);
     348        }
    89349        if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
    90350            psFree(md);
    91351            exit(EXIT_FAILURE);
    92352        }
    93         if (!psMetadataAddF64(md, PS_LIST_TAIL, "trans", 0, NULL, 64.64)) {
    94             psFree(md);
    95             exit(EXIT_FAILURE);
    96         }
    97         if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, -32)) {
     353        if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    98354            psFree(md);
    99355            exit(EXIT_FAILURE);
     
    107363            exit(EXIT_FAILURE);
    108364        }
    109         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 32.32)) {
    110             psFree(md);
    111             exit(EXIT_FAILURE);
    112         }
    113         if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 64.64)) {
    114             psFree(md);
    115             exit(EXIT_FAILURE);
    116         }
    117 
    118         object = skyp_transparencyObjectFromMetadata(md);
    119         if (!object) {
    120             psFree(md);
    121             exit(EXIT_FAILURE);
    122         }
    123 
    124         psFree(md);
    125 
     365        if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
     366            psFree(md);
     367            exit(EXIT_FAILURE);
     368        }
     369        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
     370            psFree(md);
     371            exit(EXIT_FAILURE);
     372        }
     373        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
     374            psFree(md);
     375            exit(EXIT_FAILURE);
     376        }
     377        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
     378            psFree(md);
     379            exit(EXIT_FAILURE);
     380        }
     381        if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
     382            psFree(md);
     383            exit(EXIT_FAILURE);
     384        }
     385        if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
     386            psFree(md);
     387            exit(EXIT_FAILURE);
     388        }
     389        if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
     390            psFree(md);
     391            exit(EXIT_FAILURE);
     392        }
     393        if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
     394            psFree(md);
     395            exit(EXIT_FAILURE);
     396        }
     397        if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
     398            psFree(md);
     399            exit(EXIT_FAILURE);
     400        }
     401            psFree(md);
     402            exit(EXIT_FAILURE);
     403        }
     404
     405        object = rawDetrendExpObjectFromMetadata(md);
     406        if (!object) {
     407            psFree(md);
     408            exit(EXIT_FAILURE);
     409        }
     410
     411        psFree(md);
     412
     413        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     414            psFree(object);
     415            exit(EXIT_FAILURE);
     416        }
     417        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     418            psFree(object);
     419            exit(EXIT_FAILURE);
     420        }
     421        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     422            psFree(object);
     423            exit(EXIT_FAILURE);
     424        }
     425        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     426            psFree(object);
     427            exit(EXIT_FAILURE);
     428        }
     429        if (!object->imfiles == -32) {
     430            psFree(object);
     431            exit(EXIT_FAILURE);
     432        }
    126433        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    127434            psFree(object);
    128435            exit(EXIT_FAILURE);
    129436        }
    130         if (!object->trans == 64.64) {
    131             psFree(object);
    132             exit(EXIT_FAILURE);
    133         }
    134         if (!object->nstars == -32) {
     437        if (!object->airmass == 32.32) {
    135438            psFree(object);
    136439            exit(EXIT_FAILURE);
     
    144447            exit(EXIT_FAILURE);
    145448        }
    146         if (!object->exptime == 32.32) {
    147             psFree(object);
    148             exit(EXIT_FAILURE);
    149         }
    150         if (!object->sky_bright == 64.64) {
    151             psFree(object);
    152             exit(EXIT_FAILURE);
    153         }
    154 
    155         psFree(object);
    156     }
    157 
    158     {
    159         psMetadata      *md;
    160         skyp_absorptionRow *object;
    161 
    162         md = psMetadataAlloc();
    163         if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "a string")) {
    164             psFree(md);
    165             exit(EXIT_FAILURE);
    166         }
    167         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 32.32)) {
    168             psFree(md);
    169             exit(EXIT_FAILURE);
    170         }
    171         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 32.32)) {
    172             psFree(md);
    173             exit(EXIT_FAILURE);
    174         }
    175         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 32.32)) {
    176             psFree(md);
    177             exit(EXIT_FAILURE);
    178         }
    179         if (!psMetadataAddS32(md, PS_LIST_TAIL, "nstars", 0, NULL, -32)) {
     449        if (!object->exp_time == 32.32) {
     450            psFree(object);
     451            exit(EXIT_FAILURE);
     452        }
     453        if (!object->bg == 64.64) {
     454            psFree(object);
     455            exit(EXIT_FAILURE);
     456        }
     457        if (!object->bg_stdev == 64.64) {
     458            psFree(object);
     459            exit(EXIT_FAILURE);
     460        }
     461        if (!object->bg_mean_stdev == 64.64) {
     462            psFree(object);
     463            exit(EXIT_FAILURE);
     464        }
     465        if (!object->alt == 64.64) {
     466            psFree(object);
     467            exit(EXIT_FAILURE);
     468        }
     469        if (!object->az == 64.64) {
     470            psFree(object);
     471            exit(EXIT_FAILURE);
     472        }
     473        if (!object->ccd_temp == 32.32) {
     474            psFree(object);
     475            exit(EXIT_FAILURE);
     476        }
     477        if (!object->posang == 64.64) {
     478            psFree(object);
     479            exit(EXIT_FAILURE);
     480        }
     481        if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
     482            psFree(object);
     483            exit(EXIT_FAILURE);
     484        }
     485            psFree(object);
     486            exit(EXIT_FAILURE);
     487        }
     488
     489        psFree(object);
     490    }
     491
     492    {
     493        psMetadata      *md;
     494        rawScienceExpRow *object;
     495
     496        md = psMetadataAlloc();
     497        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
     498            psFree(md);
     499            exit(EXIT_FAILURE);
     500        }
     501        if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
     502            psFree(md);
     503            exit(EXIT_FAILURE);
     504        }
     505        if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
     506            psFree(md);
     507            exit(EXIT_FAILURE);
     508        }
     509        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     510            psFree(md);
     511            exit(EXIT_FAILURE);
     512        }
     513        if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
     514            psFree(md);
     515            exit(EXIT_FAILURE);
     516        }
     517        if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
     518            psFree(md);
     519            exit(EXIT_FAILURE);
     520        }
     521        if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    180522            psFree(md);
    181523            exit(EXIT_FAILURE);
     
    189531            exit(EXIT_FAILURE);
    190532        }
    191         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 32.32)) {
    192             psFree(md);
    193             exit(EXIT_FAILURE);
    194         }
    195         if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 64.64)) {
    196             psFree(md);
    197             exit(EXIT_FAILURE);
    198         }
    199 
    200         object = skyp_absorptionObjectFromMetadata(md);
    201         if (!object) {
    202             psFree(md);
    203             exit(EXIT_FAILURE);
    204         }
    205 
    206         psFree(md);
    207 
    208         if (strncmp(object->disperser_id, "a string", MAX_STRING_LENGTH)) {
    209             psFree(object);
    210             exit(EXIT_FAILURE);
    211         }
    212         if (!object->atmcomp1 == 32.32) {
    213             psFree(object);
    214             exit(EXIT_FAILURE);
    215         }
    216         if (!object->atmcomp2 == 32.32) {
    217             psFree(object);
    218             exit(EXIT_FAILURE);
    219         }
    220         if (!object->atmcomp3 == 32.32) {
    221             psFree(object);
    222             exit(EXIT_FAILURE);
    223         }
    224         if (!object->nstars == -32) {
     533        if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
     534            psFree(md);
     535            exit(EXIT_FAILURE);
     536        }
     537        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
     538            psFree(md);
     539            exit(EXIT_FAILURE);
     540        }
     541        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
     542            psFree(md);
     543            exit(EXIT_FAILURE);
     544        }
     545        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
     546            psFree(md);
     547            exit(EXIT_FAILURE);
     548        }
     549        if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
     550            psFree(md);
     551            exit(EXIT_FAILURE);
     552        }
     553        if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
     554            psFree(md);
     555            exit(EXIT_FAILURE);
     556        }
     557        if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
     558            psFree(md);
     559            exit(EXIT_FAILURE);
     560        }
     561        if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
     562            psFree(md);
     563            exit(EXIT_FAILURE);
     564        }
     565        if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
     566            psFree(md);
     567            exit(EXIT_FAILURE);
     568        }
     569            psFree(md);
     570            exit(EXIT_FAILURE);
     571        }
     572
     573        object = rawScienceExpObjectFromMetadata(md);
     574        if (!object) {
     575            psFree(md);
     576            exit(EXIT_FAILURE);
     577        }
     578
     579        psFree(md);
     580
     581        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     582            psFree(object);
     583            exit(EXIT_FAILURE);
     584        }
     585        if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
     586            psFree(object);
     587            exit(EXIT_FAILURE);
     588        }
     589        if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
     590            psFree(object);
     591            exit(EXIT_FAILURE);
     592        }
     593        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     594            psFree(object);
     595            exit(EXIT_FAILURE);
     596        }
     597        if (!object->imfiles == -32) {
     598            psFree(object);
     599            exit(EXIT_FAILURE);
     600        }
     601        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
     602            psFree(object);
     603            exit(EXIT_FAILURE);
     604        }
     605        if (!object->airmass == 32.32) {
    225606            psFree(object);
    226607            exit(EXIT_FAILURE);
     
    234615            exit(EXIT_FAILURE);
    235616        }
    236         if (!object->exptime == 32.32) {
    237             psFree(object);
    238             exit(EXIT_FAILURE);
    239         }
    240         if (!object->sky_bright == 64.64) {
    241             psFree(object);
    242             exit(EXIT_FAILURE);
    243         }
    244 
    245         psFree(object);
    246     }
    247 
    248     {
    249         psMetadata      *md;
    250         skyp_emissionRow *object;
    251 
    252         md = psMetadataAlloc();
    253         if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "a string")) {
    254             psFree(md);
    255             exit(EXIT_FAILURE);
    256         }
    257         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp1", 0, NULL, 32.32)) {
    258             psFree(md);
    259             exit(EXIT_FAILURE);
    260         }
    261         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp2", 0, NULL, 32.32)) {
    262             psFree(md);
    263             exit(EXIT_FAILURE);
    264         }
    265         if (!psMetadataAddF32(md, PS_LIST_TAIL, "atmcomp3", 0, NULL, 32.32)) {
    266             psFree(md);
    267             exit(EXIT_FAILURE);
    268         }
    269         if (!psMetadataAddF32(md, PS_LIST_TAIL, "continuum", 0, NULL, 32.32)) {
    270             psFree(md);
    271             exit(EXIT_FAILURE);
    272         }
    273         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exptime", 0, NULL, 32.32)) {
    274             psFree(md);
    275             exit(EXIT_FAILURE);
    276         }
    277 
    278         object = skyp_emissionObjectFromMetadata(md);
    279         if (!object) {
    280             psFree(md);
    281             exit(EXIT_FAILURE);
    282         }
    283 
    284         psFree(md);
    285 
    286         if (strncmp(object->disperser_id, "a string", MAX_STRING_LENGTH)) {
    287             psFree(object);
    288             exit(EXIT_FAILURE);
    289         }
    290         if (!object->atmcomp1 == 32.32) {
    291             psFree(object);
    292             exit(EXIT_FAILURE);
    293         }
    294         if (!object->atmcomp2 == 32.32) {
    295             psFree(object);
    296             exit(EXIT_FAILURE);
    297         }
    298         if (!object->atmcomp3 == 32.32) {
    299             psFree(object);
    300             exit(EXIT_FAILURE);
    301         }
    302         if (!object->continuum == 32.32) {
    303             psFree(object);
    304             exit(EXIT_FAILURE);
    305         }
    306         if (!object->exptime == 32.32) {
    307             psFree(object);
    308             exit(EXIT_FAILURE);
    309         }
    310 
    311         psFree(object);
    312     }
    313 
    314     {
    315         psMetadata      *md;
    316         dimmRow         *object;
    317 
    318         md = psMetadataAlloc();
    319         if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, 32.32)) {
    320             psFree(md);
    321             exit(EXIT_FAILURE);
    322         }
    323         if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmay", 0, NULL, 32.32)) {
    324             psFree(md);
    325             exit(EXIT_FAILURE);
    326         }
    327         if (!psMetadataAddF32(md, PS_LIST_TAIL, "fwhm", 0, NULL, 32.32)) {
     617        if (!object->exp_time == 32.32) {
     618            psFree(object);
     619            exit(EXIT_FAILURE);
     620        }
     621        if (!object->bg == 64.64) {
     622            psFree(object);
     623            exit(EXIT_FAILURE);
     624        }
     625        if (!object->bg_stdev == 64.64) {
     626            psFree(object);
     627            exit(EXIT_FAILURE);
     628        }
     629        if (!object->bg_mean_stdev == 64.64) {
     630            psFree(object);
     631            exit(EXIT_FAILURE);
     632        }
     633        if (!object->alt == 64.64) {
     634            psFree(object);
     635            exit(EXIT_FAILURE);
     636        }
     637        if (!object->az == 64.64) {
     638            psFree(object);
     639            exit(EXIT_FAILURE);
     640        }
     641        if (!object->ccd_temp == 32.32) {
     642            psFree(object);
     643            exit(EXIT_FAILURE);
     644        }
     645        if (!object->posang == 64.64) {
     646            psFree(object);
     647            exit(EXIT_FAILURE);
     648        }
     649        if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
     650            psFree(object);
     651            exit(EXIT_FAILURE);
     652        }
     653            psFree(object);
     654            exit(EXIT_FAILURE);
     655        }
     656
     657        psFree(object);
     658    }
     659
     660    {
     661        psMetadata      *md;
     662        rawImfileRow    *object;
     663
     664        md = psMetadataAlloc();
     665        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
     666            psFree(md);
     667            exit(EXIT_FAILURE);
     668        }
     669        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
     670            psFree(md);
     671            exit(EXIT_FAILURE);
     672        }
     673        if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
     674            psFree(md);
     675            exit(EXIT_FAILURE);
     676        }
     677        if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
     678            psFree(md);
     679            exit(EXIT_FAILURE);
     680        }
     681        if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
     682            psFree(md);
     683            exit(EXIT_FAILURE);
     684        }
     685        if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
     686            psFree(md);
     687            exit(EXIT_FAILURE);
     688        }
     689        if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    328690            psFree(md);
    329691            exit(EXIT_FAILURE);
     
    337699            exit(EXIT_FAILURE);
    338700        }
    339         if (!psMetadataAddF32(md, PS_LIST_TAIL, "expttime", 0, NULL, 32.32)) {
    340             psFree(md);
    341             exit(EXIT_FAILURE);
    342         }
    343         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope_id", 0, NULL, "a string")) {
    344             psFree(md);
    345             exit(EXIT_FAILURE);
    346         }
    347 
    348         object = dimmObjectFromMetadata(md);
    349         if (!object) {
    350             psFree(md);
    351             exit(EXIT_FAILURE);
    352         }
    353 
    354         psFree(md);
    355 
    356         if (!object->sigmax == 32.32) {
    357             psFree(object);
    358             exit(EXIT_FAILURE);
    359         }
    360         if (!object->sigmay == 32.32) {
    361             psFree(object);
    362             exit(EXIT_FAILURE);
    363         }
    364         if (!object->fwhm == 32.32) {
     701        if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
     702            psFree(md);
     703            exit(EXIT_FAILURE);
     704        }
     705        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
     706            psFree(md);
     707            exit(EXIT_FAILURE);
     708        }
     709        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
     710            psFree(md);
     711            exit(EXIT_FAILURE);
     712        }
     713        if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
     714            psFree(md);
     715            exit(EXIT_FAILURE);
     716        }
     717        if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
     718            psFree(md);
     719            exit(EXIT_FAILURE);
     720        }
     721        if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
     722            psFree(md);
     723            exit(EXIT_FAILURE);
     724        }
     725        if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
     726            psFree(md);
     727            exit(EXIT_FAILURE);
     728        }
     729        if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
     730            psFree(md);
     731            exit(EXIT_FAILURE);
     732        }
     733        if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
     734            psFree(md);
     735            exit(EXIT_FAILURE);
     736        }
     737            psFree(md);
     738            exit(EXIT_FAILURE);
     739        }
     740
     741        object = rawImfileObjectFromMetadata(md);
     742        if (!object) {
     743            psFree(md);
     744            exit(EXIT_FAILURE);
     745        }
     746
     747        psFree(md);
     748
     749        if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
     750            psFree(object);
     751            exit(EXIT_FAILURE);
     752        }
     753        if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
     754            psFree(object);
     755            exit(EXIT_FAILURE);
     756        }
     757        if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
     758            psFree(object);
     759            exit(EXIT_FAILURE);
     760        }
     761        if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
     762            psFree(object);
     763            exit(EXIT_FAILURE);
     764        }
     765        if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
     766            psFree(object);
     767            exit(EXIT_FAILURE);
     768        }
     769        if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
     770            psFree(object);
     771            exit(EXIT_FAILURE);
     772        }
     773        if (!object->airmass == 32.32) {
    365774            psFree(object);
    366775            exit(EXIT_FAILURE);
     
    374783            exit(EXIT_FAILURE);
    375784        }
    376         if (!object->expttime == 32.32) {
    377             psFree(object);
    378             exit(EXIT_FAILURE);
    379         }
    380         if (strncmp(object->telescope_id, "a string", MAX_STRING_LENGTH)) {
    381             psFree(object);
    382             exit(EXIT_FAILURE);
    383         }
    384 
    385         psFree(object);
    386     }
    387 
    388     {
    389         psMetadata      *md;
    390         skyp_irRow      *object;
    391 
    392         md = psMetadataAlloc();
    393         if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 64.64)) {
    394             psFree(md);
    395             exit(EXIT_FAILURE);
    396         }
    397         if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_var", 0, NULL, 64.64)) {
    398             psFree(md);
    399             exit(EXIT_FAILURE);
    400         }
    401         if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 64.64)) {
    402             psFree(md);
    403             exit(EXIT_FAILURE);
    404         }
    405         if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 64.64)) {
    406             psFree(md);
    407             exit(EXIT_FAILURE);
    408         }
    409         if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_x", 0, NULL, 32.32)) {
    410             psFree(md);
    411             exit(EXIT_FAILURE);
    412         }
    413         if (!psMetadataAddF32(md, PS_LIST_TAIL, "fov_y", 0, NULL, 32.32)) {
    414             psFree(md);
    415             exit(EXIT_FAILURE);
    416         }
    417 
    418         object = skyp_irObjectFromMetadata(md);
    419         if (!object) {
    420             psFree(md);
    421             exit(EXIT_FAILURE);
    422         }
    423 
    424         psFree(md);
    425 
    426         if (!object->sky_bright == 64.64) {
    427             psFree(object);
    428             exit(EXIT_FAILURE);
    429         }
    430         if (!object->sky_var == 64.64) {
    431             psFree(object);
    432             exit(EXIT_FAILURE);
    433         }
    434         if (!object->ra == 64.64) {
    435             psFree(object);
    436             exit(EXIT_FAILURE);
    437         }
    438         if (!object->decl == 64.64) {
    439             psFree(object);
    440             exit(EXIT_FAILURE);
    441         }
    442         if (!object->fov_x == 32.32) {
    443             psFree(object);
    444             exit(EXIT_FAILURE);
    445         }
    446         if (!object->fov_y == 32.32) {
    447             psFree(object);
    448             exit(EXIT_FAILURE);
    449         }
    450 
    451         psFree(object);
    452     }
    453 
    454     {
    455         psMetadata      *md;
    456         domeRow         *object;
    457 
    458         md = psMetadataAlloc();
    459         if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 32.32)) {
    460             psFree(md);
    461             exit(EXIT_FAILURE);
    462         }
    463         if (!psMetadataAdd(md, PS_LIST_TAIL, "open", PS_DATA_BOOL, NULL, true)) {
    464             psFree(md);
    465             exit(EXIT_FAILURE);
    466         }
    467         if (!psMetadataAdd(md, PS_LIST_TAIL, "light", PS_DATA_BOOL, NULL, true)) {
    468             psFree(md);
    469             exit(EXIT_FAILURE);
    470         }
    471         if (!psMetadataAdd(md, PS_LIST_TAIL, "track", PS_DATA_BOOL, NULL, true)) {
    472             psFree(md);
    473             exit(EXIT_FAILURE);
    474         }
    475 
    476         object = domeObjectFromMetadata(md);
    477         if (!object) {
    478             psFree(md);
    479             exit(EXIT_FAILURE);
    480         }
    481 
    482         psFree(md);
    483 
    484         if (!object->az == 32.32) {
    485             psFree(object);
    486             exit(EXIT_FAILURE);
    487         }
    488         if (!object->open == true) {
    489             psFree(object);
    490             exit(EXIT_FAILURE);
    491         }
    492         if (!object->light == true) {
    493             psFree(object);
    494             exit(EXIT_FAILURE);
    495         }
    496         if (!object->track == true) {
    497             psFree(object);
    498             exit(EXIT_FAILURE);
    499         }
    500 
    501         psFree(object);
    502     }
    503 
    504     {
    505         psMetadata      *md;
    506         telescopeRow    *object;
    507 
    508         md = psMetadataAlloc();
    509         if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, "a string")) {
    510             psFree(md);
    511             exit(EXIT_FAILURE);
    512         }
    513         if (!psMetadataAddF32(md, PS_LIST_TAIL, "alt", 0, NULL, 32.32)) {
    514             psFree(md);
    515             exit(EXIT_FAILURE);
    516         }
    517         if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 32.32)) {
    518             psFree(md);
    519             exit(EXIT_FAILURE);
    520         }
    521         if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 64.64)) {
    522             psFree(md);
    523             exit(EXIT_FAILURE);
    524         }
    525         if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 64.64)) {
    526             psFree(md);
    527             exit(EXIT_FAILURE);
    528         }
    529 
    530         object = telescopeObjectFromMetadata(md);
    531         if (!object) {
    532             psFree(md);
    533             exit(EXIT_FAILURE);
    534         }
    535 
    536         psFree(md);
    537 
    538         if (strncmp(object->guide, "a string", MAX_STRING_LENGTH)) {
    539             psFree(object);
    540             exit(EXIT_FAILURE);
    541         }
    542         if (!object->alt == 32.32) {
    543             psFree(object);
    544             exit(EXIT_FAILURE);
    545         }
    546         if (!object->az == 32.32) {
    547             psFree(object);
    548             exit(EXIT_FAILURE);
    549         }
    550         if (!object->ra == 64.64) {
    551             psFree(object);
    552             exit(EXIT_FAILURE);
    553         }
    554         if (!object->decl == 64.64) {
    555             psFree(object);
    556             exit(EXIT_FAILURE);
    557         }
    558 
    559         psFree(object);
    560     }
    561 
    562     {
    563         psMetadata      *md;
    564         summitExpRow    *object;
    565 
    566         md = psMetadataAlloc();
    567         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
    568             psFree(md);
    569             exit(EXIT_FAILURE);
    570         }
    571         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    572             psFree(md);
    573             exit(EXIT_FAILURE);
    574         }
    575         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    576             psFree(md);
    577             exit(EXIT_FAILURE);
    578         }
    579         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    580             psFree(md);
    581             exit(EXIT_FAILURE);
    582         }
    583         if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
    584             psFree(md);
    585             exit(EXIT_FAILURE);
    586         }
    587 
    588         object = summitExpObjectFromMetadata(md);
    589         if (!object) {
    590             psFree(md);
    591             exit(EXIT_FAILURE);
    592         }
    593 
    594         psFree(md);
    595 
    596         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    597             psFree(object);
    598             exit(EXIT_FAILURE);
    599         }
    600         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    601             psFree(object);
    602             exit(EXIT_FAILURE);
    603         }
    604         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    605             psFree(object);
    606             exit(EXIT_FAILURE);
    607         }
    608         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    609             psFree(object);
    610             exit(EXIT_FAILURE);
    611         }
    612         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    613             psFree(object);
    614             exit(EXIT_FAILURE);
    615         }
    616 
    617         psFree(object);
    618     }
    619 
    620     {
    621         psMetadata      *md;
    622         pzPendingExpRow *object;
    623 
    624         md = psMetadataAlloc();
    625         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
    626             psFree(md);
    627             exit(EXIT_FAILURE);
    628         }
    629         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    630             psFree(md);
    631             exit(EXIT_FAILURE);
    632         }
    633         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    634             psFree(md);
    635             exit(EXIT_FAILURE);
    636         }
    637         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    638             psFree(md);
    639             exit(EXIT_FAILURE);
    640         }
    641         if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
    642             psFree(md);
    643             exit(EXIT_FAILURE);
    644         }
    645 
    646         object = pzPendingExpObjectFromMetadata(md);
    647         if (!object) {
    648             psFree(md);
    649             exit(EXIT_FAILURE);
    650         }
    651 
    652         psFree(md);
    653 
    654         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    655             psFree(object);
    656             exit(EXIT_FAILURE);
    657         }
    658         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    659             psFree(object);
    660             exit(EXIT_FAILURE);
    661         }
    662         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    663             psFree(object);
    664             exit(EXIT_FAILURE);
    665         }
    666         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    667             psFree(object);
    668             exit(EXIT_FAILURE);
    669         }
    670         if (!object->imfiles == -32) {
    671             psFree(object);
    672             exit(EXIT_FAILURE);
    673         }
    674 
    675         psFree(object);
    676     }
    677 
    678     {
    679         psMetadata      *md;
    680         pzPendingImfileRow *object;
    681 
    682         md = psMetadataAlloc();
    683         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
    684             psFree(md);
    685             exit(EXIT_FAILURE);
    686         }
    687         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    688             psFree(md);
    689             exit(EXIT_FAILURE);
    690         }
    691         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    692             psFree(md);
    693             exit(EXIT_FAILURE);
    694         }
    695         if (!psMetadataAddS32(md, PS_LIST_TAIL, "bytes", 0, NULL, -32)) {
    696             psFree(md);
    697             exit(EXIT_FAILURE);
    698         }
    699         if (!psMetadataAddStr(md, PS_LIST_TAIL, "md5sum", 0, NULL, "a string")) {
    700             psFree(md);
    701             exit(EXIT_FAILURE);
    702         }
    703         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
    704             psFree(md);
    705             exit(EXIT_FAILURE);
    706         }
    707         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
    708             psFree(md);
    709             exit(EXIT_FAILURE);
    710         }
    711         if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
    712             psFree(md);
    713             exit(EXIT_FAILURE);
    714         }
    715 
    716         object = pzPendingImfileObjectFromMetadata(md);
    717         if (!object) {
    718             psFree(md);
    719             exit(EXIT_FAILURE);
    720         }
    721 
    722         psFree(md);
    723 
    724         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    725             psFree(object);
    726             exit(EXIT_FAILURE);
    727         }
    728         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    729             psFree(object);
    730             exit(EXIT_FAILURE);
    731         }
    732         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    733             psFree(object);
    734             exit(EXIT_FAILURE);
    735         }
    736         if (!object->bytes == -32) {
    737             psFree(object);
    738             exit(EXIT_FAILURE);
    739         }
    740         if (strncmp(object->md5sum, "a string", MAX_STRING_LENGTH)) {
    741             psFree(object);
    742             exit(EXIT_FAILURE);
    743         }
    744         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    745             psFree(object);
    746             exit(EXIT_FAILURE);
    747         }
    748         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    749             psFree(object);
    750             exit(EXIT_FAILURE);
    751         }
    752         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    753             psFree(object);
    754             exit(EXIT_FAILURE);
    755         }
    756 
    757         psFree(object);
    758     }
    759 
    760     {
    761         psMetadata      *md;
    762         newExpRow       *object;
    763 
    764         md = psMetadataAlloc();
    765         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
    766             psFree(md);
    767             exit(EXIT_FAILURE);
    768         }
    769         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, NULL, "a string")) {
    770             psFree(md);
    771             exit(EXIT_FAILURE);
    772         }
    773         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    774             psFree(md);
    775             exit(EXIT_FAILURE);
    776         }
    777         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    778             psFree(md);
    779             exit(EXIT_FAILURE);
    780         }
    781         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    782             psFree(md);
    783             exit(EXIT_FAILURE);
    784         }
    785         if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
    786             psFree(md);
    787             exit(EXIT_FAILURE);
    788         }
    789 
    790         object = newExpObjectFromMetadata(md);
    791         if (!object) {
    792             psFree(md);
    793             exit(EXIT_FAILURE);
    794         }
    795 
    796         psFree(md);
    797 
    798         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    799             psFree(object);
    800             exit(EXIT_FAILURE);
    801         }
    802         if (strncmp(object->exp_id, "a string", MAX_STRING_LENGTH)) {
    803             psFree(object);
    804             exit(EXIT_FAILURE);
    805         }
    806         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    807             psFree(object);
    808             exit(EXIT_FAILURE);
    809         }
    810         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    811             psFree(object);
    812             exit(EXIT_FAILURE);
    813         }
    814         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    815             psFree(object);
    816             exit(EXIT_FAILURE);
    817         }
    818         if (!object->imfiles == -32) {
    819             psFree(object);
    820             exit(EXIT_FAILURE);
    821         }
    822 
    823         psFree(object);
    824     }
    825 
    826     {
    827         psMetadata      *md;
    828         newImfileRow    *object;
    829 
    830         md = psMetadataAlloc();
    831         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
    832             psFree(md);
    833             exit(EXIT_FAILURE);
    834         }
    835         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
    836             psFree(md);
    837             exit(EXIT_FAILURE);
    838         }
    839         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
    840             psFree(md);
    841             exit(EXIT_FAILURE);
    842         }
    843         if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
    844             psFree(md);
    845             exit(EXIT_FAILURE);
    846         }
    847 
    848         object = newImfileObjectFromMetadata(md);
    849         if (!object) {
    850             psFree(md);
    851             exit(EXIT_FAILURE);
    852         }
    853 
    854         psFree(md);
    855 
    856         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    857             psFree(object);
    858             exit(EXIT_FAILURE);
    859         }
    860         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    861             psFree(object);
    862             exit(EXIT_FAILURE);
    863         }
    864         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    865             psFree(object);
    866             exit(EXIT_FAILURE);
    867         }
    868         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    869             psFree(object);
    870             exit(EXIT_FAILURE);
    871         }
    872 
    873         psFree(object);
    874     }
    875 
    876     {
    877         psMetadata      *md;
    878         rawDetrendExpRow *object;
    879 
    880         md = psMetadataAlloc();
    881         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
    882             psFree(md);
    883             exit(EXIT_FAILURE);
    884         }
    885         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    886             psFree(md);
    887             exit(EXIT_FAILURE);
    888         }
    889         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    890             psFree(md);
    891             exit(EXIT_FAILURE);
    892         }
    893         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    894             psFree(md);
    895             exit(EXIT_FAILURE);
    896         }
    897         if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
    898             psFree(md);
    899             exit(EXIT_FAILURE);
    900         }
    901         if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
    902             psFree(md);
    903             exit(EXIT_FAILURE);
    904         }
    905         if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    906             psFree(md);
    907             exit(EXIT_FAILURE);
    908         }
    909         if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 64.64)) {
    910             psFree(md);
    911             exit(EXIT_FAILURE);
    912         }
    913         if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 64.64)) {
    914             psFree(md);
    915             exit(EXIT_FAILURE);
    916         }
    917         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
    918             psFree(md);
    919             exit(EXIT_FAILURE);
    920         }
    921         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
    922             psFree(md);
    923             exit(EXIT_FAILURE);
    924         }
    925         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
    926             psFree(md);
    927             exit(EXIT_FAILURE);
    928         }
    929         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
    930             psFree(md);
    931             exit(EXIT_FAILURE);
    932         }
    933         if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
    934             psFree(md);
    935             exit(EXIT_FAILURE);
    936         }
    937         if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
    938             psFree(md);
    939             exit(EXIT_FAILURE);
    940         }
    941         if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
    942             psFree(md);
    943             exit(EXIT_FAILURE);
    944         }
    945         if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
    946             psFree(md);
    947             exit(EXIT_FAILURE);
    948         }
    949         if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
    950             psFree(md);
    951             exit(EXIT_FAILURE);
    952         }
    953 
    954         object = rawDetrendExpObjectFromMetadata(md);
    955         if (!object) {
    956             psFree(md);
    957             exit(EXIT_FAILURE);
    958         }
    959 
    960         psFree(md);
    961 
    962         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    963             psFree(object);
    964             exit(EXIT_FAILURE);
    965         }
    966         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    967             psFree(object);
    968             exit(EXIT_FAILURE);
    969         }
    970         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    971             psFree(object);
    972             exit(EXIT_FAILURE);
    973         }
    974         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    975             psFree(object);
    976             exit(EXIT_FAILURE);
    977         }
    978         if (!object->imfiles == -32) {
    979             psFree(object);
    980             exit(EXIT_FAILURE);
    981         }
    982         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    983             psFree(object);
    984             exit(EXIT_FAILURE);
    985         }
    986         if (!object->airmass == 32.32) {
    987             psFree(object);
    988             exit(EXIT_FAILURE);
    989         }
    990         if (!object->ra == 64.64) {
    991             psFree(object);
    992             exit(EXIT_FAILURE);
    993         }
    994         if (!object->decl == 64.64) {
    995             psFree(object);
    996             exit(EXIT_FAILURE);
    997         }
    998785        if (!object->exp_time == 32.32) {
    999786            psFree(object);
     
    1032819            exit(EXIT_FAILURE);
    1033820        }
    1034 
    1035         psFree(object);
    1036     }
    1037 
    1038     {
    1039         psMetadata      *md;
    1040         rawScienceExpRow *object;
    1041 
    1042         md = psMetadataAlloc();
    1043         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
    1044             psFree(md);
    1045             exit(EXIT_FAILURE);
    1046         }
    1047         if (!psMetadataAddStr(md, PS_LIST_TAIL, "camera", 0, NULL, "a string")) {
    1048             psFree(md);
    1049             exit(EXIT_FAILURE);
    1050         }
    1051         if (!psMetadataAddStr(md, PS_LIST_TAIL, "telescope", 0, NULL, "a string")) {
    1052             psFree(md);
    1053             exit(EXIT_FAILURE);
    1054         }
    1055         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    1056             psFree(md);
    1057             exit(EXIT_FAILURE);
    1058         }
    1059         if (!psMetadataAddS32(md, PS_LIST_TAIL, "imfiles", 0, NULL, -32)) {
    1060             psFree(md);
    1061             exit(EXIT_FAILURE);
    1062         }
    1063         if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
    1064             psFree(md);
    1065             exit(EXIT_FAILURE);
    1066         }
    1067         if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    1068             psFree(md);
    1069             exit(EXIT_FAILURE);
    1070         }
    1071         if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 64.64)) {
    1072             psFree(md);
    1073             exit(EXIT_FAILURE);
    1074         }
    1075         if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 64.64)) {
    1076             psFree(md);
    1077             exit(EXIT_FAILURE);
    1078         }
    1079         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
    1080             psFree(md);
    1081             exit(EXIT_FAILURE);
    1082         }
    1083         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
    1084             psFree(md);
    1085             exit(EXIT_FAILURE);
    1086         }
    1087         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
    1088             psFree(md);
    1089             exit(EXIT_FAILURE);
    1090         }
    1091         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
    1092             psFree(md);
    1093             exit(EXIT_FAILURE);
    1094         }
    1095         if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
    1096             psFree(md);
    1097             exit(EXIT_FAILURE);
    1098         }
    1099         if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
    1100             psFree(md);
    1101             exit(EXIT_FAILURE);
    1102         }
    1103         if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
    1104             psFree(md);
    1105             exit(EXIT_FAILURE);
    1106         }
    1107         if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
    1108             psFree(md);
    1109             exit(EXIT_FAILURE);
    1110         }
    1111         if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
    1112             psFree(md);
    1113             exit(EXIT_FAILURE);
    1114         }
    1115 
    1116         object = rawScienceExpObjectFromMetadata(md);
    1117         if (!object) {
    1118             psFree(md);
    1119             exit(EXIT_FAILURE);
    1120         }
    1121 
    1122         psFree(md);
    1123 
    1124         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    1125             psFree(object);
    1126             exit(EXIT_FAILURE);
    1127         }
    1128         if (strncmp(object->camera, "a string", MAX_STRING_LENGTH)) {
    1129             psFree(object);
    1130             exit(EXIT_FAILURE);
    1131         }
    1132         if (strncmp(object->telescope, "a string", MAX_STRING_LENGTH)) {
    1133             psFree(object);
    1134             exit(EXIT_FAILURE);
    1135         }
    1136         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    1137             psFree(object);
    1138             exit(EXIT_FAILURE);
    1139         }
    1140         if (!object->imfiles == -32) {
    1141             psFree(object);
    1142             exit(EXIT_FAILURE);
    1143         }
    1144         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    1145             psFree(object);
    1146             exit(EXIT_FAILURE);
    1147         }
    1148         if (!object->airmass == 32.32) {
    1149             psFree(object);
    1150             exit(EXIT_FAILURE);
    1151         }
    1152         if (!object->ra == 64.64) {
    1153             psFree(object);
    1154             exit(EXIT_FAILURE);
    1155         }
    1156         if (!object->decl == 64.64) {
    1157             psFree(object);
    1158             exit(EXIT_FAILURE);
    1159         }
    1160         if (!object->exp_time == 32.32) {
    1161             psFree(object);
    1162             exit(EXIT_FAILURE);
    1163         }
    1164         if (!object->bg == 64.64) {
    1165             psFree(object);
    1166             exit(EXIT_FAILURE);
    1167         }
    1168         if (!object->bg_stdev == 64.64) {
    1169             psFree(object);
    1170             exit(EXIT_FAILURE);
    1171         }
    1172         if (!object->bg_mean_stdev == 64.64) {
    1173             psFree(object);
    1174             exit(EXIT_FAILURE);
    1175         }
    1176         if (!object->alt == 64.64) {
    1177             psFree(object);
    1178             exit(EXIT_FAILURE);
    1179         }
    1180         if (!object->az == 64.64) {
    1181             psFree(object);
    1182             exit(EXIT_FAILURE);
    1183         }
    1184         if (!object->ccd_temp == 32.32) {
    1185             psFree(object);
    1186             exit(EXIT_FAILURE);
    1187         }
    1188         if (!object->posang == 64.64) {
    1189             psFree(object);
    1190             exit(EXIT_FAILURE);
    1191         }
    1192         if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
    1193             psFree(object);
    1194             exit(EXIT_FAILURE);
    1195         }
    1196 
    1197         psFree(object);
    1198     }
    1199 
    1200     {
    1201         psMetadata      *md;
    1202         rawImfileRow    *object;
    1203 
    1204         md = psMetadataAlloc();
    1205         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, "a string")) {
    1206             psFree(md);
    1207             exit(EXIT_FAILURE);
    1208         }
    1209         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class", 0, NULL, "a string")) {
    1210             psFree(md);
    1211             exit(EXIT_FAILURE);
    1212         }
    1213         if (!psMetadataAddStr(md, PS_LIST_TAIL, "class_id", 0, NULL, "a string")) {
    1214             psFree(md);
    1215             exit(EXIT_FAILURE);
    1216         }
    1217         if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "a string")) {
    1218             psFree(md);
    1219             exit(EXIT_FAILURE);
    1220         }
    1221         if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_type", 0, NULL, "a string")) {
    1222             psFree(md);
    1223             exit(EXIT_FAILURE);
    1224         }
    1225         if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "a string")) {
    1226             psFree(md);
    1227             exit(EXIT_FAILURE);
    1228         }
    1229         if (!psMetadataAddF32(md, PS_LIST_TAIL, "airmass", 0, NULL, 32.32)) {
    1230             psFree(md);
    1231             exit(EXIT_FAILURE);
    1232         }
    1233         if (!psMetadataAddF64(md, PS_LIST_TAIL, "ra", 0, NULL, 64.64)) {
    1234             psFree(md);
    1235             exit(EXIT_FAILURE);
    1236         }
    1237         if (!psMetadataAddF64(md, PS_LIST_TAIL, "decl", 0, NULL, 64.64)) {
    1238             psFree(md);
    1239             exit(EXIT_FAILURE);
    1240         }
    1241         if (!psMetadataAddF32(md, PS_LIST_TAIL, "exp_time", 0, NULL, 32.32)) {
    1242             psFree(md);
    1243             exit(EXIT_FAILURE);
    1244         }
    1245         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 64.64)) {
    1246             psFree(md);
    1247             exit(EXIT_FAILURE);
    1248         }
    1249         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 64.64)) {
    1250             psFree(md);
    1251             exit(EXIT_FAILURE);
    1252         }
    1253         if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 64.64)) {
    1254             psFree(md);
    1255             exit(EXIT_FAILURE);
    1256         }
    1257         if (!psMetadataAddF64(md, PS_LIST_TAIL, "alt", 0, NULL, 64.64)) {
    1258             psFree(md);
    1259             exit(EXIT_FAILURE);
    1260         }
    1261         if (!psMetadataAddF64(md, PS_LIST_TAIL, "az", 0, NULL, 64.64)) {
    1262             psFree(md);
    1263             exit(EXIT_FAILURE);
    1264         }
    1265         if (!psMetadataAddF32(md, PS_LIST_TAIL, "ccd_temp", 0, NULL, 32.32)) {
    1266             psFree(md);
    1267             exit(EXIT_FAILURE);
    1268         }
    1269         if (!psMetadataAddF64(md, PS_LIST_TAIL, "posang", 0, NULL, 64.64)) {
    1270             psFree(md);
    1271             exit(EXIT_FAILURE);
    1272         }
    1273         if (!psMetadataAddStr(md, PS_LIST_TAIL, "object", 0, NULL, "a string")) {
    1274             psFree(md);
    1275             exit(EXIT_FAILURE);
    1276         }
    1277 
    1278         object = rawImfileObjectFromMetadata(md);
    1279         if (!object) {
    1280             psFree(md);
    1281             exit(EXIT_FAILURE);
    1282         }
    1283 
    1284         psFree(md);
    1285 
    1286         if (strncmp(object->exp_tag, "a string", MAX_STRING_LENGTH)) {
    1287             psFree(object);
    1288             exit(EXIT_FAILURE);
    1289         }
    1290         if (strncmp(object->class, "a string", MAX_STRING_LENGTH)) {
    1291             psFree(object);
    1292             exit(EXIT_FAILURE);
    1293         }
    1294         if (strncmp(object->class_id, "a string", MAX_STRING_LENGTH)) {
    1295             psFree(object);
    1296             exit(EXIT_FAILURE);
    1297         }
    1298         if (strncmp(object->uri, "a string", MAX_STRING_LENGTH)) {
    1299             psFree(object);
    1300             exit(EXIT_FAILURE);
    1301         }
    1302         if (strncmp(object->exp_type, "a string", MAX_STRING_LENGTH)) {
    1303             psFree(object);
    1304             exit(EXIT_FAILURE);
    1305         }
    1306         if (strncmp(object->filter, "a string", MAX_STRING_LENGTH)) {
    1307             psFree(object);
    1308             exit(EXIT_FAILURE);
    1309         }
    1310         if (!object->airmass == 32.32) {
    1311             psFree(object);
    1312             exit(EXIT_FAILURE);
    1313         }
    1314         if (!object->ra == 64.64) {
    1315             psFree(object);
    1316             exit(EXIT_FAILURE);
    1317         }
    1318         if (!object->decl == 64.64) {
    1319             psFree(object);
    1320             exit(EXIT_FAILURE);
    1321         }
    1322         if (!object->exp_time == 32.32) {
    1323             psFree(object);
    1324             exit(EXIT_FAILURE);
    1325         }
    1326         if (!object->bg == 64.64) {
    1327             psFree(object);
    1328             exit(EXIT_FAILURE);
    1329         }
    1330         if (!object->bg_stdev == 64.64) {
    1331             psFree(object);
    1332             exit(EXIT_FAILURE);
    1333         }
    1334         if (!object->bg_mean_stdev == 64.64) {
    1335             psFree(object);
    1336             exit(EXIT_FAILURE);
    1337         }
    1338         if (!object->alt == 64.64) {
    1339             psFree(object);
    1340             exit(EXIT_FAILURE);
    1341         }
    1342         if (!object->az == 64.64) {
    1343             psFree(object);
    1344             exit(EXIT_FAILURE);
    1345         }
    1346         if (!object->ccd_temp == 32.32) {
    1347             psFree(object);
    1348             exit(EXIT_FAILURE);
    1349         }
    1350         if (!object->posang == 64.64) {
    1351             psFree(object);
    1352             exit(EXIT_FAILURE);
    1353         }
    1354         if (strncmp(object->object, "a string", MAX_STRING_LENGTH)) {
    1355821            psFree(object);
    1356822            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/selectrowsfits.c

    r9301 r9684  
    2121        }
    2222
    23         if (!weatherSelectRowsFits(dbh, fits, NULL, 1)) {
    24             exit(EXIT_FAILURE);
    25         }
    26 
    27         psFree(fits);
    28         psDBCleanup(dbh);
    29     }
    30 
    31     {
    32         psDB            *dbh;
    33         psFits          *fits;
    34 
    35         dbh = psDBInit("localhost", "test", NULL, "test");
    36         if (!dbh) {
    37             exit(EXIT_FAILURE);
    38         }
    39 
    40         fits = psFitsOpen(TMP_FILENAME, "w");
    41         if (!fits) {
    42             exit(EXIT_FAILURE);
    43         }
    44 
    45         if (!skyp_transparencySelectRowsFits(dbh, fits, NULL, 1)) {
    46             exit(EXIT_FAILURE);
    47         }
    48 
    49         psFree(fits);
    50         psDBCleanup(dbh);
    51     }
    52 
    53     {
    54         psDB            *dbh;
    55         psFits          *fits;
    56 
    57         dbh = psDBInit("localhost", "test", NULL, "test");
    58         if (!dbh) {
    59             exit(EXIT_FAILURE);
    60         }
    61 
    62         fits = psFitsOpen(TMP_FILENAME, "w");
    63         if (!fits) {
    64             exit(EXIT_FAILURE);
    65         }
    66 
    67         if (!skyp_absorptionSelectRowsFits(dbh, fits, NULL, 1)) {
    68             exit(EXIT_FAILURE);
    69         }
    70 
    71         psFree(fits);
    72         psDBCleanup(dbh);
    73     }
    74 
    75     {
    76         psDB            *dbh;
    77         psFits          *fits;
    78 
    79         dbh = psDBInit("localhost", "test", NULL, "test");
    80         if (!dbh) {
    81             exit(EXIT_FAILURE);
    82         }
    83 
    84         fits = psFitsOpen(TMP_FILENAME, "w");
    85         if (!fits) {
    86             exit(EXIT_FAILURE);
    87         }
    88 
    89         if (!skyp_emissionSelectRowsFits(dbh, fits, NULL, 1)) {
    90             exit(EXIT_FAILURE);
    91         }
    92 
    93         psFree(fits);
    94         psDBCleanup(dbh);
    95     }
    96 
    97     {
    98         psDB            *dbh;
    99         psFits          *fits;
    100 
    101         dbh = psDBInit("localhost", "test", NULL, "test");
    102         if (!dbh) {
    103             exit(EXIT_FAILURE);
    104         }
    105 
    106         fits = psFitsOpen(TMP_FILENAME, "w");
    107         if (!fits) {
    108             exit(EXIT_FAILURE);
    109         }
    110 
    111         if (!dimmSelectRowsFits(dbh, fits, NULL, 1)) {
    112             exit(EXIT_FAILURE);
    113         }
    114 
    115         psFree(fits);
    116         psDBCleanup(dbh);
    117     }
    118 
    119     {
    120         psDB            *dbh;
    121         psFits          *fits;
    122 
    123         dbh = psDBInit("localhost", "test", NULL, "test");
    124         if (!dbh) {
    125             exit(EXIT_FAILURE);
    126         }
    127 
    128         fits = psFitsOpen(TMP_FILENAME, "w");
    129         if (!fits) {
    130             exit(EXIT_FAILURE);
    131         }
    132 
    133         if (!skyp_irSelectRowsFits(dbh, fits, NULL, 1)) {
    134             exit(EXIT_FAILURE);
    135         }
    136 
    137         psFree(fits);
    138         psDBCleanup(dbh);
    139     }
    140 
    141     {
    142         psDB            *dbh;
    143         psFits          *fits;
    144 
    145         dbh = psDBInit("localhost", "test", NULL, "test");
    146         if (!dbh) {
    147             exit(EXIT_FAILURE);
    148         }
    149 
    150         fits = psFitsOpen(TMP_FILENAME, "w");
    151         if (!fits) {
    152             exit(EXIT_FAILURE);
    153         }
    154 
    155         if (!domeSelectRowsFits(dbh, fits, NULL, 1)) {
    156             exit(EXIT_FAILURE);
    157         }
    158 
    159         psFree(fits);
    160         psDBCleanup(dbh);
    161     }
    162 
    163     {
    164         psDB            *dbh;
    165         psFits          *fits;
    166 
    167         dbh = psDBInit("localhost", "test", NULL, "test");
    168         if (!dbh) {
    169             exit(EXIT_FAILURE);
    170         }
    171 
    172         fits = psFitsOpen(TMP_FILENAME, "w");
    173         if (!fits) {
    174             exit(EXIT_FAILURE);
    175         }
    176 
    177         if (!telescopeSelectRowsFits(dbh, fits, NULL, 1)) {
    178             exit(EXIT_FAILURE);
    179         }
    180 
    181         psFree(fits);
    182         psDBCleanup(dbh);
    183     }
    184 
    185     {
    186         psDB            *dbh;
    187         psFits          *fits;
    188 
    189         dbh = psDBInit("localhost", "test", NULL, "test");
    190         if (!dbh) {
    191             exit(EXIT_FAILURE);
    192         }
    193 
    194         fits = psFitsOpen(TMP_FILENAME, "w");
    195         if (!fits) {
    196             exit(EXIT_FAILURE);
    197         }
    198 
    19923        if (!summitExpSelectRowsFits(dbh, fits, NULL, 1)) {
    20024            exit(EXIT_FAILURE);
Note: See TracChangeset for help on using the changeset viewer.