IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9788


Ignore:
Timestamp:
Oct 30, 2006, 11:55:36 AM (20 years ago)
Author:
jhoblitt
Message:

VERSION 0.0.53

Location:
trunk/ippdb
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • trunk/ippdb/Makefile.am

    r9783 r9788  
    2626    $(top_builddir)/docs/man/man3/p3PendingExpRow.3 \
    2727    $(top_builddir)/docs/man/man3/p3ProcessedExpRow.3 \
     28    $(top_builddir)/docs/man/man3/p3MaskRow.3 \
    2829    $(top_builddir)/docs/man/man3/detRunRow.3 \
    2930    $(top_builddir)/docs/man/man3/detInputExpRow.3 \
     
    4142
    4243
    43 docs/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/p2MaskRow.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:
     44docs/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/p2MaskRow.3 docs/man/man3/p2ProcessedImfileRow.3 docs/man/man3/p3PendingExpRow.3 docs/man/man3/p3ProcessedExpRow.3 docs/man/man3/p3MaskRow.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:
    4445        $(DOXYGEN)
    4546
  • trunk/ippdb/configure.ac

    r9783 r9788  
    77AC_PREREQ(2.59)
    88
    9 AC_INIT([ippdb], [0.0.52], [pan-starrs.ifa.hawaii.edu])
     9AC_INIT([ippdb], [0.0.53], [pan-starrs.ifa.hawaii.edu])
    1010AC_CONFIG_SRCDIR([ippdb.pc.in])
    1111
  • trunk/ippdb/src/ippdb.c

    r9783 r9788  
    4747#define P3PENDINGEXP_TABLE_NAME "p3PendingExp"
    4848#define P3PROCESSEDEXP_TABLE_NAME "p3ProcessedExp"
     49#define P3MASK_TABLE_NAME "p3Mask"
    4950#define DETRUN_TABLE_NAME "detRun"
    5051#define DETINPUTEXP_TABLE_NAME "detInputExp"
     
    60306031static void p3PendingExpRowFree(p3PendingExpRow *object);
    60316032
    6032 p3PendingExpRow *p3PendingExpRowAlloc(const char *exp_tag, psS32 p2_version, psS32 p3_version)
     6033p3PendingExpRow *p3PendingExpRowAlloc(const char *exp_tag, psS32 p2_version, psS32 p3_version, const char *label)
    60336034{
    60346035    p3PendingExpRow *_object;
     
    60406041    _object->p2_version = p2_version;
    60416042    _object->p3_version = p3_version;
     6043    _object->label = psStringCopy(label);
    60426044
    60436045    return _object;
     
    60476049{
    60486050    psFree(object->exp_tag);
     6051    psFree(object->label);
    60496052}
    60506053
     
    60676070        return false;
    60686071    }
     6072    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) {
     6073        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6074        psFree(md);
     6075        return false;
     6076    }
    60696077
    60706078    bool status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md);
     
    60806088}
    60816089
    6082 bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version)
     6090bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version, const char *label)
    60836091{
    60846092    psMetadata *md = psMetadataAlloc();
     
    60956103    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
    60966104        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
     6105        psFree(md);
     6106        return false;
     6107    }
     6108    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) {
     6109        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
    60976110        psFree(md);
    60986111        return false;
     
    61216134bool p3PendingExpInsertObject(psDB *dbh, p3PendingExpRow *object)
    61226135{
    6123     return p3PendingExpInsert(dbh, object->exp_tag, object->p2_version, object->p3_version);
     6136    return p3PendingExpInsert(dbh, object->exp_tag, object->p2_version, object->p3_version, object->label);
    61246137}
    61256138
     
    62096222        return false;
    62106223    }
     6224    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) {
     6225        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6226        psFree(md);
     6227        return false;
     6228    }
    62116229
    62126230
     
    62336251        return false;
    62346252    }
    6235 
    6236     return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version);
     6253    char* label = psMetadataLookupPtr(&status, md, "label");
     6254    if (!status) {
     6255        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label");
     6256        return false;
     6257    }
     6258
     6259    return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version, label);
    62376260}
    62386261psArray *p3PendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    63316354static void p3ProcessedExpRowFree(p3ProcessedExpRow *object);
    63326355
    6333 p3ProcessedExpRow *p3ProcessedExpRowAlloc(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)
     6356p3ProcessedExpRow *p3ProcessedExpRowAlloc(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, const char *label)
    63346357{
    63356358    p3ProcessedExpRow *_object;
     
    63536376    _object->p2_version = p2_version;
    63546377    _object->p3_version = p3_version;
     6378    _object->label = psStringCopy(label);
    63556379
    63566380    return _object;
     
    63646388    psFree(object->b1_uri);
    63656389    psFree(object->b2_uri);
     6390    psFree(object->label);
    63666391}
    63676392
     
    64446469        return false;
    64456470    }
     6471    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) {
     6472        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6473        psFree(md);
     6474        return false;
     6475    }
    64466476
    64476477    bool status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md);
     
    64576487}
    64586488
    6459 bool 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)
     6489bool 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, const char *label)
    64606490{
    64616491    psMetadata *md = psMetadataAlloc();
     
    65326562    if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) {
    65336563        psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version");
     6564        psFree(md);
     6565        return false;
     6566    }
     6567    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) {
     6568        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
    65346569        psFree(md);
    65356570        return false;
     
    65586593bool p3ProcessedExpInsertObject(psDB *dbh, p3ProcessedExpRow *object)
    65596594{
    6560     return p3ProcessedExpInsert(dbh, object->exp_tag, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->b1_uri, object->b2_uri, object->zp_mean, object->zp_stdev, object->p2_version, object->p3_version);
     6595    return p3ProcessedExpInsert(dbh, object->exp_tag, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->b1_uri, object->b2_uri, object->zp_mean, object->zp_stdev, object->p2_version, object->p3_version, object->label);
    65616596}
    65626597
     
    67066741        return false;
    67076742    }
     6743    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) {
     6744        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6745        psFree(md);
     6746        return false;
     6747    }
    67086748
    67096749
     
    67906830        return false;
    67916831    }
    6792 
    6793     return p3ProcessedExpRowAlloc(exp_tag, uri, recipe, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, b1_uri, b2_uri, zp_mean, zp_stdev, p2_version, p3_version);
     6832    char* label = psMetadataLookupPtr(&status, md, "label");
     6833    if (!status) {
     6834        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label");
     6835        return false;
     6836    }
     6837
     6838    return p3ProcessedExpRowAlloc(exp_tag, uri, recipe, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, b1_uri, b2_uri, zp_mean, zp_stdev, p2_version, p3_version, label);
    67946839}
    67956840psArray *p3ProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     
    68866931    return true;
    68876932}
     6933static void p3MaskRowFree(p3MaskRow *object);
     6934
     6935p3MaskRow *p3MaskRowAlloc(const char *label)
     6936{
     6937    p3MaskRow       *_object;
     6938
     6939    _object = psAlloc(sizeof(p3MaskRow));
     6940    psMemSetDeallocator(_object, (psFreeFunc)p3MaskRowFree);
     6941
     6942    _object->label = psStringCopy(label);
     6943
     6944    return _object;
     6945}
     6946
     6947static void p3MaskRowFree(p3MaskRow *object)
     6948{
     6949    psFree(object->label);
     6950}
     6951
     6952bool p3MaskCreateTable(psDB *dbh)
     6953{
     6954    psMetadata *md = psMetadataAlloc();
     6955    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "Primary Key", "64")) {
     6956        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6957        psFree(md);
     6958        return false;
     6959    }
     6960
     6961    bool status = psDBCreateTable(dbh, P3MASK_TABLE_NAME, md);
     6962
     6963    psFree(md);
     6964
     6965    return status;
     6966}
     6967
     6968bool p3MaskDropTable(psDB *dbh)
     6969{
     6970    return psDBDropTable(dbh, P3MASK_TABLE_NAME);
     6971}
     6972
     6973bool p3MaskInsert(psDB * dbh, const char *label)
     6974{
     6975    psMetadata *md = psMetadataAlloc();
     6976    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) {
     6977        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     6978        psFree(md);
     6979        return false;
     6980    }
     6981
     6982    bool status = psDBInsertOneRow(dbh, P3MASK_TABLE_NAME, md);
     6983    psFree(md);
     6984
     6985    return status;
     6986}
     6987
     6988long long p3MaskDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     6989{
     6990    long long       deleted = 0;
     6991
     6992    long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, limit);
     6993    if (count < 0) {
     6994        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask");
     6995        return count;
     6996
     6997        deleted += count;
     6998    }
     6999
     7000    return deleted;
     7001}
     7002bool p3MaskInsertObject(psDB *dbh, p3MaskRow *object)
     7003{
     7004    return p3MaskInsert(dbh, object->label);
     7005}
     7006
     7007bool p3MaskInsertObjects(psDB *dbh, psArray *objects)
     7008{
     7009    for (long i = 0; i < psArrayLength(objects); i++) {
     7010        if (!p3MaskInsertObject(dbh, objects->data[i])) {
     7011            return false;
     7012        }
     7013    }
     7014
     7015    return true;
     7016}
     7017
     7018bool p3MaskInsertFits(psDB *dbh, const psFits *fits)
     7019{
     7020    psArray         *rowSet;
     7021
     7022    // move to (the first?) extension named  P3MASK_TABLE_NAME
     7023    if (!psFitsMoveExtName(fits, P3MASK_TABLE_NAME)) {
     7024        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P3MASK_TABLE_NAME);
     7025        return false;
     7026    }
     7027
     7028    // check HDU type
     7029    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     7030        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     7031        return false;
     7032    }
     7033
     7034    // read fits table
     7035    rowSet = psFitsReadTable(fits);
     7036    if (!rowSet) {
     7037        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     7038        psFree(rowSet);
     7039        return false;
     7040    }
     7041
     7042    if (!psDBInsertRows(dbh, P3MASK_TABLE_NAME, rowSet)) {
     7043        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     7044        psFree(rowSet);
     7045        return false;
     7046    }
     7047
     7048    psFree(rowSet);
     7049
     7050    return true;
     7051}
     7052
     7053bool p3MaskSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     7054{
     7055    psArray         *rowSet;
     7056
     7057    rowSet = psDBSelectRows(dbh, P3MASK_TABLE_NAME, where, limit);
     7058    if (!rowSet) {
     7059        return false;
     7060    }
     7061
     7062    // output to fits
     7063    if (!psFitsWriteTable(fits, NULL, rowSet, P3MASK_TABLE_NAME)) {
     7064        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     7065        psFree(rowSet);
     7066        return false;
     7067    }
     7068
     7069    psFree(rowSet);
     7070
     7071    return true;
     7072}
     7073
     7074psMetadata *p3MaskMetadataFromObject(const p3MaskRow *object)
     7075{
     7076    psMetadata *md = psMetadataAlloc();
     7077    if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) {
     7078        psError(PS_ERR_UNKNOWN, false, "failed to add item label");
     7079        psFree(md);
     7080        return false;
     7081    }
     7082
     7083
     7084    return md;
     7085}
     7086
     7087p3MaskRow *p3MaskObjectFromMetadata(psMetadata *md)
     7088{
     7089
     7090bool status = false;
     7091    char* label = psMetadataLookupPtr(&status, md, "label");
     7092    if (!status) {
     7093        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label");
     7094        return false;
     7095    }
     7096
     7097    return p3MaskRowAlloc(label);
     7098}
     7099psArray *p3MaskSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     7100{
     7101    psArray         *rowSet;
     7102    psArray         *returnSet;
     7103    psU64           i;
     7104
     7105    rowSet = psDBSelectRows(dbh, P3MASK_TABLE_NAME, where, limit);
     7106    if (!rowSet) {
     7107        return NULL;
     7108    }
     7109
     7110    // convert psMetadata rows to row objects
     7111
     7112    returnSet = psArrayAllocEmpty(rowSet->n);
     7113
     7114    for (i = 0; i < rowSet->n; i++) {
     7115        p3MaskRow *object = p3MaskObjectFromMetadata(rowSet->data[i]);
     7116        psArrayAdd(returnSet, 0, object);
     7117        psFree(object);
     7118    }
     7119
     7120    psFree(rowSet);
     7121
     7122    return returnSet;
     7123}
     7124bool p3MaskDeleteObject(psDB *dbh, const p3MaskRow *object)
     7125{
     7126    psMetadata *where = p3MaskMetadataFromObject(object);
     7127    long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, 0);
     7128    psFree(where)
     7129    if (count < 0) {
     7130        psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask");
     7131        return false;
     7132    }
     7133    if (count > 1) {
     7134        // XXX should this be a psAbort() instead?  It is possible that
     7135        // having an object match multiple rows was by design.
     7136        psError(PS_ERR_UNKNOWN, true, "p3MaskRow object matched more then one row.  Check your database schema");
     7137        return false;
     7138    }
     7139
     7140    return true;
     7141}
     7142long long p3MaskDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     7143{
     7144    long long       deleted = 0;
     7145
     7146    for (long long i = 0; i < objects->n; i++) {
     7147        p3MaskRow *object = objects->data[i];
     7148        psMetadata *where = p3MaskMetadataFromObject(object);
     7149        long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, limit);
     7150        psFree(where)
     7151        if (count < 0) {
     7152            psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask");
     7153            return count;
     7154        }
     7155
     7156        deleted += count;
     7157    }
     7158
     7159    return deleted;
     7160}
     7161bool p3MaskPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     7162{
     7163    PS_ASSERT_PTR_NON_NULL(objects, false);
     7164
     7165    psMetadata *output = psMetadataAlloc();
     7166    for (long i = 0; i < psArrayLength(objects); i++) {
     7167        psMetadata *md = p3MaskMetadataFromObject(objects->data[i]);
     7168        if (!psMetadataAddMetadata(
     7169            output,
     7170            PS_LIST_TAIL,
     7171            P3MASK_TABLE_NAME,
     7172            PS_META_DUPLICATE_OK,
     7173            NULL,
     7174            md
     7175        )) {
     7176            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     7177            psFree(md);
     7178            psFree(output);
     7179            return false;
     7180        }
     7181        psFree(md);
     7182    }
     7183
     7184    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     7185        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     7186        psFree(output);
     7187    }
     7188    psFree(output);
     7189
     7190    return true;
     7191}
    68887192static void detRunRowFree(detRunRow *object);
    68897193
  • trunk/ippdb/src/ippdb.h

    r9783 r9788  
    29852985    psS32           p2_version;
    29862986    psS32           p3_version;
     2987    char            *label;
    29872988} p3PendingExpRow;
    29882989
     
    29952996    const char      *exp_tag,
    29962997    psS32           p2_version,
    2997     psS32           p3_version
     2998    psS32           p3_version,
     2999    const char      *label
    29983000);
    29993001
     
    30273029    const char      *exp_tag,
    30283030    psS32           p2_version,
    3029     psS32           p3_version
     3031    psS32           p3_version,
     3032    const char      *label
    30303033);
    30313034
     
    31853188    psS32           p2_version;
    31863189    psS32           p3_version;
     3190    char            *label;
    31873191} p3ProcessedExpRow;
    31883192
     
    32073211    psF32           zp_stdev,
    32083212    psS32           p2_version,
    3209     psS32           p3_version
     3213    psS32           p3_version,
     3214    const char      *label
    32103215);
    32113216
     
    32513256    psF32           zp_stdev,
    32523257    psS32           p2_version,
    3253     psS32           p3_version
     3258    psS32           p3_version,
     3259    const char      *label
    32543260);
    32553261
     
    33863392    FILE            *stream,            ///< a stream
    33873393    psArray         *objects,           ///< An array of p3ProcessedExpRow objects
     3394    bool            mdcf                ///< format as mdconfig or simple
     3395);
     3396/** p3MaskRow data structure
     3397 *
     3398 * Structure for representing a single row of p3Mask table data.
     3399 */
     3400
     3401typedef struct {
     3402    char            *label;
     3403} p3MaskRow;
     3404
     3405/** Creates a new p3MaskRow object
     3406 *
     3407 *  @return A new p3MaskRow object or NULL on failure.
     3408 */
     3409
     3410p3MaskRow *p3MaskRowAlloc(
     3411    const char      *label
     3412);
     3413
     3414/** Creates a new p3Mask table
     3415 *
     3416 * @return true on success
     3417 */
     3418
     3419bool p3MaskCreateTable(
     3420    psDB            *dbh                ///< Database handle
     3421);
     3422
     3423/** Deletes a p3Mask table
     3424 *
     3425 * @return true on success
     3426 */
     3427
     3428bool p3MaskDropTable(
     3429    psDB            *dbh                ///< Database handle
     3430);
     3431
     3432/** Insert a single row into a table
     3433 *
     3434 * This function constructs and inserts a single row based on it's parameters.
     3435 *
     3436 * @return true on success
     3437 */
     3438
     3439bool p3MaskInsert(
     3440    psDB            *dbh,               ///< Database handle
     3441    const char      *label
     3442);
     3443
     3444/** Deletes up to limit rows from the database and returns the number of rows actually deleted.
     3445 *
     3446 * @return A The number of rows removed or a negative value on error
     3447 */
     3448
     3449long long p3MaskDelete(
     3450    psDB            *dbh,               ///< Database handle
     3451    const psMetadata *where,            ///< Row match criteria
     3452    unsigned long long limit            ///< Maximum number of elements to delete
     3453);
     3454
     3455/** Insert a single p3MaskRow object into a table
     3456 *
     3457 * This function constructs and inserts a single row based on it's parameters.
     3458 *
     3459 * @return true on success
     3460 */
     3461
     3462bool p3MaskInsertObject(
     3463    psDB            *dbh,               ///< Database handle
     3464    p3MaskRow       *object             ///< p3MaskRow object
     3465);
     3466
     3467/** Insert an array of p3MaskRow object into a table
     3468 *
     3469 * This function constructs and inserts multiple rows based on it's parameters.
     3470 *
     3471 * @return true on success
     3472 */
     3473
     3474bool p3MaskInsertObjects(
     3475    psDB            *dbh,               ///< Database handle
     3476    psArray         *objects            ///< array of p3MaskRow objects
     3477);
     3478
     3479/** Insert data from a binary FITS table p3MaskRow into the database
     3480 *
     3481 * This function expects a psFits object with a FITS table as the first
     3482 * extension.  The table must have at least one row of data in it, that is of
     3483 * the appropriate format (number of columns and their type).  All other
     3484 * extensions are ignored.
     3485 *
     3486 * @return true on success
     3487 */
     3488
     3489bool p3MaskInsertFits(
     3490    psDB            *dbh,               ///< Database handle
     3491    const psFits    *fits               ///< psFits object
     3492);
     3493
     3494/** Selects up to limit from the database and returns them in a binary FITS table
     3495 *
     3496 * This function assumes an empty psFits object and will create a FITS table
     3497 * as the first extension.
     3498 *
     3499 *  See psDBSelectRows() for documentation on the format of where.
     3500 *
     3501 * @return true on success
     3502 */
     3503
     3504bool p3MaskSelectRowsFits(
     3505    psDB            *dbh,               ///< Database handle
     3506    psFits          *fits,              ///< psFits object
     3507    const psMetadata *where,            ///< Row match criteria
     3508    unsigned long long limit            ///< Maximum number of elements to return
     3509);
     3510
     3511/** Convert a p3MaskRow into an equivalent psMetadata
     3512 *
     3513 * @return A psMetadata pointer or NULL on error
     3514 */
     3515
     3516psMetadata *p3MaskMetadataFromObject(
     3517    const p3MaskRow *object             ///< fooRow to convert into a psMetadata
     3518);
     3519
     3520/** Convert a psMetadata into an equivalent fooRow
     3521 *
     3522 * @return A p3MaskRow pointer or NULL on error
     3523 */
     3524
     3525p3MaskRow *p3MaskObjectFromMetadata(
     3526    psMetadata      *md                 ///< psMetadata to convert into a fooRow
     3527);
     3528/** Selects up to limit rows from the database and returns as p3MaskRow objects in a psArray
     3529 *
     3530 *  See psDBSelectRows() for documentation on the format of where.
     3531 *
     3532 * @return A psArray pointer or NULL on error
     3533 */
     3534
     3535psArray *p3MaskSelectRowObjects(
     3536    psDB            *dbh,               ///< Database handle
     3537    const psMetadata *where,            ///< Row match criteria
     3538    unsigned long long limit            ///< Maximum number of elements to return
     3539);
     3540/** Deletes a row from the database coresponding to an p3Mask
     3541 *
     3542 *  Note that a 'where' search psMetadata is constructed from each object and
     3543 *  used to find rows to delete.
     3544 *
     3545 * @return A The number of rows removed or a negative value on error
     3546 */
     3547
     3548bool p3MaskDeleteObject(
     3549    psDB            *dbh,               ///< Database handle
     3550    const p3MaskRow *object    ///< Object to delete
     3551);
     3552/** Deletes up to limit rows from the database and returns the number of rows actually deleted.
     3553 *
     3554 *  Note that a 'where' search psMetadata is constructed from each object and
     3555 *  used to find rows to delete.
     3556 *
     3557 * @return A The number of rows removed or a negative value on error
     3558 */
     3559
     3560long long p3MaskDeleteRowObjects(
     3561    psDB            *dbh,               ///< Database handle
     3562    const psArray   *objects,           ///< Array of objects to delete
     3563    unsigned long long limit            ///< Maximum number of elements to delete
     3564);
     3565/** Formats and prints an array of p3MaskRow objects
     3566 *
     3567 * When mdcf is set the formated output is in psMetadataConfig
     3568 * format, otherwise it is in a simple tabular format.
     3569 *
     3570 * @return true on success
     3571 */
     3572
     3573bool p3MaskPrintObjects(
     3574    FILE            *stream,            ///< a stream
     3575    psArray         *objects,           ///< An array of p3MaskRow objects
    33883576    bool            mdcf                ///< format as mdconfig or simple
    33893577);
  • trunk/ippdb/tests/alloc.c

    r9783 r9788  
    650650        p3PendingExpRow *object;
    651651
    652         object = p3PendingExpRowAlloc("a string", -32, -32    );
     652        object = p3PendingExpRowAlloc("a string", -32, -32, "a string"    );
    653653
    654654        if (!object) {
     
    668668            exit(EXIT_FAILURE);
    669669        }
     670        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
     671            psFree(object);
     672            exit(EXIT_FAILURE);
     673        }
    670674
    671675        psFree(object);
     
    675679        p3ProcessedExpRow *object;
    676680
    677         object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32    );
     681        object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32, "a string"    );
    678682
    679683        if (!object) {
     
    738742        }
    739743        if (!object->p3_version == -32) {
     744            psFree(object);
     745            exit(EXIT_FAILURE);
     746        }
     747        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
     748            psFree(object);
     749            exit(EXIT_FAILURE);
     750        }
     751
     752        psFree(object);
     753    }
     754
     755    {
     756        p3MaskRow       *object;
     757
     758        object = p3MaskRowAlloc("a string"    );
     759
     760        if (!object) {
     761            exit(EXIT_FAILURE);
     762        }
     763
     764        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
    740765            psFree(object);
    741766            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/createtable.c

    r9783 r9788  
    253253        }
    254254
     255        if(!p3MaskCreateTable(dbh)) {
     256            exit(EXIT_FAILURE);
     257        }
     258
     259        psDBCleanup(dbh);
     260    }
     261
     262    {
     263        psDB            *dbh;
     264
     265        dbh = psDBInit("localhost", "test", NULL, "test");
     266        if (!dbh) {
     267            exit(EXIT_FAILURE);
     268        }
     269
    255270        if(!detRunCreateTable(dbh)) {
    256271            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/dbcleanup.c

    r9783 r9788  
    2727    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p3PendingExp");
    2828    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p3ProcessedExp");
     29    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p3Mask");
    2930    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detRun");
    3031    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detInputExp");
  • trunk/ippdb/tests/dbsetup.c

    r9783 r9788  
    6161    p3ProcessedExpCreateTable(dbh);
    6262
     63    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS p3Mask");
     64    p3MaskCreateTable(dbh);
     65
    6366    p_psDBRunQuery(dbh, "DROP TABLE IF EXISTS detRun");
    6467    detRunCreateTable(dbh);
  • trunk/ippdb/tests/droptable.c

    r9783 r9788  
    253253        }
    254254
     255        if (!p3MaskDropTable(dbh)) {
     256            exit(EXIT_FAILURE);
     257        }
     258
     259        psDBCleanup(dbh);
     260    }
     261
     262    {
     263        psDB            *dbh;
     264
     265        dbh = psDBInit("localhost", "test", NULL, "test");
     266        if (!dbh) {
     267            exit(EXIT_FAILURE);
     268        }
     269
    255270        if (!detRunDropTable(dbh)) {
    256271            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/insert.c

    r9783 r9788  
    223223        }
    224224
    225         if (!p3PendingExpInsert(dbh, "a string", -32, -32)) {
    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 (!p3ProcessedExpInsert(dbh, "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32)) {
     225        if (!p3PendingExpInsert(dbh, "a string", -32, -32, "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 (!p3ProcessedExpInsert(dbh, "a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32, "a string")) {
     241            exit(EXIT_FAILURE);
     242        }
     243
     244        psDBCleanup(dbh);
     245    }
     246
     247    {
     248        psDB            *dbh;
     249
     250        dbh = psDBInit("localhost", "test", NULL, "test");
     251        if (!dbh) {
     252            exit(EXIT_FAILURE);
     253        }
     254
     255        if (!p3MaskInsert(dbh, "a string")) {
    241256            exit(EXIT_FAILURE);
    242257        }
  • trunk/ippdb/tests/insertfits.c

    r9783 r9788  
    440440        }
    441441
     442        if (!p3MaskInsertFits(dbh, fits)) {
     443            exit(EXIT_FAILURE);
     444        }
     445
     446        if (!psFitsClose(fits)) {
     447            exit(EXIT_FAILURE);
     448        }
     449
     450        psDBCleanup(dbh);
     451    }
     452
     453    {
     454        psDB            *dbh;
     455        psFits          *fits;
     456
     457        dbh = psDBInit("localhost", "test", NULL, "test");
     458        if (!dbh) {
     459            exit(EXIT_FAILURE);
     460        }
     461
     462        // open a temp
     463        fits = psFitsOpen(TMP_FILENAME, "r");
     464        if (!fits) {
     465            exit(EXIT_FAILURE);
     466        }
     467
    442468        if (!detRunInsertFits(dbh, fits)) {
    443469            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/insertobject.c

    r9783 r9788  
    322322        }
    323323
    324         object = p3PendingExpRowAlloc("a string", -32, -32);
     324        object = p3PendingExpRowAlloc("a string", -32, -32, "a string");
    325325        if (!object) {
    326326            exit(EXIT_FAILURE);
     
    344344        }
    345345
    346         object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32);
     346        object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32, "a string");
    347347        if (!object) {
    348348            exit(EXIT_FAILURE);
     
    350350
    351351        if (!p3ProcessedExpInsertObject(dbh, object)) {
     352            exit(EXIT_FAILURE);
     353        }
     354
     355        psFree(object);
     356        psDBCleanup(dbh);
     357    }
     358
     359    {
     360        psDB            *dbh;
     361        p3MaskRow       *object;
     362
     363        dbh = psDBInit("localhost", "test", NULL, "test");
     364        if (!dbh) {
     365            exit(EXIT_FAILURE);
     366        }
     367
     368        object = p3MaskRowAlloc("a string");
     369        if (!object) {
     370            exit(EXIT_FAILURE);
     371        }
     372
     373        if (!p3MaskInsertObject(dbh, object)) {
    352374            exit(EXIT_FAILURE);
    353375        }
  • trunk/ippdb/tests/metadatafromobject.c

    r9783 r9788  
    764764        bool            status;
    765765
    766         object = p3PendingExpRowAlloc("a string", -32, -32);
     766        object = p3PendingExpRowAlloc("a string", -32, -32, "a string");
    767767        if (!object) {
    768768            exit(EXIT_FAILURE);
     
    788788            exit(EXIT_FAILURE);
    789789        }
     790        if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
     791            psFree(md);
     792            exit(EXIT_FAILURE);
     793        }
    790794
    791795        psFree(md);
     
    797801        bool            status;
    798802
    799         object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32);
     803        object = p3ProcessedExpRowAlloc("a string", "a string", "a string", 64.64, 64.64, 64.64, 32.32, 32.32, -32, "a string", "a string", 32.32, 32.32, -32, -32, "a string");
    800804        if (!object) {
    801805            exit(EXIT_FAILURE);
     
    866870        }
    867871        if (!psMetadataLookupS32(&status, md, "p3_version") == -32) {
     872            psFree(md);
     873            exit(EXIT_FAILURE);
     874        }
     875        if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
     876            psFree(md);
     877            exit(EXIT_FAILURE);
     878        }
     879
     880        psFree(md);
     881    }
     882
     883    {
     884        psMetadata      *md;
     885        p3MaskRow       *object;
     886        bool            status;
     887
     888        object = p3MaskRowAlloc("a string");
     889        if (!object) {
     890            exit(EXIT_FAILURE);
     891        }
     892
     893        md = p3MaskMetadataFromObject(object);
     894        if (!md) {
     895            exit(EXIT_FAILURE);
     896        }
     897
     898        psFree(object);
     899
     900        if (strncmp(psMetadataLookupPtr(&status, md, "label"), "a string", MAX_STRING_LENGTH)) {
    868901            psFree(md);
    869902            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/objectfrommetadata.c

    r9783 r9788  
    11911191            exit(EXIT_FAILURE);
    11921192        }
     1193        if (!psMetadataAddStr(md, PS_LIST_TAIL, "label", 0, NULL, "a string")) {
     1194            psFree(md);
     1195            exit(EXIT_FAILURE);
     1196        }
    11931197
    11941198        object = p3PendingExpObjectFromMetadata(md);
     
    12121216            exit(EXIT_FAILURE);
    12131217        }
     1218        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
     1219            psFree(object);
     1220            exit(EXIT_FAILURE);
     1221        }
    12141222
    12151223        psFree(object);
     
    12811289            exit(EXIT_FAILURE);
    12821290        }
     1291        if (!psMetadataAddStr(md, PS_LIST_TAIL, "label", 0, NULL, "a string")) {
     1292            psFree(md);
     1293            exit(EXIT_FAILURE);
     1294        }
    12831295
    12841296        object = p3ProcessedExpObjectFromMetadata(md);
     
    13471359        }
    13481360        if (!object->p3_version == -32) {
     1361            psFree(object);
     1362            exit(EXIT_FAILURE);
     1363        }
     1364        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
     1365            psFree(object);
     1366            exit(EXIT_FAILURE);
     1367        }
     1368
     1369        psFree(object);
     1370    }
     1371
     1372    {
     1373        psMetadata      *md;
     1374        p3MaskRow       *object;
     1375
     1376        md = psMetadataAlloc();
     1377        if (!psMetadataAddStr(md, PS_LIST_TAIL, "label", 0, NULL, "a string")) {
     1378            psFree(md);
     1379            exit(EXIT_FAILURE);
     1380        }
     1381
     1382        object = p3MaskObjectFromMetadata(md);
     1383        if (!object) {
     1384            psFree(md);
     1385            exit(EXIT_FAILURE);
     1386        }
     1387
     1388        psFree(md);
     1389
     1390        if (strncmp(object->label, "a string", MAX_STRING_LENGTH)) {
    13491391            psFree(object);
    13501392            exit(EXIT_FAILURE);
  • trunk/ippdb/tests/selectrowsfits.c

    r9783 r9788  
    373373        }
    374374
     375        if (!p3MaskSelectRowsFits(dbh, fits, NULL, 1)) {
     376            exit(EXIT_FAILURE);
     377        }
     378
     379        psFree(fits);
     380        psDBCleanup(dbh);
     381    }
     382
     383    {
     384        psDB            *dbh;
     385        psFits          *fits;
     386
     387        dbh = psDBInit("localhost", "test", NULL, "test");
     388        if (!dbh) {
     389            exit(EXIT_FAILURE);
     390        }
     391
     392        fits = psFitsOpen(TMP_FILENAME, "w");
     393        if (!fits) {
     394            exit(EXIT_FAILURE);
     395        }
     396
    375397        if (!detRunSelectRowsFits(dbh, fits, NULL, 1)) {
    376398            exit(EXIT_FAILURE);
Note: See TracChangeset for help on using the changeset viewer.