IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Nov 9, 2007, 3:55:36 PM (19 years ago)
Author:
jhoblitt
Message:

add calibration.md

File:
1 edited

Legend:

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

    r15533 r15569  
    7979#define MAGICMASK_TABLE_NAME "magicMask"
    8080#define MAGICSKYFILEMASK_TABLE_NAME "magicSkyfileMask"
     81#define CALDB_TABLE_NAME "calDB"
     82#define CALRUN_TABLE_NAME "calRun"
    8183#define MAX_STRING_LENGTH 1024
    8284
     
    2204222044    return true;
    2204322045}
     22046static void calDBRowFree(calDBRow *object);
     22047
     22048calDBRow *calDBRowAlloc(psS64 cal_id, const char *catdir, const char *state)
     22049{
     22050    calDBRow        *_object;
     22051
     22052    _object = psAlloc(sizeof(calDBRow));
     22053    psMemSetDeallocator(_object, (psFreeFunc)calDBRowFree);
     22054
     22055    _object->cal_id = cal_id;
     22056    _object->catdir = psStringCopy(catdir);
     22057    _object->state = psStringCopy(state);
     22058
     22059    return _object;
     22060}
     22061
     22062static void calDBRowFree(calDBRow *object)
     22063{
     22064    psFree(object->catdir);
     22065    psFree(object->state);
     22066}
     22067
     22068bool calDBCreateTable(psDB *dbh)
     22069{
     22070    psMetadata *md = psMetadataAlloc();
     22071    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, "Primary Key AUTO_INCREMENT", 0)) {
     22072        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22073        psFree(md);
     22074        return false;
     22075    }
     22076    if (!psMetadataAdd(md, PS_LIST_TAIL, "catdir", PS_DATA_STRING, NULL, "64")) {
     22077        psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");
     22078        psFree(md);
     22079        return false;
     22080    }
     22081    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) {
     22082        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22083        psFree(md);
     22084        return false;
     22085    }
     22086
     22087    bool status = psDBCreateTable(dbh, CALDB_TABLE_NAME, md);
     22088
     22089    psFree(md);
     22090
     22091    return status;
     22092}
     22093
     22094bool calDBDropTable(psDB *dbh)
     22095{
     22096    return psDBDropTable(dbh, CALDB_TABLE_NAME);
     22097}
     22098
     22099bool calDBInsert(psDB * dbh, psS64 cal_id, const char *catdir, const char *state)
     22100{
     22101    psMetadata *md = psMetadataAlloc();
     22102    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, NULL, cal_id)) {
     22103        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22104        psFree(md);
     22105        return false;
     22106    }
     22107    if (!psMetadataAdd(md, PS_LIST_TAIL, "catdir", PS_DATA_STRING, NULL, catdir)) {
     22108        psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");
     22109        psFree(md);
     22110        return false;
     22111    }
     22112    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
     22113        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22114        psFree(md);
     22115        return false;
     22116    }
     22117
     22118    bool status = psDBInsertOneRow(dbh, CALDB_TABLE_NAME, md);
     22119    psFree(md);
     22120
     22121    return status;
     22122}
     22123
     22124long long calDBDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     22125{
     22126    long long       deleted = 0;
     22127
     22128    long long count = psDBDeleteRows(dbh, CALDB_TABLE_NAME, where, limit);
     22129    if (count < 0) {
     22130        psError(PS_ERR_UNKNOWN, true, "failed to delete row from calDB");
     22131        return count;
     22132
     22133        deleted += count;
     22134    }
     22135
     22136    return deleted;
     22137}
     22138bool calDBInsertObject(psDB *dbh, calDBRow *object)
     22139{
     22140    return calDBInsert(dbh, object->cal_id, object->catdir, object->state);
     22141}
     22142
     22143bool calDBInsertObjects(psDB *dbh, psArray *objects)
     22144{
     22145    for (long i = 0; i < psArrayLength(objects); i++) {
     22146        if (!calDBInsertObject(dbh, objects->data[i])) {
     22147            return false;
     22148        }
     22149    }
     22150
     22151    return true;
     22152}
     22153
     22154bool calDBInsertFits(psDB *dbh, const psFits *fits)
     22155{
     22156    psArray         *rowSet;
     22157
     22158    // move to (the first?) extension named  CALDB_TABLE_NAME
     22159    if (!psFitsMoveExtName(fits, CALDB_TABLE_NAME)) {
     22160        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", CALDB_TABLE_NAME);
     22161        return false;
     22162    }
     22163
     22164    // check HDU type
     22165    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     22166        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     22167        return false;
     22168    }
     22169
     22170    // read fits table
     22171    rowSet = psFitsReadTable(fits);
     22172    if (!rowSet) {
     22173        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     22174        psFree(rowSet);
     22175        return false;
     22176    }
     22177
     22178    if (!psDBInsertRows(dbh, CALDB_TABLE_NAME, rowSet)) {
     22179        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     22180        psFree(rowSet);
     22181        return false;
     22182    }
     22183
     22184    psFree(rowSet);
     22185
     22186    return true;
     22187}
     22188
     22189bool calDBSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     22190{
     22191    psArray         *rowSet;
     22192
     22193    rowSet = psDBSelectRows(dbh, CALDB_TABLE_NAME, where, limit);
     22194    if (!rowSet) {
     22195        return false;
     22196    }
     22197
     22198    // output to fits
     22199    if (!psFitsWriteTable(fits, NULL, rowSet, CALDB_TABLE_NAME)) {
     22200        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     22201        psFree(rowSet);
     22202        return false;
     22203    }
     22204
     22205    psFree(rowSet);
     22206
     22207    return true;
     22208}
     22209
     22210psMetadata *calDBMetadataFromObject(const calDBRow *object)
     22211{
     22212    psMetadata *md = psMetadataAlloc();
     22213    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, NULL, object->cal_id)) {
     22214        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22215        psFree(md);
     22216        return false;
     22217    }
     22218    if (!psMetadataAdd(md, PS_LIST_TAIL, "catdir", PS_DATA_STRING, NULL, object->catdir)) {
     22219        psError(PS_ERR_UNKNOWN, false, "failed to add item catdir");
     22220        psFree(md);
     22221        return false;
     22222    }
     22223    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) {
     22224        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22225        psFree(md);
     22226        return false;
     22227    }
     22228
     22229
     22230    return md;
     22231}
     22232
     22233calDBRow *calDBObjectFromMetadata(psMetadata *md)
     22234{
     22235
     22236bool status = false;
     22237    psS64 cal_id = psMetadataLookupS64(&status, md, "cal_id");
     22238    if (!status) {
     22239        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item cal_id");
     22240        return false;
     22241    }
     22242    char* catdir = psMetadataLookupPtr(&status, md, "catdir");
     22243    if (!status) {
     22244        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item catdir");
     22245        return false;
     22246    }
     22247    char* state = psMetadataLookupPtr(&status, md, "state");
     22248    if (!status) {
     22249        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
     22250        return false;
     22251    }
     22252
     22253    return calDBRowAlloc(cal_id, catdir, state);
     22254}
     22255psArray *calDBSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     22256{
     22257    psArray         *rowSet;
     22258    psArray         *returnSet;
     22259    psU64           i;
     22260
     22261    rowSet = psDBSelectRows(dbh, CALDB_TABLE_NAME, where, limit);
     22262    if (!rowSet) {
     22263        return NULL;
     22264    }
     22265
     22266    // convert psMetadata rows to row objects
     22267
     22268    returnSet = psArrayAllocEmpty(rowSet->n);
     22269
     22270    for (i = 0; i < rowSet->n; i++) {
     22271        calDBRow *object = calDBObjectFromMetadata(rowSet->data[i]);
     22272        psArrayAdd(returnSet, 0, object);
     22273        psFree(object);
     22274    }
     22275
     22276    psFree(rowSet);
     22277
     22278    return returnSet;
     22279}
     22280bool calDBDeleteObject(psDB *dbh, const calDBRow *object)
     22281{
     22282    psMetadata *where = calDBMetadataFromObject(object);
     22283    long long count = psDBDeleteRows(dbh, CALDB_TABLE_NAME, where, 0);
     22284    psFree(where);
     22285    if (count < 0) {
     22286        psError(PS_ERR_UNKNOWN, true, "failed to delete row from calDB");
     22287        return false;
     22288    }
     22289    if (count > 1) {
     22290        // XXX should this be a psAbort() instead?  It is possible that
     22291        // having an object match multiple rows was by design.
     22292        psError(PS_ERR_UNKNOWN, true, "calDBRow object matched more then one row.  Check your database schema");
     22293        return false;
     22294    }
     22295
     22296    return true;
     22297}
     22298long long calDBDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     22299{
     22300    long long       deleted = 0;
     22301
     22302    for (long long i = 0; i < objects->n; i++) {
     22303        calDBRow *object = objects->data[i];
     22304        psMetadata *where = calDBMetadataFromObject(object);
     22305        long long count = psDBDeleteRows(dbh, CALDB_TABLE_NAME, where, limit);
     22306        psFree(where);
     22307        if (count < 0) {
     22308            psError(PS_ERR_UNKNOWN, true, "failed to delete row from calDB");
     22309            return count;
     22310        }
     22311
     22312        deleted += count;
     22313    }
     22314
     22315    return deleted;
     22316}
     22317bool calDBPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     22318{
     22319    PS_ASSERT_PTR_NON_NULL(objects, false);
     22320
     22321    psMetadata *output = psMetadataAlloc();
     22322    for (long i = 0; i < psArrayLength(objects); i++) {
     22323        psMetadata *md = calDBMetadataFromObject(objects->data[i]);
     22324        if (!psMetadataAddMetadata(
     22325            output,
     22326            PS_LIST_TAIL,
     22327            CALDB_TABLE_NAME,
     22328            PS_META_DUPLICATE_OK,
     22329            NULL,
     22330            md
     22331        )) {
     22332            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     22333            psFree(md);
     22334            psFree(output);
     22335            return false;
     22336        }
     22337        psFree(md);
     22338    }
     22339
     22340    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     22341        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     22342        psFree(output);
     22343    }
     22344    psFree(output);
     22345
     22346    return true;
     22347}
     22348bool calDBPrintObject(FILE *stream, calDBRow *object, bool mdcf)
     22349{
     22350    PS_ASSERT_PTR_NON_NULL(object, false);
     22351
     22352    psMetadata *md = calDBMetadataFromObject(object);
     22353
     22354    if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
     22355        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     22356        psFree(md);
     22357    }
     22358
     22359    psFree(md);
     22360
     22361    return true;
     22362}
     22363static void calRunRowFree(calRunRow *object);
     22364
     22365calRunRow *calRunRowAlloc(psS64 cal_id, const char *region, const char *last_step, const char *state)
     22366{
     22367    calRunRow       *_object;
     22368
     22369    _object = psAlloc(sizeof(calRunRow));
     22370    psMemSetDeallocator(_object, (psFreeFunc)calRunRowFree);
     22371
     22372    _object->cal_id = cal_id;
     22373    _object->region = psStringCopy(region);
     22374    _object->last_step = psStringCopy(last_step);
     22375    _object->state = psStringCopy(state);
     22376
     22377    return _object;
     22378}
     22379
     22380static void calRunRowFree(calRunRow *object)
     22381{
     22382    psFree(object->region);
     22383    psFree(object->last_step);
     22384    psFree(object->state);
     22385}
     22386
     22387bool calRunCreateTable(psDB *dbh)
     22388{
     22389    psMetadata *md = psMetadataAlloc();
     22390    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, "Primary Key AUTO_INCREMENT", 0)) {
     22391        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22392        psFree(md);
     22393        return false;
     22394    }
     22395    if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, "success or failure", "64")) {
     22396        psError(PS_ERR_UNKNOWN, false, "failed to add item region");
     22397        psFree(md);
     22398        return false;
     22399    }
     22400    if (!psMetadataAdd(md, PS_LIST_TAIL, "last_step", PS_DATA_STRING, "fkey(cal_id) ref calDB(cal_id)", "64")) {
     22401        psError(PS_ERR_UNKNOWN, false, "failed to add item last_step");
     22402        psFree(md);
     22403        return false;
     22404    }
     22405    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, "64")) {
     22406        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22407        psFree(md);
     22408        return false;
     22409    }
     22410
     22411    bool status = psDBCreateTable(dbh, CALRUN_TABLE_NAME, md);
     22412
     22413    psFree(md);
     22414
     22415    return status;
     22416}
     22417
     22418bool calRunDropTable(psDB *dbh)
     22419{
     22420    return psDBDropTable(dbh, CALRUN_TABLE_NAME);
     22421}
     22422
     22423bool calRunInsert(psDB * dbh, psS64 cal_id, const char *region, const char *last_step, const char *state)
     22424{
     22425    psMetadata *md = psMetadataAlloc();
     22426    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, NULL, cal_id)) {
     22427        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22428        psFree(md);
     22429        return false;
     22430    }
     22431    if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, NULL, region)) {
     22432        psError(PS_ERR_UNKNOWN, false, "failed to add item region");
     22433        psFree(md);
     22434        return false;
     22435    }
     22436    if (!psMetadataAdd(md, PS_LIST_TAIL, "last_step", PS_DATA_STRING, NULL, last_step)) {
     22437        psError(PS_ERR_UNKNOWN, false, "failed to add item last_step");
     22438        psFree(md);
     22439        return false;
     22440    }
     22441    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, state)) {
     22442        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22443        psFree(md);
     22444        return false;
     22445    }
     22446
     22447    bool status = psDBInsertOneRow(dbh, CALRUN_TABLE_NAME, md);
     22448    psFree(md);
     22449
     22450    return status;
     22451}
     22452
     22453long long calRunDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     22454{
     22455    long long       deleted = 0;
     22456
     22457    long long count = psDBDeleteRows(dbh, CALRUN_TABLE_NAME, where, limit);
     22458    if (count < 0) {
     22459        psError(PS_ERR_UNKNOWN, true, "failed to delete row from calRun");
     22460        return count;
     22461
     22462        deleted += count;
     22463    }
     22464
     22465    return deleted;
     22466}
     22467bool calRunInsertObject(psDB *dbh, calRunRow *object)
     22468{
     22469    return calRunInsert(dbh, object->cal_id, object->region, object->last_step, object->state);
     22470}
     22471
     22472bool calRunInsertObjects(psDB *dbh, psArray *objects)
     22473{
     22474    for (long i = 0; i < psArrayLength(objects); i++) {
     22475        if (!calRunInsertObject(dbh, objects->data[i])) {
     22476            return false;
     22477        }
     22478    }
     22479
     22480    return true;
     22481}
     22482
     22483bool calRunInsertFits(psDB *dbh, const psFits *fits)
     22484{
     22485    psArray         *rowSet;
     22486
     22487    // move to (the first?) extension named  CALRUN_TABLE_NAME
     22488    if (!psFitsMoveExtName(fits, CALRUN_TABLE_NAME)) {
     22489        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", CALRUN_TABLE_NAME);
     22490        return false;
     22491    }
     22492
     22493    // check HDU type
     22494    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     22495        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     22496        return false;
     22497    }
     22498
     22499    // read fits table
     22500    rowSet = psFitsReadTable(fits);
     22501    if (!rowSet) {
     22502        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     22503        psFree(rowSet);
     22504        return false;
     22505    }
     22506
     22507    if (!psDBInsertRows(dbh, CALRUN_TABLE_NAME, rowSet)) {
     22508        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     22509        psFree(rowSet);
     22510        return false;
     22511    }
     22512
     22513    psFree(rowSet);
     22514
     22515    return true;
     22516}
     22517
     22518bool calRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     22519{
     22520    psArray         *rowSet;
     22521
     22522    rowSet = psDBSelectRows(dbh, CALRUN_TABLE_NAME, where, limit);
     22523    if (!rowSet) {
     22524        return false;
     22525    }
     22526
     22527    // output to fits
     22528    if (!psFitsWriteTable(fits, NULL, rowSet, CALRUN_TABLE_NAME)) {
     22529        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     22530        psFree(rowSet);
     22531        return false;
     22532    }
     22533
     22534    psFree(rowSet);
     22535
     22536    return true;
     22537}
     22538
     22539psMetadata *calRunMetadataFromObject(const calRunRow *object)
     22540{
     22541    psMetadata *md = psMetadataAlloc();
     22542    if (!psMetadataAdd(md, PS_LIST_TAIL, "cal_id", PS_DATA_S64, NULL, object->cal_id)) {
     22543        psError(PS_ERR_UNKNOWN, false, "failed to add item cal_id");
     22544        psFree(md);
     22545        return false;
     22546    }
     22547    if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, NULL, object->region)) {
     22548        psError(PS_ERR_UNKNOWN, false, "failed to add item region");
     22549        psFree(md);
     22550        return false;
     22551    }
     22552    if (!psMetadataAdd(md, PS_LIST_TAIL, "last_step", PS_DATA_STRING, NULL, object->last_step)) {
     22553        psError(PS_ERR_UNKNOWN, false, "failed to add item last_step");
     22554        psFree(md);
     22555        return false;
     22556    }
     22557    if (!psMetadataAdd(md, PS_LIST_TAIL, "state", PS_DATA_STRING, NULL, object->state)) {
     22558        psError(PS_ERR_UNKNOWN, false, "failed to add item state");
     22559        psFree(md);
     22560        return false;
     22561    }
     22562
     22563
     22564    return md;
     22565}
     22566
     22567calRunRow *calRunObjectFromMetadata(psMetadata *md)
     22568{
     22569
     22570bool status = false;
     22571    psS64 cal_id = psMetadataLookupS64(&status, md, "cal_id");
     22572    if (!status) {
     22573        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item cal_id");
     22574        return false;
     22575    }
     22576    char* region = psMetadataLookupPtr(&status, md, "region");
     22577    if (!status) {
     22578        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item region");
     22579        return false;
     22580    }
     22581    char* last_step = psMetadataLookupPtr(&status, md, "last_step");
     22582    if (!status) {
     22583        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item last_step");
     22584        return false;
     22585    }
     22586    char* state = psMetadataLookupPtr(&status, md, "state");
     22587    if (!status) {
     22588        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");
     22589        return false;
     22590    }
     22591
     22592    return calRunRowAlloc(cal_id, region, last_step, state);
     22593}
     22594psArray *calRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     22595{
     22596    psArray         *rowSet;
     22597    psArray         *returnSet;
     22598    psU64           i;
     22599
     22600    rowSet = psDBSelectRows(dbh, CALRUN_TABLE_NAME, where, limit);
     22601    if (!rowSet) {
     22602        return NULL;
     22603    }
     22604
     22605    // convert psMetadata rows to row objects
     22606
     22607    returnSet = psArrayAllocEmpty(rowSet->n);
     22608
     22609    for (i = 0; i < rowSet->n; i++) {
     22610        calRunRow *object = calRunObjectFromMetadata(rowSet->data[i]);
     22611        psArrayAdd(returnSet, 0, object);
     22612        psFree(object);
     22613    }
     22614
     22615    psFree(rowSet);
     22616
     22617    return returnSet;
     22618}
     22619bool calRunDeleteObject(psDB *dbh, const calRunRow *object)
     22620{
     22621    psMetadata *where = calRunMetadataFromObject(object);
     22622    long long count = psDBDeleteRows(dbh, CALRUN_TABLE_NAME, where, 0);
     22623    psFree(where);
     22624    if (count < 0) {
     22625        psError(PS_ERR_UNKNOWN, true, "failed to delete row from calRun");
     22626        return false;
     22627    }
     22628    if (count > 1) {
     22629        // XXX should this be a psAbort() instead?  It is possible that
     22630        // having an object match multiple rows was by design.
     22631        psError(PS_ERR_UNKNOWN, true, "calRunRow object matched more then one row.  Check your database schema");
     22632        return false;
     22633    }
     22634
     22635    return true;
     22636}
     22637long long calRunDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     22638{
     22639    long long       deleted = 0;
     22640
     22641    for (long long i = 0; i < objects->n; i++) {
     22642        calRunRow *object = objects->data[i];
     22643        psMetadata *where = calRunMetadataFromObject(object);
     22644        long long count = psDBDeleteRows(dbh, CALRUN_TABLE_NAME, where, limit);
     22645        psFree(where);
     22646        if (count < 0) {
     22647            psError(PS_ERR_UNKNOWN, true, "failed to delete row from calRun");
     22648            return count;
     22649        }
     22650
     22651        deleted += count;
     22652    }
     22653
     22654    return deleted;
     22655}
     22656bool calRunPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     22657{
     22658    PS_ASSERT_PTR_NON_NULL(objects, false);
     22659
     22660    psMetadata *output = psMetadataAlloc();
     22661    for (long i = 0; i < psArrayLength(objects); i++) {
     22662        psMetadata *md = calRunMetadataFromObject(objects->data[i]);
     22663        if (!psMetadataAddMetadata(
     22664            output,
     22665            PS_LIST_TAIL,
     22666            CALRUN_TABLE_NAME,
     22667            PS_META_DUPLICATE_OK,
     22668            NULL,
     22669            md
     22670        )) {
     22671            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     22672            psFree(md);
     22673            psFree(output);
     22674            return false;
     22675        }
     22676        psFree(md);
     22677    }
     22678
     22679    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     22680        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     22681        psFree(output);
     22682    }
     22683    psFree(output);
     22684
     22685    return true;
     22686}
     22687bool calRunPrintObject(FILE *stream, calRunRow *object, bool mdcf)
     22688{
     22689    PS_ASSERT_PTR_NON_NULL(object, false);
     22690
     22691    psMetadata *md = calRunMetadataFromObject(object);
     22692
     22693    if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {
     22694        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     22695        psFree(md);
     22696    }
     22697
     22698    psFree(md);
     22699
     22700    return true;
     22701}
Note: See TracChangeset for help on using the changeset viewer.