IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 9788 for trunk/ippdb/src


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

VERSION 0.0.53

Location:
trunk/ippdb/src
Files:
2 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
  • 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);
Note: See TracChangeset for help on using the changeset viewer.