Changeset 9149 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Oct 3, 2006, 12:09:49 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r9107 r9149 71 71 #define DETNORMALIZEDIMFILE_TABLE_NAME "detNormalizedImfile" 72 72 #define DETNORMALIZEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 73 #define DETNORMALIZEDEXP_TABLE_NAME "detNormalizedExp" 74 #define DETNORMALIZEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 73 75 #define DETMASTERFRAME_TABLE_NAME "detMasterFrame" 74 76 #define DETMASTERFRAME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME … … 16429 16431 return true; 16430 16432 } 16433 static void detNormalizedExpRowFree(detNormalizedExpRow *object); 16434 16435 detNormalizedExpRow *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 16454 static void detNormalizedExpRowFree(detNormalizedExpRow *object) 16455 { 16456 psFree(object->recipe); 16457 psFree(object->b1_uri); 16458 psFree(object->b2_uri); 16459 } 16460 16461 bool 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 16520 bool detNormalizedExpDropTable(psDB *dbh) 16521 { 16522 return psDBDropTable(dbh, DETNORMALIZEDEXP_TABLE_NAME); 16523 } 16524 16525 bool 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 16578 long 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 } 16592 bool 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 16690 bool 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 16695 bool 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 16706 detNormalizedExpRow *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 16725 bool 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 16760 bool 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 16785 bool 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 16816 psMetadata *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 16865 detNormalizedExpRow *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 } 16920 psArray *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 } 16955 bool 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 } 16973 long 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 } 16992 bool 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 } 16431 17023 static void detMasterFrameRowFree(detMasterFrameRow *object); 16432 17024
Note:
See TracChangeset
for help on using the changeset viewer.
