Changeset 8528 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Aug 23, 2006, 1:55:03 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (60 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r8380 r8528 68 68 #define DETRESIDEXP_TABLE_NAME "detResidExp" 69 69 #define DETRESIDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 70 #define DETRUNSUMMARY_TABLE_NAME "detRunSummary" 71 #define DETRUNSUMMARY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME 70 72 #define MAX_STRING_LENGTH 1024 71 73 … … 12607 12609 return false; 12608 12610 } 12609 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, 0)) {12611 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Key", 0)) { 12610 12612 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); 12611 12613 psFree(md); … … 12992 12994 static void detInputExpRowFree(detInputExpRow *object); 12993 12995 12994 detInputExpRow *detInputExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, bool include , bool accept)12996 detInputExpRow *detInputExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, bool include) 12995 12997 { 12996 12998 detInputExpRow *object; … … 13003 13005 object->exp_id = psStringCopy(exp_id); 13004 13006 object->include = include; 13005 object->accept = accept;13006 13007 13007 13008 return object; … … 13044 13045 return false; 13045 13046 } 13046 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) {13047 psError(PS_ERR_UNKNOWN, false, "failed to add item accept");13048 psFree(md);13049 return false;13050 }13051 13047 13052 13048 status = psDBCreateTable(dbh, DETINPUTEXP_TABLE_NAME, md); … … 13062 13058 } 13063 13059 13064 bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, bool include , bool accept)13060 bool detInputExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, bool include) 13065 13061 { 13066 13062 psMetadata *md; … … 13085 13081 if (!psMetadataAdd(md, PS_LIST_TAIL, "include", PS_DATA_BOOL, NULL, include)) { 13086 13082 psError(PS_ERR_UNKNOWN, false, "failed to add item include"); 13087 psFree(md);13088 return false;13089 }13090 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, accept)) {13091 psError(PS_ERR_UNKNOWN, false, "failed to add item accept");13092 13083 psFree(md); 13093 13084 return false; … … 13114 13105 return deleted; 13115 13106 } 13116 bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, bool *include , bool *accept)13107 bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, bool *include) 13117 13108 { 13118 13109 psArray *rowSet; … … 13182 13173 return false; 13183 13174 } 13184 *accept = psMetadataLookupBool(&status, row, "accept");13185 if (!status) {13186 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");13187 psFree(row);13188 return false;13189 }13190 13175 13191 13176 psFree(row); … … 13196 13181 bool detInputExpInsertObject(psDB *dbh, detInputExpRow *object) 13197 13182 { 13198 return detInputExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->include , object->accept);13183 return detInputExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->include); 13199 13184 } 13200 13185 … … 13216 13201 char exp_id[256]; 13217 13202 bool include; 13218 bool accept; 13219 13220 if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_id, &include, &accept)) { 13203 13204 if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_id, &include)) { 13221 13205 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 13222 13206 return NULL; 13223 13207 } 13224 13208 13225 return detInputExpRowAlloc(det_id, iteration, exp_id, include , accept);13209 return detInputExpRowAlloc(det_id, iteration, exp_id, include); 13226 13210 } 13227 13211 … … 13342 13326 return NULL; 13343 13327 } 13344 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) {13345 psError(PS_ERR_UNKNOWN, false, "failed to add item accept");13346 psFree(md);13347 return NULL;13348 }13349 13328 13350 13329 return md; … … 13358 13337 char *exp_id; 13359 13338 bool include; 13360 bool accept;13361 13339 13362 13340 det_id = psMetadataLookupS32(&status, md, "det_id"); … … 13380 13358 return false; 13381 13359 } 13382 accept = psMetadataLookupBool(&status, md, "accept"); 13383 if (!status) { 13384 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept"); 13385 return false; 13386 } 13387 13388 return detInputExpRowAlloc(det_id, iteration, exp_id, include, accept); 13360 13361 return detInputExpRowAlloc(det_id, iteration, exp_id, include); 13389 13362 } 13390 13363 psArray *detInputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 14084 14057 static void detStackedImfileRowFree(detStackedImfileRow *object); 14085 14058 14086 detStackedImfileRow *detStackedImfileRowAlloc(psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe )14059 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) 14087 14060 { 14088 14061 detStackedImfileRow *object; … … 14096 14069 object->uri = psStringCopy(uri); 14097 14070 object->recipe = psStringCopy(recipe); 14071 object->bg = bg; 14072 object->bg_stdev = bg_stdev; 14073 object->bg_mean_stdev = bg_mean_stdev; 14098 14074 14099 14075 return object; … … 14143 14119 return false; 14144 14120 } 14121 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) { 14122 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14123 psFree(md); 14124 return false; 14125 } 14126 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) { 14127 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14128 psFree(md); 14129 return false; 14130 } 14131 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) { 14132 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14133 psFree(md); 14134 return false; 14135 } 14145 14136 14146 14137 status = psDBCreateTable(dbh, DETSTACKEDIMFILE_TABLE_NAME, md); … … 14156 14147 } 14157 14148 14158 bool detStackedImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *class_id, const char *uri, const char *recipe )14149 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) 14159 14150 { 14160 14151 psMetadata *md; … … 14184 14175 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) { 14185 14176 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); 14177 psFree(md); 14178 return false; 14179 } 14180 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) { 14181 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14182 psFree(md); 14183 return false; 14184 } 14185 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) { 14186 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14187 psFree(md); 14188 return false; 14189 } 14190 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 14191 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14186 14192 psFree(md); 14187 14193 return false; … … 14208 14214 return deleted; 14209 14215 } 14210 bool detStackedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, char **recipe )14216 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) 14211 14217 { 14212 14218 psArray *rowSet; … … 14282 14288 return false; 14283 14289 } 14290 *bg = psMetadataLookupF64(&status, row, "bg"); 14291 if (!status) { 14292 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 14293 psFree(row); 14294 return false; 14295 } 14296 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev"); 14297 if (!status) { 14298 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 14299 psFree(row); 14300 return false; 14301 } 14302 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev"); 14303 if (!status) { 14304 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 14305 psFree(row); 14306 return false; 14307 } 14284 14308 14285 14309 psFree(row); … … 14290 14314 bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object) 14291 14315 { 14292 return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe );14316 return detStackedImfileInsert(dbh, object->det_id, object->iteration, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev); 14293 14317 } 14294 14318 … … 14311 14335 char uri[256]; 14312 14336 char recipe[256]; 14313 14314 if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe)) { 14337 psF64 bg; 14338 psF64 bg_stdev; 14339 psF64 bg_mean_stdev; 14340 14341 if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) { 14315 14342 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 14316 14343 return NULL; 14317 14344 } 14318 14345 14319 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe );14346 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev); 14320 14347 } 14321 14348 … … 14441 14468 return NULL; 14442 14469 } 14470 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) { 14471 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 14472 psFree(md); 14473 return NULL; 14474 } 14475 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) { 14476 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 14477 psFree(md); 14478 return NULL; 14479 } 14480 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 14481 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 14482 psFree(md); 14483 return NULL; 14484 } 14443 14485 14444 14486 return md; … … 14453 14495 char *uri; 14454 14496 char *recipe; 14497 psF64 bg; 14498 psF64 bg_stdev; 14499 psF64 bg_mean_stdev; 14455 14500 14456 14501 det_id = psMetadataLookupS32(&status, md, "det_id"); … … 14479 14524 return false; 14480 14525 } 14481 14482 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe); 14526 bg = psMetadataLookupF64(&status, md, "bg"); 14527 if (!status) { 14528 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 14529 return false; 14530 } 14531 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev"); 14532 if (!status) { 14533 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 14534 return false; 14535 } 14536 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev"); 14537 if (!status) { 14538 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 14539 return false; 14540 } 14541 14542 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev); 14483 14543 } 14484 14544 psArray *detStackedImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 16449 16509 static void detResidImfileRowFree(detResidImfileRow *object); 16450 16510 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)16511 detResidImfileRow *detResidImfileRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri) 16452 16512 { 16453 16513 detResidImfileRow *object; … … 16460 16520 object->exp_id = psStringCopy(exp_id); 16461 16521 object->class_id = psStringCopy(class_id); 16522 object->uri = psStringCopy(uri); 16462 16523 object->recipe = psStringCopy(recipe); 16463 object->uri = psStringCopy(uri); 16524 object->bg = bg; 16525 object->bg_stdev = bg_stdev; 16526 object->bg_mean_stdev = bg_mean_stdev; 16464 16527 object->b1_uri = psStringCopy(b1_uri); 16465 16528 object->b2_uri = psStringCopy(b2_uri); … … 16472 16535 psFree(object->exp_id); 16473 16536 psFree(object->class_id); 16537 psFree(object->uri); 16474 16538 psFree(object->recipe); 16475 psFree(object->uri);16476 16539 psFree(object->b1_uri); 16477 16540 psFree(object->b2_uri); … … 16509 16572 return false; 16510 16573 } 16574 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "64")) { 16575 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16576 psFree(md); 16577 return false; 16578 } 16511 16579 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, "64")) { 16512 16580 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); … … 16514 16582 return false; 16515 16583 } 16516 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, "64")) { 16517 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16584 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) { 16585 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 16586 psFree(md); 16587 return false; 16588 } 16589 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) { 16590 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 16591 psFree(md); 16592 return false; 16593 } 16594 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) { 16595 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 16518 16596 psFree(md); 16519 16597 return false; … … 16542 16620 } 16543 16621 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)16622 bool detResidImfileInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *class_id, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri) 16545 16623 { 16546 16624 psMetadata *md; … … 16568 16646 return false; 16569 16647 } 16648 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) { 16649 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16650 psFree(md); 16651 return false; 16652 } 16570 16653 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, recipe)) { 16571 16654 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); … … 16573 16656 return false; 16574 16657 } 16575 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, uri)) { 16576 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16658 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) { 16659 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 16660 psFree(md); 16661 return false; 16662 } 16663 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) { 16664 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 16665 psFree(md); 16666 return false; 16667 } 16668 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 16669 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 16577 16670 psFree(md); 16578 16671 return false; … … 16609 16702 return deleted; 16610 16703 } 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)16704 bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri) 16612 16705 { 16613 16706 psArray *rowSet; … … 16677 16770 return false; 16678 16771 } 16772 *uri = psMetadataLookupPtr(&status, row, "uri"); 16773 if (!status) { 16774 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 16775 psFree(row); 16776 return false; 16777 } 16679 16778 *recipe = psMetadataLookupPtr(&status, row, "recipe"); 16680 16779 if (!status) { … … 16683 16782 return false; 16684 16783 } 16685 *uri = psMetadataLookupPtr(&status, row, "uri"); 16686 if (!status) { 16687 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 16784 *bg = psMetadataLookupF64(&status, row, "bg"); 16785 if (!status) { 16786 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 16787 psFree(row); 16788 return false; 16789 } 16790 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev"); 16791 if (!status) { 16792 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 16793 psFree(row); 16794 return false; 16795 } 16796 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev"); 16797 if (!status) { 16798 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 16688 16799 psFree(row); 16689 16800 return false; … … 16709 16820 bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object) 16710 16821 { 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);16822 return detResidImfileInsert(dbh, object->det_id, object->iteration, object->exp_id, object->class_id, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri); 16712 16823 } 16713 16824 … … 16729 16840 char exp_id[256]; 16730 16841 char class_id[256]; 16842 char uri[256]; 16731 16843 char recipe[256]; 16732 char uri[256]; 16844 psF64 bg; 16845 psF64 bg_stdev; 16846 psF64 bg_mean_stdev; 16733 16847 char b1_uri[256]; 16734 16848 char b2_uri[256]; 16735 16849 16736 if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)& recipe, (char **)&uri, (char **)&b1_uri, (char **)&b2_uri)) {16850 if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) { 16737 16851 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 16738 16852 return NULL; 16739 16853 } 16740 16854 16741 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);16855 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri); 16742 16856 } 16743 16857 … … 16858 16972 return NULL; 16859 16973 } 16974 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) { 16975 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16976 psFree(md); 16977 return NULL; 16978 } 16860 16979 if (!psMetadataAddStr(md, PS_LIST_TAIL, "recipe", 0, NULL, object->recipe)) { 16861 16980 psError(PS_ERR_UNKNOWN, false, "failed to add item recipe"); … … 16863 16982 return NULL; 16864 16983 } 16865 if (!psMetadataAddStr(md, PS_LIST_TAIL, "uri", 0, NULL, object->uri)) { 16866 psError(PS_ERR_UNKNOWN, false, "failed to add item uri"); 16984 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) { 16985 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 16986 psFree(md); 16987 return NULL; 16988 } 16989 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) { 16990 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 16991 psFree(md); 16992 return NULL; 16993 } 16994 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 16995 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 16867 16996 psFree(md); 16868 16997 return NULL; … … 16889 17018 char *exp_id; 16890 17019 char *class_id; 17020 char *uri; 16891 17021 char *recipe; 16892 char *uri; 17022 psF64 bg; 17023 psF64 bg_stdev; 17024 psF64 bg_mean_stdev; 16893 17025 char *b1_uri; 16894 17026 char *b2_uri; … … 16914 17046 return false; 16915 17047 } 17048 uri = psMetadataLookupPtr(&status, md, "uri"); 17049 if (!status) { 17050 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 17051 return false; 17052 } 16916 17053 recipe = psMetadataLookupPtr(&status, md, "recipe"); 16917 17054 if (!status) { … … 16919 17056 return false; 16920 17057 } 16921 uri = psMetadataLookupPtr(&status, md, "uri"); 16922 if (!status) { 16923 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri"); 17058 bg = psMetadataLookupF64(&status, md, "bg"); 17059 if (!status) { 17060 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 17061 return false; 17062 } 17063 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev"); 17064 if (!status) { 17065 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 17066 return false; 17067 } 17068 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev"); 17069 if (!status) { 17070 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 16924 17071 return false; 16925 17072 } … … 16935 17082 } 16936 17083 16937 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, recipe, uri, b1_uri, b2_uri);17084 return detResidImfileRowAlloc(det_id, iteration, exp_id, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri); 16938 17085 } 16939 17086 psArray *detResidImfileSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 17042 17189 static void detResidExpRowFree(detResidExpRow *object); 17043 17190 17044 detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)17191 detResidExpRow *detResidExpRowAlloc(psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept) 17045 17192 { 17046 17193 detResidExpRow *object; … … 17053 17200 object->exp_id = psStringCopy(exp_id); 17054 17201 object->recipe = psStringCopy(recipe); 17055 object->keep = keep; 17202 object->bg = bg; 17203 object->bg_stdev = bg_stdev; 17204 object->bg_mean_stdev = bg_mean_stdev; 17205 object->b1_uri = psStringCopy(b1_uri); 17206 object->b2_uri = psStringCopy(b2_uri); 17056 17207 object->accept = accept; 17057 17208 … … 17063 17214 psFree(object->exp_id); 17064 17215 psFree(object->recipe); 17216 psFree(object->b1_uri); 17217 psFree(object->b2_uri); 17065 17218 } 17066 17219 … … 17096 17249 return false; 17097 17250 } 17098 if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, false)) { 17099 psError(PS_ERR_UNKNOWN, false, "failed to add item keep"); 17251 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) { 17252 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 17253 psFree(md); 17254 return false; 17255 } 17256 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) { 17257 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 17258 psFree(md); 17259 return false; 17260 } 17261 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) { 17262 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 17263 psFree(md); 17264 return false; 17265 } 17266 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, "64")) { 17267 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 17268 psFree(md); 17269 return false; 17270 } 17271 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, "64")) { 17272 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 17100 17273 psFree(md); 17101 17274 return false; … … 17119 17292 } 17120 17293 17121 bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, bool keep, bool accept)17294 bool detResidExpInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *exp_id, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, const char *b1_uri, const char *b2_uri, bool accept) 17122 17295 { 17123 17296 psMetadata *md; … … 17145 17318 return false; 17146 17319 } 17147 if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, keep)) { 17148 psError(PS_ERR_UNKNOWN, false, "failed to add item keep"); 17320 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) { 17321 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 17322 psFree(md); 17323 return false; 17324 } 17325 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) { 17326 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 17327 psFree(md); 17328 return false; 17329 } 17330 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 17331 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 17332 psFree(md); 17333 return false; 17334 } 17335 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, b1_uri)) { 17336 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 17337 psFree(md); 17338 return false; 17339 } 17340 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, b2_uri)) { 17341 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 17149 17342 psFree(md); 17150 17343 return false; … … 17176 17369 return deleted; 17177 17370 } 17178 bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, bool *keep, bool *accept)17371 bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_id, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, bool *accept) 17179 17372 { 17180 17373 psArray *rowSet; … … 17244 17437 return false; 17245 17438 } 17246 *keep = psMetadataLookupBool(&status, row, "keep"); 17247 if (!status) { 17248 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item keep"); 17439 *bg = psMetadataLookupF64(&status, row, "bg"); 17440 if (!status) { 17441 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 17442 psFree(row); 17443 return false; 17444 } 17445 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev"); 17446 if (!status) { 17447 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 17448 psFree(row); 17449 return false; 17450 } 17451 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev"); 17452 if (!status) { 17453 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 17454 psFree(row); 17455 return false; 17456 } 17457 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri"); 17458 if (!status) { 17459 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri"); 17460 psFree(row); 17461 return false; 17462 } 17463 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri"); 17464 if (!status) { 17465 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri"); 17249 17466 psFree(row); 17250 17467 return false; … … 17264 17481 bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object) 17265 17482 { 17266 return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object-> keep, object->accept);17483 return detResidExpInsert(dbh, object->det_id, object->iteration, object->exp_id, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->b1_uri, object->b2_uri, object->accept); 17267 17484 } 17268 17485 … … 17284 17501 char exp_id[256]; 17285 17502 char recipe[256]; 17286 bool keep; 17503 psF64 bg; 17504 psF64 bg_stdev; 17505 psF64 bg_mean_stdev; 17506 char b1_uri[256]; 17507 char b2_uri[256]; 17287 17508 bool accept; 17288 17509 17289 if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, & keep, &accept)) {17510 if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_id, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &accept)) { 17290 17511 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 17291 17512 return NULL; 17292 17513 } 17293 17514 17294 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);17515 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept); 17295 17516 } 17296 17517 … … 17411 17632 return NULL; 17412 17633 } 17413 if (!psMetadataAdd(md, PS_LIST_TAIL, "keep", PS_DATA_BOOL, NULL, object->keep)) { 17414 psError(PS_ERR_UNKNOWN, false, "failed to add item keep"); 17634 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) { 17635 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 17636 psFree(md); 17637 return NULL; 17638 } 17639 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) { 17640 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 17641 psFree(md); 17642 return NULL; 17643 } 17644 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 17645 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 17646 psFree(md); 17647 return NULL; 17648 } 17649 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b1_uri", 0, NULL, object->b1_uri)) { 17650 psError(PS_ERR_UNKNOWN, false, "failed to add item b1_uri"); 17651 psFree(md); 17652 return NULL; 17653 } 17654 if (!psMetadataAddStr(md, PS_LIST_TAIL, "b2_uri", 0, NULL, object->b2_uri)) { 17655 psError(PS_ERR_UNKNOWN, false, "failed to add item b2_uri"); 17415 17656 psFree(md); 17416 17657 return NULL; … … 17432 17673 char *exp_id; 17433 17674 char *recipe; 17434 bool keep; 17675 psF64 bg; 17676 psF64 bg_stdev; 17677 psF64 bg_mean_stdev; 17678 char *b1_uri; 17679 char *b2_uri; 17435 17680 bool accept; 17436 17681 … … 17455 17700 return false; 17456 17701 } 17457 keep = psMetadataLookupBool(&status, md, "keep"); 17458 if (!status) { 17459 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item keep"); 17702 bg = psMetadataLookupF64(&status, md, "bg"); 17703 if (!status) { 17704 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 17705 return false; 17706 } 17707 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev"); 17708 if (!status) { 17709 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 17710 return false; 17711 } 17712 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev"); 17713 if (!status) { 17714 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 17715 return false; 17716 } 17717 b1_uri = psMetadataLookupPtr(&status, md, "b1_uri"); 17718 if (!status) { 17719 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri"); 17720 return false; 17721 } 17722 b2_uri = psMetadataLookupPtr(&status, md, "b2_uri"); 17723 if (!status) { 17724 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri"); 17460 17725 return false; 17461 17726 } … … 17466 17731 } 17467 17732 17468 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, keep, accept);17733 return detResidExpRowAlloc(det_id, iteration, exp_id, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept); 17469 17734 } 17470 17735 psArray *detResidExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 17571 17836 return true; 17572 17837 } 17838 static void detRunSummaryRowFree(detRunSummaryRow *object); 17839 17840 detRunSummaryRow *detRunSummaryRowAlloc(psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept) 17841 { 17842 detRunSummaryRow *object; 17843 17844 object = psAlloc(sizeof(detRunSummaryRow)); 17845 psMemSetDeallocator(object, (psFreeFunc)detRunSummaryRowFree); 17846 17847 object->det_id = det_id; 17848 object->iteration = iteration; 17849 object->bg = bg; 17850 object->bg_stdev = bg_stdev; 17851 object->bg_mean_stdev = bg_mean_stdev; 17852 object->accept = accept; 17853 17854 return object; 17855 } 17856 17857 static void detRunSummaryRowFree(detRunSummaryRow *object) 17858 { 17859 } 17860 17861 bool detRunSummaryCreateTable(psDB *dbh) 17862 { 17863 psMetadata *md; 17864 bool status; 17865 17866 md = psMetadataAlloc(); 17867 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) { 17868 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUNSUMMARY_INDEX_NAME); 17869 psFree(md); 17870 return false; 17871 } 17872 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 17873 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 17874 psFree(md); 17875 return false; 17876 } 17877 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, "Primary Key", 0)) { 17878 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); 17879 psFree(md); 17880 return false; 17881 } 17882 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, 0.0)) { 17883 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 17884 psFree(md); 17885 return false; 17886 } 17887 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, 0.0)) { 17888 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 17889 psFree(md); 17890 return false; 17891 } 17892 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, 0.0)) { 17893 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 17894 psFree(md); 17895 return false; 17896 } 17897 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, false)) { 17898 psError(PS_ERR_UNKNOWN, false, "failed to add item accept"); 17899 psFree(md); 17900 return false; 17901 } 17902 17903 status = psDBCreateTable(dbh, DETRUNSUMMARY_TABLE_NAME, md); 17904 17905 psFree(md); 17906 17907 return status; 17908 } 17909 17910 bool detRunSummaryDropTable(psDB *dbh) 17911 { 17912 return psDBDropTable(dbh, DETRUNSUMMARY_TABLE_NAME); 17913 } 17914 17915 bool detRunSummaryInsert(psDB * dbh, psS32 det_id, psS32 iteration, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, bool accept) 17916 { 17917 psMetadata *md; 17918 bool status; 17919 17920 md = psMetadataAlloc(); 17921 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) { 17922 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 17923 psFree(md); 17924 return false; 17925 } 17926 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) { 17927 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); 17928 psFree(md); 17929 return false; 17930 } 17931 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, bg)) { 17932 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 17933 psFree(md); 17934 return false; 17935 } 17936 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, bg_stdev)) { 17937 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 17938 psFree(md); 17939 return false; 17940 } 17941 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, bg_mean_stdev)) { 17942 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 17943 psFree(md); 17944 return false; 17945 } 17946 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, accept)) { 17947 psError(PS_ERR_UNKNOWN, false, "failed to add item accept"); 17948 psFree(md); 17949 return false; 17950 } 17951 17952 status = psDBInsertOneRow(dbh, DETRUNSUMMARY_TABLE_NAME, md); 17953 psFree(md); 17954 17955 return status; 17956 } 17957 17958 long long detRunSummaryDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 17959 { 17960 long long deleted = 0; 17961 17962 long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit); 17963 if (count < 0) { 17964 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary"); 17965 return count; 17966 17967 deleted += count; 17968 } 17969 17970 return deleted; 17971 } 17972 bool detRunSummaryPop(psDB *dbh, psS32 *det_id, psS32 *iteration, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, bool *accept) 17973 { 17974 psArray *rowSet; 17975 psMetadata *row; 17976 psMetadata *popped; 17977 long deleted; 17978 bool status; 17979 int rowID; 17980 17981 rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, NULL, 1); 17982 if (!rowSet) { 17983 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME); 17984 psFree(rowSet); 17985 return NULL; 17986 } 17987 17988 row = psArrayGet(rowSet, 0); 17989 psMemIncrRefCounter(row); 17990 if (!row) { 17991 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 17992 return NULL; 17993 } 17994 psFree(rowSet); 17995 17996 rowID = psMetadataLookupS32(&status, row, DETRUNSUMMARY_INDEX_NAME); 17997 if (!status) { 17998 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME); 17999 psFree(row); 18000 return NULL; 18001 } 18002 18003 popped = psMetadataAlloc(); 18004 psMetadataAddS32(popped, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, 0, NULL, rowID); 18005 18006 deleted = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, popped, 0); 18007 if (deleted != 1) { 18008 psError(PS_ERR_UNKNOWN, false, "database failed to delete row"); 18009 psFree(popped); 18010 psFree(row); 18011 return NULL; 18012 } 18013 18014 psFree(popped); 18015 18016 *det_id = psMetadataLookupS32(&status, row, "det_id"); 18017 if (!status) { 18018 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id"); 18019 psFree(row); 18020 return false; 18021 } 18022 *iteration = psMetadataLookupS32(&status, row, "iteration"); 18023 if (!status) { 18024 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration"); 18025 psFree(row); 18026 return false; 18027 } 18028 *bg = psMetadataLookupF64(&status, row, "bg"); 18029 if (!status) { 18030 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 18031 psFree(row); 18032 return false; 18033 } 18034 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev"); 18035 if (!status) { 18036 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 18037 psFree(row); 18038 return false; 18039 } 18040 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev"); 18041 if (!status) { 18042 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 18043 psFree(row); 18044 return false; 18045 } 18046 *accept = psMetadataLookupBool(&status, row, "accept"); 18047 if (!status) { 18048 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept"); 18049 psFree(row); 18050 return false; 18051 } 18052 18053 psFree(row); 18054 18055 return true; 18056 } 18057 18058 bool detRunSummaryInsertObject(psDB *dbh, detRunSummaryRow *object) 18059 { 18060 return detRunSummaryInsert(dbh, object->det_id, object->iteration, object->bg, object->bg_stdev, object->bg_mean_stdev, object->accept); 18061 } 18062 18063 bool detRunSummaryInsertObjects(psDB *dbh, psArray *objects) 18064 { 18065 for (long i = 0; i < psArrayLength(objects); i++) { 18066 if (!detRunSummaryInsertObject(dbh, objects->data[i])) { 18067 return false; 18068 } 18069 } 18070 18071 return true; 18072 } 18073 18074 detRunSummaryRow *detRunSummaryPopObject(psDB *dbh) 18075 { 18076 psS32 det_id; 18077 psS32 iteration; 18078 psF64 bg; 18079 psF64 bg_stdev; 18080 psF64 bg_mean_stdev; 18081 bool accept; 18082 18083 if (!detRunSummaryPop(dbh, &det_id, &iteration, &bg, &bg_stdev, &bg_mean_stdev, &accept)) { 18084 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row"); 18085 return NULL; 18086 } 18087 18088 return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept); 18089 } 18090 18091 bool detRunSummaryInsertFits(psDB *dbh, const psFits *fits) 18092 { 18093 psArray *rowSet; 18094 18095 // move to (the first?) extension named DETRUNSUMMARY_TABLE_NAME 18096 if (!psFitsMoveExtName(fits, DETRUNSUMMARY_TABLE_NAME)) { 18097 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", DETRUNSUMMARY_TABLE_NAME); 18098 return false; 18099 } 18100 18101 // check HDU type 18102 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 18103 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 18104 return false; 18105 } 18106 18107 // read fits table 18108 rowSet = psFitsReadTable(fits); 18109 if (!rowSet) { 18110 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 18111 psFree(rowSet); 18112 return false; 18113 } 18114 18115 if (!psDBInsertRows(dbh, DETRUNSUMMARY_TABLE_NAME, rowSet)) { 18116 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 18117 psFree(rowSet); 18118 return false; 18119 } 18120 18121 psFree(rowSet); 18122 18123 return true; 18124 } 18125 18126 bool detRunSummaryPopFits(psDB *dbh, psFits *fits, unsigned long long limit) 18127 { 18128 char query[MAX_STRING_LENGTH]; 18129 18130 if (!detRunSummarySelectRowsFits(dbh, fits, NULL, limit)) { 18131 psError(PS_ERR_UNKNOWN, true, "database error or table is empty"); 18132 return false; 18133 } 18134 18135 // remove limit rows from the end of the database 18136 if (snprintf(query, MAX_STRING_LENGTH, 18137 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld", 18138 DETRUNSUMMARY_TABLE_NAME, DETRUNSUMMARY_INDEX_NAME, limit) < 0) { 18139 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %s bytes", MAX_STRING_LENGTH); 18140 return false; 18141 } 18142 18143 if (!p_psDBRunQuery(dbh, query)) { 18144 psError(PS_ERR_UNKNOWN, false, "database query failed"); 18145 return false; 18146 } 18147 18148 return true; 18149 } 18150 18151 bool detRunSummarySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 18152 { 18153 psArray *rowSet; 18154 psU64 i; 18155 18156 rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit); 18157 if (!rowSet) { 18158 return false; 18159 } 18160 18161 // strip index column 18162 for (i = 0; i < rowSet->n; i++) { 18163 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUNSUMMARY_INDEX_NAME)) { 18164 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME); 18165 psFree(rowSet); 18166 return false; 18167 } 18168 } 18169 18170 // output to fits 18171 if (!psFitsWriteTable(fits, NULL, rowSet, DETRUNSUMMARY_TABLE_NAME)) { 18172 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 18173 psFree(rowSet); 18174 return false; 18175 } 18176 18177 psFree(rowSet); 18178 18179 return true; 18180 } 18181 18182 psMetadata *detRunSummaryMetadataFromObject(const detRunSummaryRow *object) 18183 { 18184 psMetadata *md; 18185 18186 md = psMetadataAlloc(); 18187 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) { 18188 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 18189 psFree(md); 18190 return NULL; 18191 } 18192 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) { 18193 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); 18194 psFree(md); 18195 return NULL; 18196 } 18197 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg", 0, NULL, object->bg)) { 18198 psError(PS_ERR_UNKNOWN, false, "failed to add item bg"); 18199 psFree(md); 18200 return NULL; 18201 } 18202 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_stdev", 0, NULL, object->bg_stdev)) { 18203 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_stdev"); 18204 psFree(md); 18205 return NULL; 18206 } 18207 if (!psMetadataAddF64(md, PS_LIST_TAIL, "bg_mean_stdev", 0, NULL, object->bg_mean_stdev)) { 18208 psError(PS_ERR_UNKNOWN, false, "failed to add item bg_mean_stdev"); 18209 psFree(md); 18210 return NULL; 18211 } 18212 if (!psMetadataAdd(md, PS_LIST_TAIL, "accept", PS_DATA_BOOL, NULL, object->accept)) { 18213 psError(PS_ERR_UNKNOWN, false, "failed to add item accept"); 18214 psFree(md); 18215 return NULL; 18216 } 18217 18218 return md; 18219 } 18220 18221 detRunSummaryRow *detRunSummaryObjectFromMetadata(psMetadata *md) 18222 { 18223 bool status; 18224 psS32 det_id; 18225 psS32 iteration; 18226 psF64 bg; 18227 psF64 bg_stdev; 18228 psF64 bg_mean_stdev; 18229 bool accept; 18230 18231 det_id = psMetadataLookupS32(&status, md, "det_id"); 18232 if (!status) { 18233 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id"); 18234 return false; 18235 } 18236 iteration = psMetadataLookupS32(&status, md, "iteration"); 18237 if (!status) { 18238 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration"); 18239 return false; 18240 } 18241 bg = psMetadataLookupF64(&status, md, "bg"); 18242 if (!status) { 18243 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg"); 18244 return false; 18245 } 18246 bg_stdev = psMetadataLookupF64(&status, md, "bg_stdev"); 18247 if (!status) { 18248 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev"); 18249 return false; 18250 } 18251 bg_mean_stdev = psMetadataLookupF64(&status, md, "bg_mean_stdev"); 18252 if (!status) { 18253 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev"); 18254 return false; 18255 } 18256 accept = psMetadataLookupBool(&status, md, "accept"); 18257 if (!status) { 18258 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept"); 18259 return false; 18260 } 18261 18262 return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept); 18263 } 18264 psArray *detRunSummarySelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 18265 { 18266 psArray *rowSet; 18267 psArray *returnSet; 18268 psU64 i; 18269 18270 rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit); 18271 if (!rowSet) { 18272 return NULL; 18273 } 18274 18275 // strip index column 18276 for (i = 0; i < rowSet->n; i++) { 18277 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUNSUMMARY_INDEX_NAME)) { 18278 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME); 18279 psFree(rowSet); 18280 return false; 18281 } 18282 } 18283 18284 // convert psMetadata rows to row objects 18285 18286 returnSet = psArrayAlloc(rowSet->n); 18287 returnSet->n = 0; 18288 18289 for (i = 0; i < rowSet->n; i++) { 18290 detRunSummaryRow *object = detRunSummaryObjectFromMetadata(rowSet->data[i]); 18291 psArrayAdd(returnSet, 0, object); 18292 psFree(object); 18293 } 18294 18295 psFree(rowSet); 18296 18297 return returnSet; 18298 } 18299 bool detRunSummaryDeleteObject(psDB *dbh, const detRunSummaryRow *object) 18300 { 18301 psMetadata *where = detRunSummaryMetadataFromObject(object); 18302 long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, 0); 18303 psFree(where) 18304 if (count < 0) { 18305 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary"); 18306 return false; 18307 } 18308 if (count > 1) { 18309 // XXX should this be a psAbort() instead? It is possible that 18310 // having an object match multiple rows was by design. 18311 psError(PS_ERR_UNKNOWN, true, "detRunSummaryRow object matched more then one row. Check your database schema"); 18312 return false; 18313 } 18314 18315 return true; 18316 } 18317 long long detRunSummaryDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 18318 { 18319 long long deleted = 0; 18320 18321 for (long long i = 0; i < objects->n; i++) { 18322 detRunSummaryRow *object = objects->data[i]; 18323 psMetadata *where = detRunSummaryMetadataFromObject(object); 18324 long long count = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit); 18325 psFree(where) 18326 if (count < 0) { 18327 psError(PS_ERR_UNKNOWN, true, "failed to delete row from detRunSummary"); 18328 return count; 18329 } 18330 18331 deleted += count; 18332 } 18333 18334 return deleted; 18335 } 18336 bool detRunSummaryPrintObjects(FILE *stream, psArray *objects, bool mdcf) 18337 { 18338 PS_ASSERT_PTR_NON_NULL(objects, false); 18339 18340 psMetadata *output = psMetadataAlloc(); 18341 for (long i = 0; i < psArrayLength(objects); i++) { 18342 psMetadata *md = detRunSummaryMetadataFromObject(objects->data[i]); 18343 if (!psMetadataAddMetadata( 18344 output, 18345 PS_LIST_TAIL, 18346 DETRUNSUMMARY_TABLE_NAME, 18347 PS_META_DUPLICATE_OK, 18348 NULL, 18349 md 18350 )) { 18351 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 18352 psFree(md); 18353 psFree(output); 18354 return false; 18355 } 18356 psFree(md); 18357 } 18358 18359 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 18360 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 18361 psFree(output); 18362 } 18363 psFree(output); 18364 18365 return true; 18366 }
Note:
See TracChangeset
for help on using the changeset viewer.
