IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Oct 3, 2006, 12:09:49 PM (20 years ago)
Author:
jhoblitt
Message:

VERSION 0.0.40

File:
1 edited

Legend:

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

    r9107 r9149  
    7171#define DETNORMALIZEDIMFILE_TABLE_NAME "detNormalizedImfile"
    7272#define DETNORMALIZEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
     73#define DETNORMALIZEDEXP_TABLE_NAME "detNormalizedExp"
     74#define DETNORMALIZEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
    7375#define DETMASTERFRAME_TABLE_NAME "detMasterFrame"
    7476#define DETMASTERFRAME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME
     
    1642916431    return true;
    1643016432}
     16433static void detNormalizedExpRowFree(detNormalizedExpRow *object);
     16434
     16435detNormalizedExpRow *detNormalizedExpRowAlloc(psS32 det_id, psS32 iteration, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
     16436{
     16437    detNormalizedExpRow *object;
     16438
     16439    object = psAlloc(sizeof(detNormalizedExpRow));
     16440    psMemSetDeallocator(object, (psFreeFunc)detNormalizedExpRowFree);
     16441
     16442    object->det_id = det_id;
     16443    object->iteration = iteration;
     16444    object->recipe = psStringCopy(recipe);
     16445    object->bg = bg;
     16446    object->bg_stdev = bg_stdev;
     16447    object->bg_mean_stdev = bg_mean_stdev;
     16448    object->b1_uri = psStringCopy(b1_uri);
     16449    object->b2_uri = psStringCopy(b2_uri);
     16450
     16451    return object;
     16452}
     16453
     16454static void detNormalizedExpRowFree(detNormalizedExpRow *object)
     16455{
     16456    psFree(object->recipe);
     16457    psFree(object->b1_uri);
     16458    psFree(object->b2_uri);
     16459}
     16460
     16461bool detNormalizedExpCreateTable(psDB *dbh)
     16462{
     16463    psMetadata      *md;
     16464    bool            status;
     16465
     16466    md = psMetadataAlloc();
     16467    if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {
     16468        psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDEXP_INDEX_NAME);
     16469        psFree(md);
     16470        return false;
     16471    }
     16472    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) {
     16473        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     16474        psFree(md);
     16475        return false;
     16476    }
     16477    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) {
     16478        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     16479        psFree(md);
     16480        return false;
     16481    }
     16482    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {
     16483        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     16484        psFree(md);
     16485        return false;
     16486    }
     16487    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) {
     16488        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16489        psFree(md);
     16490        return false;
     16491    }
     16492    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) {
     16493        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16494        psFree(md);
     16495        return false;
     16496    }
     16497    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) {
     16498        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     16499        psFree(md);
     16500        return false;
     16501    }
     16502    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "64")) {
     16503        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     16504        psFree(md);
     16505        return false;
     16506    }
     16507    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "64")) {
     16508        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     16509        psFree(md);
     16510        return false;
     16511    }
     16512
     16513    status = psDBCreateTable(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
     16514
     16515    psFree(md);
     16516
     16517    return status;
     16518}
     16519
     16520bool detNormalizedExpDropTable(psDB *dbh)
     16521{
     16522    return psDBDropTable(dbh, DETNORMALIZEDEXP_TABLE_NAME);
     16523}
     16524
     16525bool detNormalizedExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri)
     16526{
     16527    psMetadata      *md;
     16528    bool            status;
     16529
     16530    md = psMetadataAlloc();
     16531    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) {
     16532        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     16533        psFree(md);
     16534        return false;
     16535    }
     16536    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) {
     16537        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     16538        psFree(md);
     16539        return false;
     16540    }
     16541    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {
     16542        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     16543        psFree(md);
     16544        return false;
     16545    }
     16546    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) {
     16547        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16548        psFree(md);
     16549        return false;
     16550    }
     16551    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) {
     16552        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16553        psFree(md);
     16554        return false;
     16555    }
     16556    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) {
     16557        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     16558        psFree(md);
     16559        return false;
     16560    }
     16561    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) {
     16562        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     16563        psFree(md);
     16564        return false;
     16565    }
     16566    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) {
     16567        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     16568        psFree(md);
     16569        return false;
     16570    }
     16571
     16572    status = psDBInsertOneRow(dbh, DETNORMALIZEDEXP_TABLE_NAME, md);
     16573    psFree(md);
     16574
     16575    return status;
     16576}
     16577
     16578long long detNormalizedExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)
     16579{
     16580    long long       deleted = 0;
     16581
     16582    long long count = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit);
     16583    if (count < 0) {
     16584        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detNormalizedExp");
     16585        return count;
     16586
     16587        deleted += count;
     16588    }
     16589
     16590    return deleted;
     16591}
     16592bool detNormalizedExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)
     16593{
     16594    psArray         *rowSet;
     16595    psMetadata      *row;
     16596    psMetadata      *popped;
     16597    long            deleted;
     16598    bool            status;
     16599    int             rowID;
     16600
     16601    rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, NULL, 1);
     16602    if (!rowSet) {
     16603        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);
     16604        psFree(rowSet);
     16605        return NULL;
     16606    }
     16607
     16608    row = psArrayGet(rowSet, 0);
     16609    psMemIncrRefCounter(row);
     16610    if (!row) {
     16611        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     16612        return NULL;
     16613    }
     16614    psFree(rowSet);
     16615
     16616    rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDEXP_INDEX_NAME);
     16617    if (!status) {
     16618        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);
     16619        psFree(row);
     16620        return NULL;
     16621    }
     16622
     16623    popped = psMetadataAlloc();
     16624    psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, 0, NULL, rowID);
     16625
     16626    deleted = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, popped, 0);
     16627    if (deleted != 1) {
     16628        psError(PS_ERR_UNKNOWN, false, "database failed to delete row");
     16629        psFree(popped);
     16630        psFree(row);
     16631        return NULL;
     16632    }
     16633
     16634    psFree(popped);
     16635
     16636    *det_id = psMetadataLookupS32(&status, row, "det_id");
     16637    if (!status) {
     16638        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     16639        psFree(row);
     16640        return false;
     16641    }
     16642    *iteration = psMetadataLookupS32(&status, row, "iteration");
     16643    if (!status) {
     16644        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
     16645        psFree(row);
     16646        return false;
     16647    }
     16648    *recipe = psMetadataLookupPtr(&status, row, "recipe");
     16649    if (!status) {
     16650        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
     16651        psFree(row);
     16652        return false;
     16653    }
     16654    *bg = psMetadataLookupF64(&status, row, "bg");
     16655    if (!status) {
     16656        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     16657        psFree(row);
     16658        return false;
     16659    }
     16660    *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");
     16661    if (!status) {
     16662        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     16663        psFree(row);
     16664        return false;
     16665    }
     16666    *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");
     16667    if (!status) {
     16668        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     16669        psFree(row);
     16670        return false;
     16671    }
     16672    *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");
     16673    if (!status) {
     16674        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     16675        psFree(row);
     16676        return false;
     16677    }
     16678    *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");
     16679    if (!status) {
     16680        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     16681        psFree(row);
     16682        return false;
     16683    }
     16684
     16685    psFree(row);
     16686
     16687    return true;
     16688}
     16689
     16690bool detNormalizedExpInsertObject(psDB *dbh, detNormalizedExpRow *object)
     16691{
     16692    return detNormalizedExpInsert(dbh, object->det_id, object->iteration, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri);
     16693}
     16694
     16695bool detNormalizedExpInsertObjects(psDB *dbh, psArray *objects)
     16696{
     16697    for (long i = 0; i < psArrayLength(objects); i++) {
     16698        if (!detNormalizedExpInsertObject(dbh, objects->data[i])) {
     16699            return false;
     16700        }
     16701    }
     16702
     16703    return true;
     16704}
     16705
     16706detNormalizedExpRow *detNormalizedExpPopObject(psDB *dbh)
     16707{
     16708    psS32           det_id;
     16709    psS32           iteration;
     16710    char            recipe[256];
     16711    psF64           bg;
     16712    psF64           bg_stdev;
     16713    psF64           bg_mean_stdev;
     16714    char            b1_uri[256];
     16715    char            b2_uri[256];
     16716
     16717    if (!detNormalizedExpPop(dbh, &det_id, &iteration, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {
     16718        psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");
     16719        return NULL;
     16720    }
     16721
     16722    return detNormalizedExpRowAlloc(det_id, iteration, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
     16723}
     16724
     16725bool detNormalizedExpInsertFits(psDB *dbh, const psFits *fits)
     16726{
     16727    psArray         *rowSet;
     16728
     16729    // move to (the first?) extension named  DETNORMALIZEDEXP_TABLE_NAME
     16730    if (!psFitsMoveExtName(fits, DETNORMALIZEDEXP_TABLE_NAME)) {
     16731        psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETNORMALIZEDEXP_TABLE_NAME);
     16732        return false;
     16733    }
     16734
     16735    // check HDU type
     16736    if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE)  {
     16737        psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");
     16738        return false;
     16739    }
     16740
     16741    // read fits table
     16742    rowSet = psFitsReadTable(fits);
     16743    if (!rowSet) {
     16744        psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");
     16745        psFree(rowSet);
     16746        return false;
     16747    }
     16748
     16749    if (!psDBInsertRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, rowSet)) {
     16750        psError(PS_ERR_UNKNOWN, false, "databse insert failed");
     16751        psFree(rowSet);
     16752        return false;
     16753    }
     16754
     16755    psFree(rowSet);
     16756
     16757    return true;
     16758}
     16759
     16760bool detNormalizedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)
     16761{
     16762    char            query[MAX_STRING_LENGTH];
     16763
     16764    if (!detNormalizedExpSelectRowsFits(dbh, fits, NULL, limit)) {
     16765        psError(PS_ERR_UNKNOWN, true, "database error or table is empty");
     16766        return false;
     16767    }
     16768
     16769    // remove limit rows from the end of the database
     16770    if (snprintf(query, MAX_STRING_LENGTH,
     16771                "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",
     16772                DETNORMALIZEDEXP_TABLE_NAME, DETNORMALIZEDEXP_INDEX_NAME, limit) < 0) {
     16773        psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);
     16774        return false;
     16775    }
     16776           
     16777    if (!p_psDBRunQuery(dbh, query)) {
     16778        psError(PS_ERR_UNKNOWN, false, "database query failed");
     16779        return false;
     16780    }
     16781
     16782    return true;
     16783}
     16784
     16785bool detNormalizedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)
     16786{
     16787    psArray         *rowSet;
     16788    psU64           i;
     16789
     16790    rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit);
     16791    if (!rowSet) {
     16792        return false;
     16793    }
     16794
     16795    // strip index column
     16796    for (i = 0; i < rowSet->n; i++) {
     16797        if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDEXP_INDEX_NAME)) {
     16798            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);
     16799            psFree(rowSet);
     16800            return false;
     16801        }
     16802    }
     16803
     16804    // output to fits
     16805    if (!psFitsWriteTable(fits, NULL, rowSet, DETNORMALIZEDEXP_TABLE_NAME)) {
     16806        psError(PS_ERR_UNKNOWN, false, "FITS table write failed");
     16807        psFree(rowSet);
     16808        return false;
     16809    }
     16810
     16811    psFree(rowSet);
     16812
     16813    return true;
     16814}
     16815
     16816psMetadata *detNormalizedExpMetadataFromObject(const detNormalizedExpRow *object)
     16817{
     16818    psMetadata      *md;
     16819
     16820    md = psMetadataAlloc();
     16821    if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) {
     16822        psError(PS_ERR_UNKNOWN, false, "failed to add item det_id");
     16823        psFree(md);
     16824        return NULL;
     16825    }
     16826    if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) {
     16827        psError(PS_ERR_UNKNOWN, false, "failed to add item iteration");
     16828        psFree(md);
     16829        return NULL;
     16830    }
     16831    if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {
     16832        psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");
     16833        psFree(md);
     16834        return NULL;
     16835    }
     16836    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) {
     16837        psError(PS_ERR_UNKNOWN, false, "failed to add item bg");
     16838        psFree(md);
     16839        return NULL;
     16840    }
     16841    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) {
     16842        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev");
     16843        psFree(md);
     16844        return NULL;
     16845    }
     16846    if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) {
     16847        psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev");
     16848        psFree(md);
     16849        return NULL;
     16850    }
     16851    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) {
     16852        psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri");
     16853        psFree(md);
     16854        return NULL;
     16855    }
     16856    if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) {
     16857        psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri");
     16858        psFree(md);
     16859        return NULL;
     16860    }
     16861
     16862    return md;
     16863}
     16864
     16865detNormalizedExpRow *detNormalizedExpObjectFromMetadata(psMetadata *md)
     16866{
     16867    bool            status;
     16868    psS32           det_id;
     16869    psS32           iteration;
     16870    char            *recipe;
     16871    psF64           bg;
     16872    psF64           bg_stdev;
     16873    psF64           bg_mean_stdev;
     16874    char            *b1_uri;
     16875    char            *b2_uri;
     16876
     16877    det_id = psMetadataLookupS32(&status, md, "det_id");
     16878    if (!status) {
     16879        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");
     16880        return false;
     16881    }
     16882    iteration = psMetadataLookupS32(&status, md, "iteration");
     16883    if (!status) {
     16884        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");
     16885        return false;
     16886    }
     16887    recipe = psMetadataLookupPtr(&status, md, "recipe");
     16888    if (!status) {
     16889        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");
     16890        return false;
     16891    }
     16892    bg = psMetadataLookupF64(&status, md, "bg");
     16893    if (!status) {
     16894        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");
     16895        return false;
     16896    }
     16897    bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev");
     16898    if (!status) {
     16899        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");
     16900        return false;
     16901    }
     16902    bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev");
     16903    if (!status) {
     16904        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");
     16905        return false;
     16906    }
     16907    b1_uri = psMetadataLookupPtr(&status, md, "b1_uri");
     16908    if (!status) {
     16909        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");
     16910        return false;
     16911    }
     16912    b2_uri = psMetadataLookupPtr(&status, md, "b2_uri");
     16913    if (!status) {
     16914        psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");
     16915        return false;
     16916    }
     16917
     16918    return detNormalizedExpRowAlloc(det_id, iteration, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);
     16919}
     16920psArray *detNormalizedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
     16921{
     16922    psArray         *rowSet;
     16923    psArray         *returnSet;
     16924    psU64           i;
     16925
     16926    rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit);
     16927    if (!rowSet) {
     16928        return NULL;
     16929    }
     16930
     16931    // strip index column
     16932    for (i = 0; i < rowSet->n; i++) {
     16933        if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDEXP_INDEX_NAME)) {
     16934            psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);
     16935            psFree(rowSet);
     16936            return false;
     16937        }
     16938    }
     16939
     16940    // convert psMetadata rows to row objects
     16941
     16942    returnSet = psArrayAlloc(rowSet->n);
     16943    returnSet->n = 0;
     16944
     16945    for (i = 0; i < rowSet->n; i++) {
     16946        detNormalizedExpRow *object = detNormalizedExpObjectFromMetadata(rowSet->data[i]);
     16947        psArrayAdd(returnSet, 0, object);
     16948        psFree(object);
     16949    }
     16950
     16951    psFree(rowSet);
     16952
     16953    return returnSet;
     16954}
     16955bool detNormalizedExpDeleteObject(psDB *dbh, const detNormalizedExpRow *object)
     16956{
     16957    psMetadata *where = detNormalizedExpMetadataFromObject(object);
     16958    long long count = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, 0);
     16959    psFree(where)
     16960    if (count < 0) {
     16961        psError(PS_ERR_UNKNOWN, true, "failed to delete row from detNormalizedExp");
     16962        return false;
     16963    }
     16964    if (count > 1) {
     16965        // XXX should this be a psAbort() instead?  It is possible that
     16966        // having an object match multiple rows was by design.
     16967        psError(PS_ERR_UNKNOWN, true, "detNormalizedExpRow object matched more then one row.  Check your database schema");
     16968        return false;
     16969    }
     16970
     16971    return true;
     16972}
     16973long long detNormalizedExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)
     16974{
     16975    long long       deleted = 0;
     16976
     16977    for (long long i = 0; i < objects->n; i++) {
     16978        detNormalizedExpRow *object = objects->data[i];
     16979        psMetadata *where = detNormalizedExpMetadataFromObject(object);
     16980        long long count = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit);
     16981        psFree(where)
     16982        if (count < 0) {
     16983            psError(PS_ERR_UNKNOWN, true, "failed to delete row from detNormalizedExp");
     16984            return count;
     16985        }
     16986
     16987        deleted += count;
     16988    }
     16989
     16990    return deleted;
     16991}
     16992bool detNormalizedExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)
     16993{
     16994    PS_ASSERT_PTR_NON_NULL(objects, false);
     16995
     16996    psMetadata *output = psMetadataAlloc();
     16997    for (long i = 0; i < psArrayLength(objects); i++) {
     16998        psMetadata *md = detNormalizedExpMetadataFromObject(objects->data[i]);
     16999        if (!psMetadataAddMetadata(
     17000            output,
     17001            PS_LIST_TAIL,
     17002            DETNORMALIZEDEXP_TABLE_NAME,
     17003            PS_META_DUPLICATE_OK,
     17004            NULL,
     17005            md
     17006        )) {
     17007            psError(PS_ERR_UNKNOWN, false, "failed to add metadata");
     17008            psFree(md);
     17009            psFree(output);
     17010            return false;
     17011        }
     17012        psFree(md);
     17013    }
     17014
     17015    if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {
     17016        psError(PS_ERR_UNKNOWN, false, "failed to print metadata");
     17017        psFree(output);
     17018    }
     17019    psFree(output);
     17020
     17021    return true;
     17022}
    1643117023static void detMasterFrameRowFree(detMasterFrameRow *object);
    1643217024
Note: See TracChangeset for help on using the changeset viewer.