Changeset 8380 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Aug 15, 2006, 6:14:10 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (76 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r8368 r8380 64 64 #define DETMASTERIMFILE_TABLE_NAME "detMasterImfile" 65 65 #define DETMASTERIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 66 #define DETRESIDIMFILE ANALYSIS_TABLE_NAME "detResidImfileAnalysis"67 #define DETRESIDIMFILE ANALYSIS_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME68 #define DETRESIDEXP ANALYSIS_TABLE_NAME "detResidExpAnalysis"69 #define DETRESIDEXP ANALYSIS_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME66 #define DETRESIDIMFILE_TABLE_NAME "detResidImfile" 67 #define DETRESIDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 68 #define DETRESIDEXP_TABLE_NAME "detResidExp" 69 #define DETRESIDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 70 70 #define MAX_STRING_LENGTH 1024 71 71 … … 15059 15059 static void detNormalizedImfileRowFree(detNormalizedImfileRow *object); 15060 15060 15061 detNormalizedImfileRow *detNormalizedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri , const char *recipe)15061 detNormalizedImfileRow *detNormalizedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri) 15062 15062 { 15063 15063 detNormalizedImfileRow *object; … … 15070 15070 object->class_id = psStringCopy(class_id); 15071 15071 object->uri = psStringCopy(uri); 15072 object->recipe = psStringCopy(recipe);15073 15072 15074 15073 return object; … … 15079 15078 psFree(object->class_id); 15080 15079 psFree(object->uri); 15081 psFree(object->recipe);15082 15080 } 15083 15081 … … 15113 15111 return false; 15114 15112 } 15115 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) {15116 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");15117 psFree(md);15118 return false;15119 }15120 15113 15121 15114 status = psDBCreateTable(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, md); … … 15131 15124 } 15132 15125 15133 bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri , const char *recipe)15126 bool detNormalizedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri) 15134 15127 { 15135 15128 psMetadata *md; … … 15154 15147 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) { 15155 15148 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 15156 psFree(md);15157 return false;15158 }15159 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) {15160 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");15161 15149 psFree(md); 15162 15150 return false; … … 15183 15171 return deleted; 15184 15172 } 15185 bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri , char **recipe)15173 bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri) 15186 15174 { 15187 15175 psArray *rowSet; … … 15251 15239 return false; 15252 15240 } 15253 *recipe = psMetadataLookupPtr(&status, row, "recipe");15254 if (!status) {15255 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");15256 psFree(row);15257 return false;15258 }15259 15241 15260 15242 psFree(row); … … 15265 15247 bool detNormalizedImfileInsertObject(psDB *dbh, detNormalizedImfileRow *object) 15266 15248 { 15267 return detNormalizedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri , object->recipe);15249 return detNormalizedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri); 15268 15250 } 15269 15251 … … 15285 15267 char class_id[256]; 15286 15268 char uri[256]; 15287 char recipe[256]; 15288 15289 if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe)) { 15269 15270 if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri)) { 15290 15271 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 15291 15272 return NULL; 15292 15273 } 15293 15274 15294 return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri , recipe);15275 return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri); 15295 15276 } 15296 15277 … … 15411 15392 return NULL; 15412 15393 } 15413 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) {15414 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe");15415 psFree(md);15416 return NULL;15417 }15418 15394 15419 15395 return md; … … 15427 15403 char *class_id; 15428 15404 char *uri; 15429 char *recipe;15430 15405 15431 15406 det_id = psMetadataLookupS32(&status, md, "det_id"); … … 15449 15424 return false; 15450 15425 } 15451 recipe = psMetadataLookupPtr(&status, md, "recipe"); 15452 if (!status) { 15453 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe"); 15454 return false; 15455 } 15456 15457 return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri, recipe); 15426 15427 return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri); 15458 15428 } 15459 15429 psArray *detNormalizedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 16477 16447 return true; 16478 16448 } 16479 static void detResidImfile AnalysisRowFree(detResidImfileAnalysisRow *object);16480 16481 detResidImfile AnalysisRow *detResidImfileAnalysisRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)16482 { 16483 detResidImfile AnalysisRow *object;16484 16485 object = psAlloc(sizeof(detResidImfile AnalysisRow));16486 psMemSetDeallocator(object, (psFreeFunc)detResidImfile AnalysisRowFree);16449 static void detResidImfileRowFree(detResidImfileRow *object); 16450 16451 detResidImfileRow *detResidImfileRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri) 16452 { 16453 detResidImfileRow *object; 16454 16455 object = psAlloc(sizeof(detResidImfileRow)); 16456 psMemSetDeallocator(object, (psFreeFunc)detResidImfileRowFree); 16487 16457 16488 16458 object->det_id = det_id; … … 16498 16468 } 16499 16469 16500 static void detResidImfile AnalysisRowFree(detResidImfileAnalysisRow *object)16470 static void detResidImfileRowFree(detResidImfileRow *object) 16501 16471 { 16502 16472 psFree(object->exp_id); … … 16508 16478 } 16509 16479 16510 bool detResidImfile AnalysisCreateTable(psDB *dbh)16480 bool detResidImfileCreateTable(psDB *dbh) 16511 16481 { 16512 16482 psMetadata *md; … … 16514 16484 16515 16485 md = psMetadataAlloc(); 16516 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDIMFILE ANALYSIS_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {16517 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDIMFILE ANALYSIS_INDEX_NAME);16486 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) { 16487 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDIMFILE_INDEX_NAME); 16518 16488 psFree(md); 16519 16489 return false; … … 16560 16530 } 16561 16531 16562 status = psDBCreateTable(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, md);16532 status = psDBCreateTable(dbh, DETRESIDIMFILE_TABLE_NAME, md); 16563 16533 16564 16534 psFree(md); … … 16567 16537 } 16568 16538 16569 bool detResidImfile AnalysisDropTable(psDB *dbh)16570 { 16571 return psDBDropTable(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME);16572 } 16573 16574 bool detResidImfile AnalysisInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri)16539 bool detResidImfileDropTable(psDB *dbh) 16540 { 16541 return psDBDropTable(dbh, DETRESIDIMFILE_TABLE_NAME); 16542 } 16543 16544 bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *recipe, const char *uri, const char *b1_uri, const char *b2_uri) 16575 16545 { 16576 16546 psMetadata *md; … … 16619 16589 } 16620 16590 16621 status = psDBInsertOneRow(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, md);16591 status = psDBInsertOneRow(dbh, DETRESIDIMFILE_TABLE_NAME, md); 16622 16592 psFree(md); 16623 16593 … … 16625 16595 } 16626 16596 16627 long long detResidImfile AnalysisDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)16597 long long detResidImfileDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 16628 16598 { 16629 16599 long long deleted = 0; 16630 16600 16631 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, where, limit);16601 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit); 16632 16602 if (count < 0) { 16633 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile Analysis");16603 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile"); 16634 16604 return count; 16635 16605 … … 16639 16609 return deleted; 16640 16610 } 16641 bool detResidImfile AnalysisPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **recipe, char **uri, char **b1_uri, char **b2_uri)16611 bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **recipe, char **uri, char **b1_uri, char **b2_uri) 16642 16612 { 16643 16613 psArray *rowSet; … … 16648 16618 int rowID; 16649 16619 16650 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, NULL, 1);16620 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, NULL, 1); 16651 16621 if (!rowSet) { 16652 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE ANALYSIS_INDEX_NAME);16622 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME); 16653 16623 psFree(rowSet); 16654 16624 return NULL; … … 16663 16633 psFree(rowSet); 16664 16634 16665 rowID = psMetadataLookupS32(&status, row, DETRESIDIMFILE ANALYSIS_INDEX_NAME);16666 if (!status) { 16667 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE ANALYSIS_INDEX_NAME);16635 rowID = psMetadataLookupS32(&status, row, DETRESIDIMFILE_INDEX_NAME); 16636 if (!status) { 16637 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME); 16668 16638 psFree(row); 16669 16639 return NULL; … … 16671 16641 16672 16642 popped = psMetadataAlloc(); 16673 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDIMFILE ANALYSIS_INDEX_NAME, 0, NULL, rowID);16674 16675 deleted = psDBDeleteRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, popped, 0);16643 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, 0, NULL, rowID); 16644 16645 deleted = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, popped, 0); 16676 16646 if (deleted != 1) { 16677 16647 psError(PS_ERR_UNKNOWN, false, "database failed to delete row"); … … 16737 16707 } 16738 16708 16739 bool detResidImfile AnalysisInsertObject(psDB *dbh, detResidImfileAnalysisRow *object)16740 { 16741 return detResidImfile AnalysisInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->recipe, object->uri, object->b1_uri, object->b2_uri);16742 } 16743 16744 bool detResidImfile AnalysisInsertObjects(psDB *dbh, psArray *objects)16709 bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object) 16710 { 16711 return detResidImfileInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->recipe, object->uri, object->b1_uri, object->b2_uri); 16712 } 16713 16714 bool detResidImfileInsertObjects(psDB *dbh, psArray *objects) 16745 16715 { 16746 16716 for (long i = 0; i < psArrayLength(objects); i++) { 16747 if (!detResidImfile AnalysisInsertObject(dbh, objects->data[i])) {16717 if (!detResidImfileInsertObject(dbh, objects->data[i])) { 16748 16718 return false; 16749 16719 } … … 16753 16723 } 16754 16724 16755 detResidImfile AnalysisRow *detResidImfileAnalysisPopObject(psDB *dbh)16725 detResidImfileRow *detResidImfilePopObject(psDB *dbh) 16756 16726 { 16757 16727 psS32 det_id; … … 16764 16734 char b2_uri[256]; 16765 16735 16766 if (!detResidImfile AnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) {16736 if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) { 16767 16737 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 16768 16738 return NULL; 16769 16739 } 16770 16740 16771 return detResidImfile AnalysisRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);16772 } 16773 16774 bool detResidImfile AnalysisInsertFits(psDB *dbh, const psFits *fits)16741 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri); 16742 } 16743 16744 bool detResidImfileInsertFits(psDB *dbh, const psFits *fits) 16775 16745 { 16776 16746 psArray *rowSet; 16777 16747 16778 // move to (the first?) extension named DETRESIDIMFILE ANALYSIS_TABLE_NAME16779 if (!psFitsMoveExtName(fits, DETRESIDIMFILE ANALYSIS_TABLE_NAME)) {16780 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDIMFILE ANALYSIS_TABLE_NAME);16748 // move to (the first?) extension named DETRESIDIMFILE_TABLE_NAME 16749 if (!psFitsMoveExtName(fits, DETRESIDIMFILE_TABLE_NAME)) { 16750 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDIMFILE_TABLE_NAME); 16781 16751 return false; 16782 16752 } … … 16796 16766 } 16797 16767 16798 if (!psDBInsertRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, rowSet)) {16768 if (!psDBInsertRows(dbh, DETRESIDIMFILE_TABLE_NAME, rowSet)) { 16799 16769 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 16800 16770 psFree(rowSet); … … 16807 16777 } 16808 16778 16809 bool detResidImfile AnalysisPopFits(psDB *dbh, psFits *fits, unsigned long long limit)16779 bool detResidImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit) 16810 16780 { 16811 16781 char query[MAX_STRING_LENGTH]; 16812 16782 16813 if (!detResidImfile AnalysisSelectRowsFits(dbh, fits, NULL, limit)) {16783 if (!detResidImfileSelectRowsFits(dbh, fits, NULL, limit)) { 16814 16784 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 16815 16785 return false; … … 16819 16789 if (snprintf(query, MAX_STRING_LENGTH, 16820 16790 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld", 16821 DETRESIDIMFILE ANALYSIS_TABLE_NAME, DETRESIDIMFILEANALYSIS_INDEX_NAME, limit) < 0) {16791 DETRESIDIMFILE_TABLE_NAME, DETRESIDIMFILE_INDEX_NAME, limit) < 0) { 16822 16792 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH); 16823 16793 return false; … … 16832 16802 } 16833 16803 16834 bool detResidImfile AnalysisSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)16804 bool detResidImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 16835 16805 { 16836 16806 psArray *rowSet; 16837 16807 psU64 i; 16838 16808 16839 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, where, limit);16809 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit); 16840 16810 if (!rowSet) { 16841 16811 return false; … … 16844 16814 // strip index column 16845 16815 for (i = 0; i < rowSet->n; i++) { 16846 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDIMFILE ANALYSIS_INDEX_NAME)) {16847 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE ANALYSIS_INDEX_NAME);16816 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDIMFILE_INDEX_NAME)) { 16817 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME); 16848 16818 psFree(rowSet); 16849 16819 return false; … … 16852 16822 16853 16823 // output to fits 16854 if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDIMFILE ANALYSIS_TABLE_NAME)) {16824 if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDIMFILE_TABLE_NAME)) { 16855 16825 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 16856 16826 psFree(rowSet); … … 16863 16833 } 16864 16834 16865 psMetadata *detResidImfile AnalysisMetadataFromObject(const detResidImfileAnalysisRow *object)16835 psMetadata *detResidImfileMetadataFromObject(const detResidImfileRow *object) 16866 16836 { 16867 16837 psMetadata *md; … … 16912 16882 } 16913 16883 16914 detResidImfile AnalysisRow *detResidImfileAnalysisObjectFromMetadata(psMetadata *md)16884 detResidImfileRow *detResidImfileObjectFromMetadata(psMetadata *md) 16915 16885 { 16916 16886 bool status; … … 16965 16935 } 16966 16936 16967 return detResidImfile AnalysisRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);16968 } 16969 psArray *detResidImfile AnalysisSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)16937 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri); 16938 } 16939 psArray *detResidImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 16970 16940 { 16971 16941 psArray *rowSet; … … 16973 16943 psU64 i; 16974 16944 16975 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, where, limit);16945 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit); 16976 16946 if (!rowSet) { 16977 16947 return NULL; … … 16980 16950 // strip index column 16981 16951 for (i = 0; i < rowSet->n; i++) { 16982 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDIMFILE ANALYSIS_INDEX_NAME)) {16983 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE ANALYSIS_INDEX_NAME);16952 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDIMFILE_INDEX_NAME)) { 16953 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME); 16984 16954 psFree(rowSet); 16985 16955 return false; … … 16993 16963 16994 16964 for (i = 0; i < rowSet->n; i++) { 16995 detResidImfile AnalysisRow *object = detResidImfileAnalysisObjectFromMetadata(rowSet->data[i]);16965 detResidImfileRow *object = detResidImfileObjectFromMetadata(rowSet->data[i]); 16996 16966 psArrayAdd(returnSet, 0, object); 16997 16967 psFree(object); … … 17002 16972 return returnSet; 17003 16973 } 17004 bool detResidImfile AnalysisDeleteObject(psDB *dbh, const detResidImfileAnalysisRow *object)17005 { 17006 psMetadata *where = detResidImfile AnalysisMetadataFromObject(object);17007 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, where, 0);16974 bool detResidImfileDeleteObject(psDB *dbh, const detResidImfileRow *object) 16975 { 16976 psMetadata *where = detResidImfileMetadataFromObject(object); 16977 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, 0); 17008 16978 psFree(where) 17009 16979 if (count < 0) { 17010 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile Analysis");16980 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile"); 17011 16981 return false; 17012 16982 } … … 17014 16984 // XXX should this be a psAbort() instead? It is possible that 17015 16985 // having an object match multiple rows was by design. 17016 psError(PS_ERR_UNKNOWN, true, "detResidImfile AnalysisRow object matched more then one row. Check your database schema");17017 return false; 17018 } 17019 17020 return true; 17021 } 17022 long long detResidImfile AnalysisDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)16986 psError(PS_ERR_UNKNOWN, true, "detResidImfileRow object matched more then one row. Check your database schema"); 16987 return false; 16988 } 16989 16990 return true; 16991 } 16992 long long detResidImfileDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 17023 16993 { 17024 16994 long long deleted = 0; 17025 16995 17026 16996 for (long long i = 0; i < objects->n; i++) { 17027 detResidImfile AnalysisRow *object = objects->data[i];17028 psMetadata *where = detResidImfile AnalysisMetadataFromObject(object);17029 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE ANALYSIS_TABLE_NAME, where, limit);16997 detResidImfileRow *object = objects->data[i]; 16998 psMetadata *where = detResidImfileMetadataFromObject(object); 16999 long long count = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit); 17030 17000 psFree(where) 17031 17001 if (count < 0) { 17032 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile Analysis");17002 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidImfile"); 17033 17003 return count; 17034 17004 } … … 17039 17009 return deleted; 17040 17010 } 17041 bool detResidImfile AnalysisPrintObjects(FILE *stream, psArray *objects, bool mdcf)17011 bool detResidImfilePrintObjects(FILE *stream, psArray *objects, bool mdcf) 17042 17012 { 17043 17013 PS_ASSERT_PTR_NON_NULL(objects, false); … … 17045 17015 psMetadata *output = psMetadataAlloc(); 17046 17016 for (long i = 0; i < psArrayLength(objects); i++) { 17047 psMetadata *md = detResidImfile AnalysisMetadataFromObject(objects->data[i]);17017 psMetadata *md = detResidImfileMetadataFromObject(objects->data[i]); 17048 17018 if (!psMetadataAddMetadata( 17049 17019 output, 17050 17020 PS_LIST_TAIL, 17051 DETRESIDIMFILE ANALYSIS_TABLE_NAME,17021 DETRESIDIMFILE_TABLE_NAME, 17052 17022 PS_META_DUPLICATE_OK, 17053 17023 NULL, … … 17070 17040 return true; 17071 17041 } 17072 static void detResidExp AnalysisRowFree(detResidExpAnalysisRow *object);17073 17074 detResidExp AnalysisRow *detResidExpAnalysisRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)17075 { 17076 detResidExp AnalysisRow*object;17077 17078 object = psAlloc(sizeof(detResidExp AnalysisRow));17079 psMemSetDeallocator(object, (psFreeFunc)detResidExp AnalysisRowFree);17042 static void detResidExpRowFree(detResidExpRow *object); 17043 17044 detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept) 17045 { 17046 detResidExpRow *object; 17047 17048 object = psAlloc(sizeof(detResidExpRow)); 17049 psMemSetDeallocator(object, (psFreeFunc)detResidExpRowFree); 17080 17050 17081 17051 object->det_id = det_id; … … 17089 17059 } 17090 17060 17091 static void detResidExp AnalysisRowFree(detResidExpAnalysisRow *object)17061 static void detResidExpRowFree(detResidExpRow *object) 17092 17062 { 17093 17063 psFree(object->exp_id); … … 17095 17065 } 17096 17066 17097 bool detResidExp AnalysisCreateTable(psDB *dbh)17067 bool detResidExpCreateTable(psDB *dbh) 17098 17068 { 17099 17069 psMetadata *md; … … 17101 17071 17102 17072 md = psMetadataAlloc(); 17103 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDEXP ANALYSIS_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {17104 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDEXP ANALYSIS_INDEX_NAME);17073 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) { 17074 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDEXP_INDEX_NAME); 17105 17075 psFree(md); 17106 17076 return false; … … 17137 17107 } 17138 17108 17139 status = psDBCreateTable(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, md);17109 status = psDBCreateTable(dbh, DETRESIDEXP_TABLE_NAME, md); 17140 17110 17141 17111 psFree(md); … … 17144 17114 } 17145 17115 17146 bool detResidExp AnalysisDropTable(psDB *dbh)17147 { 17148 return psDBDropTable(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME);17149 } 17150 17151 bool detResidExp AnalysisInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)17116 bool detResidExpDropTable(psDB *dbh) 17117 { 17118 return psDBDropTable(dbh, DETRESIDEXP_TABLE_NAME); 17119 } 17120 17121 bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept) 17152 17122 { 17153 17123 psMetadata *md; … … 17186 17156 } 17187 17157 17188 status = psDBInsertOneRow(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, md);17158 status = psDBInsertOneRow(dbh, DETRESIDEXP_TABLE_NAME, md); 17189 17159 psFree(md); 17190 17160 … … 17192 17162 } 17193 17163 17194 long long detResidExp AnalysisDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)17164 long long detResidExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 17195 17165 { 17196 17166 long long deleted = 0; 17197 17167 17198 long long count = psDBDeleteRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, where, limit);17168 long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit); 17199 17169 if (count < 0) { 17200 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp Analysis");17170 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp"); 17201 17171 return count; 17202 17172 … … 17206 17176 return deleted; 17207 17177 } 17208 bool detResidExp AnalysisPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept)17178 bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept) 17209 17179 { 17210 17180 psArray *rowSet; … … 17215 17185 int rowID; 17216 17186 17217 rowSet = psDBSelectRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, NULL, 1);17187 rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, NULL, 1); 17218 17188 if (!rowSet) { 17219 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP ANALYSIS_INDEX_NAME);17189 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME); 17220 17190 psFree(rowSet); 17221 17191 return NULL; … … 17230 17200 psFree(rowSet); 17231 17201 17232 rowID = psMetadataLookupS32(&status, row, DETRESIDEXP ANALYSIS_INDEX_NAME);17233 if (!status) { 17234 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP ANALYSIS_INDEX_NAME);17202 rowID = psMetadataLookupS32(&status, row, DETRESIDEXP_INDEX_NAME); 17203 if (!status) { 17204 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME); 17235 17205 psFree(row); 17236 17206 return NULL; … … 17238 17208 17239 17209 popped = psMetadataAlloc(); 17240 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDEXP ANALYSIS_INDEX_NAME, 0, NULL, rowID);17241 17242 deleted = psDBDeleteRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, popped, 0);17210 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, 0, NULL, rowID); 17211 17212 deleted = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, popped, 0); 17243 17213 if (deleted != 1) { 17244 17214 psError(PS_ERR_UNKNOWN, false, "database failed to delete row"); … … 17292 17262 } 17293 17263 17294 bool detResidExp AnalysisInsertObject(psDB *dbh, detResidExpAnalysisRow *object)17295 { 17296 return detResidExp AnalysisInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->keep, object->accept);17297 } 17298 17299 bool detResidExp AnalysisInsertObjects(psDB *dbh, psArray *objects)17264 bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object) 17265 { 17266 return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->keep, object->accept); 17267 } 17268 17269 bool detResidExpInsertObjects(psDB *dbh, psArray *objects) 17300 17270 { 17301 17271 for (long i = 0; i < psArrayLength(objects); i++) { 17302 if (!detResidExp AnalysisInsertObject(dbh, objects->data[i])) {17272 if (!detResidExpInsertObject(dbh, objects->data[i])) { 17303 17273 return false; 17304 17274 } … … 17308 17278 } 17309 17279 17310 detResidExp AnalysisRow *detResidExpAnalysisPopObject(psDB *dbh)17280 detResidExpRow *detResidExpPopObject(psDB *dbh) 17311 17281 { 17312 17282 psS32 det_id; … … 17317 17287 bool accept; 17318 17288 17319 if (!detResidExp AnalysisPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) {17289 if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &keep, &accept)) { 17320 17290 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 17321 17291 return NULL; 17322 17292 } 17323 17293 17324 return detResidExp AnalysisRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);17325 } 17326 17327 bool detResidExp AnalysisInsertFits(psDB *dbh, const psFits *fits)17294 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept); 17295 } 17296 17297 bool detResidExpInsertFits(psDB *dbh, const psFits *fits) 17328 17298 { 17329 17299 psArray *rowSet; 17330 17300 17331 // move to (the first?) extension named DETRESIDEXP ANALYSIS_TABLE_NAME17332 if (!psFitsMoveExtName(fits, DETRESIDEXP ANALYSIS_TABLE_NAME)) {17333 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDEXP ANALYSIS_TABLE_NAME);17301 // move to (the first?) extension named DETRESIDEXP_TABLE_NAME 17302 if (!psFitsMoveExtName(fits, DETRESIDEXP_TABLE_NAME)) { 17303 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRESIDEXP_TABLE_NAME); 17334 17304 return false; 17335 17305 } … … 17349 17319 } 17350 17320 17351 if (!psDBInsertRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, rowSet)) {17321 if (!psDBInsertRows(dbh, DETRESIDEXP_TABLE_NAME, rowSet)) { 17352 17322 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 17353 17323 psFree(rowSet); … … 17360 17330 } 17361 17331 17362 bool detResidExp AnalysisPopFits(psDB *dbh, psFits *fits, unsigned long long limit)17332 bool detResidExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit) 17363 17333 { 17364 17334 char query[MAX_STRING_LENGTH]; 17365 17335 17366 if (!detResidExp AnalysisSelectRowsFits(dbh, fits, NULL, limit)) {17336 if (!detResidExpSelectRowsFits(dbh, fits, NULL, limit)) { 17367 17337 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 17368 17338 return false; … … 17372 17342 if (snprintf(query, MAX_STRING_LENGTH, 17373 17343 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld", 17374 DETRESIDEXP ANALYSIS_TABLE_NAME, DETRESIDEXPANALYSIS_INDEX_NAME, limit) < 0) {17344 DETRESIDEXP_TABLE_NAME, DETRESIDEXP_INDEX_NAME, limit) < 0) { 17375 17345 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH); 17376 17346 return false; … … 17385 17355 } 17386 17356 17387 bool detResidExp AnalysisSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)17357 bool detResidExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 17388 17358 { 17389 17359 psArray *rowSet; 17390 17360 psU64 i; 17391 17361 17392 rowSet = psDBSelectRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, where, limit);17362 rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit); 17393 17363 if (!rowSet) { 17394 17364 return false; … … 17397 17367 // strip index column 17398 17368 for (i = 0; i < rowSet->n; i++) { 17399 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDEXP ANALYSIS_INDEX_NAME)) {17400 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP ANALYSIS_INDEX_NAME);17369 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDEXP_INDEX_NAME)) { 17370 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME); 17401 17371 psFree(rowSet); 17402 17372 return false; … … 17405 17375 17406 17376 // output to fits 17407 if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDEXP ANALYSIS_TABLE_NAME)) {17377 if (!psFitsWriteTable(fits, NULL, rowSet, DETRESIDEXP_TABLE_NAME)) { 17408 17378 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 17409 17379 psFree(rowSet); … … 17416 17386 } 17417 17387 17418 psMetadata *detResidExp AnalysisMetadataFromObject(const detResidExpAnalysisRow *object)17388 psMetadata *detResidExpMetadataFromObject(const detResidExpRow *object) 17419 17389 { 17420 17390 psMetadata *md; … … 17455 17425 } 17456 17426 17457 detResidExp AnalysisRow *detResidExpAnalysisObjectFromMetadata(psMetadata *md)17427 detResidExpRow *detResidExpObjectFromMetadata(psMetadata *md) 17458 17428 { 17459 17429 bool status; … … 17496 17466 } 17497 17467 17498 return detResidExp AnalysisRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);17499 } 17500 psArray *detResidExp AnalysisSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)17468 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept); 17469 } 17470 psArray *detResidExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 17501 17471 { 17502 17472 psArray *rowSet; … … 17504 17474 psU64 i; 17505 17475 17506 rowSet = psDBSelectRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, where, limit);17476 rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit); 17507 17477 if (!rowSet) { 17508 17478 return NULL; … … 17511 17481 // strip index column 17512 17482 for (i = 0; i < rowSet->n; i++) { 17513 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDEXP ANALYSIS_INDEX_NAME)) {17514 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP ANALYSIS_INDEX_NAME);17483 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDEXP_INDEX_NAME)) { 17484 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME); 17515 17485 psFree(rowSet); 17516 17486 return false; … … 17524 17494 17525 17495 for (i = 0; i < rowSet->n; i++) { 17526 detResidExp AnalysisRow *object = detResidExpAnalysisObjectFromMetadata(rowSet->data[i]);17496 detResidExpRow *object = detResidExpObjectFromMetadata(rowSet->data[i]); 17527 17497 psArrayAdd(returnSet, 0, object); 17528 17498 psFree(object); … … 17533 17503 return returnSet; 17534 17504 } 17535 bool detResidExp AnalysisDeleteObject(psDB *dbh, const detResidExpAnalysisRow *object)17536 { 17537 psMetadata *where = detResidExp AnalysisMetadataFromObject(object);17538 long long count = psDBDeleteRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, where, 0);17505 bool detResidExpDeleteObject(psDB *dbh, const detResidExpRow *object) 17506 { 17507 psMetadata *where = detResidExpMetadataFromObject(object); 17508 long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, 0); 17539 17509 psFree(where) 17540 17510 if (count < 0) { 17541 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp Analysis");17511 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp"); 17542 17512 return false; 17543 17513 } … … 17545 17515 // XXX should this be a psAbort() instead? It is possible that 17546 17516 // having an object match multiple rows was by design. 17547 psError(PS_ERR_UNKNOWN, true, "detResidExp AnalysisRow object matched more then one row. Check your database schema");17548 return false; 17549 } 17550 17551 return true; 17552 } 17553 long long detResidExp AnalysisDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)17517 psError(PS_ERR_UNKNOWN, true, "detResidExpRow object matched more then one row. Check your database schema"); 17518 return false; 17519 } 17520 17521 return true; 17522 } 17523 long long detResidExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 17554 17524 { 17555 17525 long long deleted = 0; 17556 17526 17557 17527 for (long long i = 0; i < objects->n; i++) { 17558 detResidExp AnalysisRow *object = objects->data[i];17559 psMetadata *where = detResidExp AnalysisMetadataFromObject(object);17560 long long count = psDBDeleteRows(dbh, DETRESIDEXP ANALYSIS_TABLE_NAME, where, limit);17528 detResidExpRow *object = objects->data[i]; 17529 psMetadata *where = detResidExpMetadataFromObject(object); 17530 long long count = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit); 17561 17531 psFree(where) 17562 17532 if (count < 0) { 17563 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp Analysis");17533 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detResidExp"); 17564 17534 return count; 17565 17535 } … … 17570 17540 return deleted; 17571 17541 } 17572 bool detResidExp AnalysisPrintObjects(FILE *stream, psArray *objects, bool mdcf)17542 bool detResidExpPrintObjects(FILE *stream, psArray *objects, bool mdcf) 17573 17543 { 17574 17544 PS_ASSERT_PTR_NON_NULL(objects, false); … … 17576 17546 psMetadata *output = psMetadataAlloc(); 17577 17547 for (long i = 0; i < psArrayLength(objects); i++) { 17578 psMetadata *md = detResidExp AnalysisMetadataFromObject(objects->data[i]);17548 psMetadata *md = detResidExpMetadataFromObject(objects->data[i]); 17579 17549 if (!psMetadataAddMetadata( 17580 17550 output, 17581 17551 PS_LIST_TAIL, 17582 DETRESIDEXP ANALYSIS_TABLE_NAME,17552 DETRESIDEXP_TABLE_NAME, 17583 17553 PS_META_DUPLICATE_OK, 17584 17554 NULL,
Note:
See TracChangeset
for help on using the changeset viewer.
