IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

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

VERSION 0.0.53

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 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
Note: See TracChangeset for help on using the changeset viewer.