Changeset 9107 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Oct 2, 2006, 1:49:11 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (13 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r9054 r9107 63 63 #define DETPROCESSEDIMFILE_TABLE_NAME "detProcessedImfile" 64 64 #define DETPROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 65 #define DETPROCESSEDEXP_TABLE_NAME "detProcessedExp" 66 #define DETPROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 65 67 #define DETSTACKEDIMFILE_TABLE_NAME "detStackedImfile" 66 68 #define DETSTACKEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME … … 14301 14303 return true; 14302 14304 } 14305 static void detProcessedExpRowFree(detProcessedExpRow *object); 14306 14307 detProcessedExpRow *detProcessedExpRowAlloc(psS32 det_id, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri) 14308 { 14309 detProcessedExpRow *object; 14310 14311 object = psAlloc(sizeof(detProcessedExpRow)); 14312 psMemSetDeallocator(object, (psFreeFunc)detProcessedExpRowFree); 14313 14314 object->det_id = det_id; 14315 object->exp_tag = psStringCopy(exp_tag); 14316 object->recipe = psStringCopy(recipe); 14317 object->bg = bg; 14318 object->bg_stdev = bg_stdev; 14319 object->bg_mean_stdev = bg_mean_stdev; 14320 object->b1_uri = psStringCopy(b1_uri); 14321 object->b2_uri = psStringCopy(b2_uri); 14322 14323 return object; 14324 } 14325 14326 static void detProcessedExpRowFree(detProcessedExpRow *object) 14327 { 14328 psFree(object->exp_tag); 14329 psFree(object->recipe); 14330 psFree(object->b1_uri); 14331 psFree(object->b2_uri); 14332 } 14333 14334 bool detProcessedExpCreateTable(psDB *dbh) 14335 { 14336 psMetadata *md; 14337 bool status; 14338 14339 md = psMetadataAlloc(); 14340 if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) { 14341 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDEXP_INDEX_NAME); 14342 psFree(md); 14343 return false; 14344 } 14345 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 14346 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 14347 psFree(md); 14348 return false; 14349 } 14350 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 14351 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); 14352 psFree(md); 14353 return false; 14354 } 14355 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) { 14356 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); 14357 psFree(md); 14358 return false; 14359 } 14360 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) { 14361 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14362 psFree(md); 14363 return false; 14364 } 14365 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) { 14366 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14367 psFree(md); 14368 return false; 14369 } 14370 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) { 14371 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14372 psFree(md); 14373 return false; 14374 } 14375 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "64")) { 14376 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 14377 psFree(md); 14378 return false; 14379 } 14380 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "64")) { 14381 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 14382 psFree(md); 14383 return false; 14384 } 14385 14386 status = psDBCreateTable(dbh, DETPROCESSEDEXP_TABLE_NAME, md); 14387 14388 psFree(md); 14389 14390 return status; 14391 } 14392 14393 bool detProcessedExpDropTable(psDB *dbh) 14394 { 14395 return psDBDropTable(dbh, DETPROCESSEDEXP_TABLE_NAME); 14396 } 14397 14398 bool detProcessedExpInsert(psDB * dbh, psS32 det_id, const char *exp_tag, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri) 14399 { 14400 psMetadata *md; 14401 bool status; 14402 14403 md = psMetadataAlloc(); 14404 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) { 14405 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 14406 psFree(md); 14407 return false; 14408 } 14409 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, exp_tag)) { 14410 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); 14411 psFree(md); 14412 return false; 14413 } 14414 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) { 14415 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); 14416 psFree(md); 14417 return false; 14418 } 14419 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) { 14420 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14421 psFree(md); 14422 return false; 14423 } 14424 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) { 14425 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14426 psFree(md); 14427 return false; 14428 } 14429 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 14430 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14431 psFree(md); 14432 return false; 14433 } 14434 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) { 14435 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 14436 psFree(md); 14437 return false; 14438 } 14439 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) { 14440 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 14441 psFree(md); 14442 return false; 14443 } 14444 14445 status = psDBInsertOneRow(dbh, DETPROCESSEDEXP_TABLE_NAME, md); 14446 psFree(md); 14447 14448 return status; 14449 } 14450 14451 long long detProcessedExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 14452 { 14453 long long deleted = 0; 14454 14455 long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit); 14456 if (count < 0) { 14457 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp"); 14458 return count; 14459 14460 deleted += count; 14461 } 14462 14463 return deleted; 14464 } 14465 bool detProcessedExpPop(psDB *dbh, psS32 *det_id, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri) 14466 { 14467 psArray *rowSet; 14468 psMetadata *row; 14469 psMetadata *popped; 14470 long deleted; 14471 bool status; 14472 int rowID; 14473 14474 rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, NULL, 1); 14475 if (!rowSet) { 14476 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME); 14477 psFree(rowSet); 14478 return NULL; 14479 } 14480 14481 row = psArrayGet(rowSet, 0); 14482 psMemIncrRefCounter(row); 14483 if (!row) { 14484 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 14485 return NULL; 14486 } 14487 psFree(rowSet); 14488 14489 rowID = psMetadataLookupS32(&status, row, DETPROCESSEDEXP_INDEX_NAME); 14490 if (!status) { 14491 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME); 14492 psFree(row); 14493 return NULL; 14494 } 14495 14496 popped = psMetadataAlloc(); 14497 psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, 0, NULL, rowID); 14498 14499 deleted = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, popped, 0); 14500 if (deleted != 1) { 14501 psError(PS_ERR_UNKNOWN, false, "database failed to delete row"); 14502 psFree(popped); 14503 psFree(row); 14504 return NULL; 14505 } 14506 14507 psFree(popped); 14508 14509 *det_id = psMetadataLookupS32(&status, row, "det_id"); 14510 if (!status) { 14511 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id"); 14512 psFree(row); 14513 return false; 14514 } 14515 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag"); 14516 if (!status) { 14517 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag"); 14518 psFree(row); 14519 return false; 14520 } 14521 *recipe = psMetadataLookupPtr(&status, row, "recipe"); 14522 if (!status) { 14523 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe"); 14524 psFree(row); 14525 return false; 14526 } 14527 *bg = psMetadataLookupF64(&status, row, "bg"); 14528 if (!status) { 14529 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 14530 psFree(row); 14531 return false; 14532 } 14533 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev"); 14534 if (!status) { 14535 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 14536 psFree(row); 14537 return false; 14538 } 14539 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev"); 14540 if (!status) { 14541 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 14542 psFree(row); 14543 return false; 14544 } 14545 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri"); 14546 if (!status) { 14547 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri"); 14548 psFree(row); 14549 return false; 14550 } 14551 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri"); 14552 if (!status) { 14553 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri"); 14554 psFree(row); 14555 return false; 14556 } 14557 14558 psFree(row); 14559 14560 return true; 14561 } 14562 14563 bool detProcessedExpInsertObject(psDB *dbh, detProcessedExpRow *object) 14564 { 14565 return detProcessedExpInsert(dbh, object->det_id, object->exp_tag, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri); 14566 } 14567 14568 bool detProcessedExpInsertObjects(psDB *dbh, psArray *objects) 14569 { 14570 for (long i = 0; i < psArrayLength(objects); i++) { 14571 if (!detProcessedExpInsertObject(dbh, objects->data[i])) { 14572 return false; 14573 } 14574 } 14575 14576 return true; 14577 } 14578 14579 detProcessedExpRow *detProcessedExpPopObject(psDB *dbh) 14580 { 14581 psS32 det_id; 14582 char exp_tag[256]; 14583 char recipe[256]; 14584 psF64 bg; 14585 psF64 bg_stdev; 14586 psF64 bg_mean_stdev; 14587 char b1_uri[256]; 14588 char b2_uri[256]; 14589 14590 if (!detProcessedExpPop(dbh, &det_id, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 14591 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 14592 return NULL; 14593 } 14594 14595 return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri); 14596 } 14597 14598 bool detProcessedExpInsertFits(psDB *dbh, const psFits *fits) 14599 { 14600 psArray *rowSet; 14601 14602 // move to (the first?) extension named DETPROCESSEDEXP_TABLE_NAME 14603 if (!psFitsMoveExtName(fits, DETPROCESSEDEXP_TABLE_NAME)) { 14604 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETPROCESSEDEXP_TABLE_NAME); 14605 return false; 14606 } 14607 14608 // check HDU type 14609 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 14610 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 14611 return false; 14612 } 14613 14614 // read fits table 14615 rowSet = psFitsReadTable(fits); 14616 if (!rowSet) { 14617 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 14618 psFree(rowSet); 14619 return false; 14620 } 14621 14622 if (!psDBInsertRows(dbh, DETPROCESSEDEXP_TABLE_NAME, rowSet)) { 14623 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 14624 psFree(rowSet); 14625 return false; 14626 } 14627 14628 psFree(rowSet); 14629 14630 return true; 14631 } 14632 14633 bool detProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit) 14634 { 14635 char query[MAX_STRING_LENGTH]; 14636 14637 if (!detProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) { 14638 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 14639 return false; 14640 } 14641 14642 // remove limit rows from the end of the database 14643 if (snprintf(query, MAX_STRING_LENGTH, 14644 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld", 14645 DETPROCESSEDEXP_TABLE_NAME, DETPROCESSEDEXP_INDEX_NAME, limit) < 0) { 14646 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH); 14647 return false; 14648 } 14649 14650 if (!p_psDBRunQuery(dbh, query)) { 14651 psError(PS_ERR_UNKNOWN, false, "database query failed"); 14652 return false; 14653 } 14654 14655 return true; 14656 } 14657 14658 bool detProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 14659 { 14660 psArray *rowSet; 14661 psU64 i; 14662 14663 rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit); 14664 if (!rowSet) { 14665 return false; 14666 } 14667 14668 // strip index column 14669 for (i = 0; i < rowSet->n; i++) { 14670 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDEXP_INDEX_NAME)) { 14671 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME); 14672 psFree(rowSet); 14673 return false; 14674 } 14675 } 14676 14677 // output to fits 14678 if (!psFitsWriteTable(fits, NULL, rowSet, DETPROCESSEDEXP_TABLE_NAME)) { 14679 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 14680 psFree(rowSet); 14681 return false; 14682 } 14683 14684 psFree(rowSet); 14685 14686 return true; 14687 } 14688 14689 psMetadata *detProcessedExpMetadataFromObject(const detProcessedExpRow *object) 14690 { 14691 psMetadata *md; 14692 14693 md = psMetadataAlloc(); 14694 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) { 14695 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 14696 psFree(md); 14697 return NULL; 14698 } 14699 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, NULL, object->exp_tag)) { 14700 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); 14701 psFree(md); 14702 return NULL; 14703 } 14704 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) { 14705 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); 14706 psFree(md); 14707 return NULL; 14708 } 14709 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) { 14710 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14711 psFree(md); 14712 return NULL; 14713 } 14714 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) { 14715 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14716 psFree(md); 14717 return NULL; 14718 } 14719 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 14720 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14721 psFree(md); 14722 return NULL; 14723 } 14724 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) { 14725 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 14726 psFree(md); 14727 return NULL; 14728 } 14729 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) { 14730 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 14731 psFree(md); 14732 return NULL; 14733 } 14734 14735 return md; 14736 } 14737 14738 detProcessedExpRow *detProcessedExpObjectFromMetadata(psMetadata *md) 14739 { 14740 bool status; 14741 psS32 det_id; 14742 char *exp_tag; 14743 char *recipe; 14744 psF64 bg; 14745 psF64 bg_stdev; 14746 psF64 bg_mean_stdev; 14747 char *b1_uri; 14748 char *b2_uri; 14749 14750 det_id = psMetadataLookupS32(&status, md, "det_id"); 14751 if (!status) { 14752 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id"); 14753 return false; 14754 } 14755 exp_tag = psMetadataLookupPtr(&status, md, "exp_tag"); 14756 if (!status) { 14757 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag"); 14758 return false; 14759 } 14760 recipe = psMetadataLookupPtr(&status, md, "recipe"); 14761 if (!status) { 14762 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe"); 14763 return false; 14764 } 14765 bg = psMetadataLookupF64(&status, md, "bg"); 14766 if (!status) { 14767 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 14768 return false; 14769 } 14770 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev"); 14771 if (!status) { 14772 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 14773 return false; 14774 } 14775 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev"); 14776 if (!status) { 14777 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 14778 return false; 14779 } 14780 b1_uri = psMetadataLookupPtr(&status, md, "b1_uri"); 14781 if (!status) { 14782 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri"); 14783 return false; 14784 } 14785 b2_uri = psMetadataLookupPtr(&status, md, "b2_uri"); 14786 if (!status) { 14787 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri"); 14788 return false; 14789 } 14790 14791 return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri); 14792 } 14793 psArray *detProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 14794 { 14795 psArray *rowSet; 14796 psArray *returnSet; 14797 psU64 i; 14798 14799 rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit); 14800 if (!rowSet) { 14801 return NULL; 14802 } 14803 14804 // strip index column 14805 for (i = 0; i < rowSet->n; i++) { 14806 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDEXP_INDEX_NAME)) { 14807 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME); 14808 psFree(rowSet); 14809 return false; 14810 } 14811 } 14812 14813 // convert psMetadata rows to row objects 14814 14815 returnSet = psArrayAlloc(rowSet->n); 14816 returnSet->n = 0; 14817 14818 for (i = 0; i < rowSet->n; i++) { 14819 detProcessedExpRow *object = detProcessedExpObjectFromMetadata(rowSet->data[i]); 14820 psArrayAdd(returnSet, 0, object); 14821 psFree(object); 14822 } 14823 14824 psFree(rowSet); 14825 14826 return returnSet; 14827 } 14828 bool detProcessedExpDeleteObject(psDB *dbh, const detProcessedExpRow *object) 14829 { 14830 psMetadata *where = detProcessedExpMetadataFromObject(object); 14831 long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, 0); 14832 psFree(where) 14833 if (count < 0) { 14834 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp"); 14835 return false; 14836 } 14837 if (count > 1) { 14838 // XXX should this be a psAbort() instead? It is possible that 14839 // having an object match multiple rows was by design. 14840 psError(PS_ERR_UNKNOWN, true, "detProcessedExpRow object matched more then one row. Check your database schema"); 14841 return false; 14842 } 14843 14844 return true; 14845 } 14846 long long detProcessedExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 14847 { 14848 long long deleted = 0; 14849 14850 for (long long i = 0; i < objects->n; i++) { 14851 detProcessedExpRow *object = objects->data[i]; 14852 psMetadata *where = detProcessedExpMetadataFromObject(object); 14853 long long count = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit); 14854 psFree(where) 14855 if (count < 0) { 14856 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detProcessedExp"); 14857 return count; 14858 } 14859 14860 deleted += count; 14861 } 14862 14863 return deleted; 14864 } 14865 bool detProcessedExpPrintObjects(FILE *stream, psArray *objects, bool mdcf) 14866 { 14867 PS_ASSERT_PTR_NON_NULL(objects, false); 14868 14869 psMetadata *output = psMetadataAlloc(); 14870 for (long i = 0; i < psArrayLength(objects); i++) { 14871 psMetadata *md = detProcessedExpMetadataFromObject(objects->data[i]); 14872 if (!psMetadataAddMetadata( 14873 output, 14874 PS_LIST_TAIL, 14875 DETPROCESSEDEXP_TABLE_NAME, 14876 PS_META_DUPLICATE_OK, 14877 NULL, 14878 md 14879 )) { 14880 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 14881 psFree(md); 14882 psFree(output); 14883 return false; 14884 } 14885 psFree(md); 14886 } 14887 14888 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 14889 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 14890 psFree(output); 14891 } 14892 psFree(output); 14893 14894 return true; 14895 } 14303 14896 static void detStackedImfileRowFree(detStackedImfileRow *object); 14304 14897 14305 detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev , bool normalize)14898 detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev) 14306 14899 { 14307 14900 detStackedImfileRow *object; … … 14318 14911 object->bg_stdev = bg_stdev; 14319 14912 object->bg_mean_stdev = bg_mean_stdev; 14320 object->normalize = normalize;14321 14913 14322 14914 return object; … … 14381 14973 return false; 14382 14974 } 14383 if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, false)) {14384 psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");14385 psFree(md);14386 return false;14387 }14388 14975 14389 14976 status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md); … … 14399 14986 } 14400 14987 14401 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev , bool normalize)14988 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev) 14402 14989 { 14403 14990 psMetadata *md; … … 14442 15029 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 14443 15030 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14444 psFree(md);14445 return false;14446 }14447 if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, normalize)) {14448 psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");14449 15031 psFree(md); 14450 15032 return false; … … 14471 15053 return deleted; 14472 15054 } 14473 bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev , bool *normalize)15055 bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev) 14474 15056 { 14475 15057 psArray *rowSet; … … 14563 15145 return false; 14564 15146 } 14565 *normalize = psMetadataLookupBool(&status, row, "normalize");14566 if (!status) {14567 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item normalize");14568 psFree(row);14569 return false;14570 }14571 15147 14572 15148 psFree(row); … … 14577 15153 bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object) 14578 15154 { 14579 return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev , object->normalize);15155 return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev); 14580 15156 } 14581 15157 … … 14601 15177 psF64 bg_stdev; 14602 15178 psF64 bg_mean_stdev; 14603 bool normalize; 14604 14605 if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, &normalize)) { 15179 15180 if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) { 14606 15181 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 14607 15182 return NULL; 14608 15183 } 14609 15184 14610 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev , normalize);15185 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev); 14611 15186 } 14612 15187 … … 14744 15319 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 14745 15320 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14746 psFree(md);14747 return NULL;14748 }14749 if (!psMetadataAdd(md, PS_LIST_TAIL, "normalize", PS_DATA_BOOL, NULL, object->normalize)) {14750 psError(PS_ERR_UNKNOWN, false, "failed to add item normalize");14751 15321 psFree(md); 14752 15322 return NULL; … … 14767 15337 psF64 bg_stdev; 14768 15338 psF64 bg_mean_stdev; 14769 bool normalize;14770 15339 14771 15340 det_id = psMetadataLookupS32(&status, md, "det_id"); … … 14809 15378 return false; 14810 15379 } 14811 normalize = psMetadataLookupBool(&status, md, "normalize"); 14812 if (!status) { 14813 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item normalize"); 14814 return false; 14815 } 14816 14817 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, normalize); 15380 15381 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev); 14818 15382 } 14819 15383 psArray *detStackedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Note:
See TracChangeset
for help on using the changeset viewer.
