Changeset 9423
- Timestamp:
- Oct 9, 2006, 1:43:03 PM (20 years ago)
- Location:
- trunk/ippdb
- Files:
-
- 3 deleted
- 10 edited
-
configure.ac (modified) (2 diffs)
-
src/ippdb.c (modified) (191 diffs)
-
src/ippdb.h (modified) (113 diffs)
-
tests/Makefile.am (modified) (1 diff)
-
tests/alloc.c (modified) (1 diff)
-
tests/insert.c (modified) (1 diff)
-
tests/insertobject.c (modified) (1 diff)
-
tests/metadatafromobject.c (modified) (2 diffs)
-
tests/objectfrommetadata.c (modified) (2 diffs)
-
tests/pop.c (deleted)
-
tests/popfits.c (deleted)
-
tests/popobject.c (deleted)
-
tests/testsuite.at (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/configure.ac
r9307 r9423 1 1 dnl 2 dnl This file was generated by glueforge 0.2 52 dnl This file was generated by glueforge 0.29 3 3 dnl 4 4 dnl Do NOT directly edit this file. … … 7 7 AC_PREREQ(2.59) 8 8 9 AC_INIT([ippdb], [0.0.4 8], [pan-starrs.ifa.hawaii.edu])9 AC_INIT([ippdb], [0.0.49], [pan-starrs.ifa.hawaii.edu]) 10 10 AC_CONFIG_SRCDIR([ippdb.pc.in]) 11 11 -
trunk/ippdb/src/ippdb.c
r9307 r9423 1 /* 2 * code.c 3 * 4 * Copyright (C) 2006 Joshua Hoblitt 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the Free 8 * Software Foundation; version 2 of the License. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 * You should have received a copy of the GNU General Public License along with 16 * program; see the file COPYING. If not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 1 20 /* 2 21 * 3 * This file was generated by glueforge 0.2 522 * This file was generated by glueforge 0.29 4 23 * 5 24 * Do NOT directly edit this file. … … 12 31 #include "ippdb.h" 13 32 14 #define IPPDB_DEFAULT_INDEX_NAME "position"15 33 #define WEATHER_TABLE_NAME "weather" 16 #define WEATHER_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME17 34 #define SKYP_TRANSPARENCY_TABLE_NAME "skyp_transparency" 18 #define SKYP_TRANSPARENCY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME19 35 #define SKYP_ABSORPTION_TABLE_NAME "skyp_absorption" 20 #define SKYP_ABSORPTION_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME21 36 #define SKYP_EMISSION_TABLE_NAME "skyp_emission" 22 #define SKYP_EMISSION_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME23 37 #define DIMM_TABLE_NAME "dimm" 24 #define DIMM_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME25 38 #define SKYP_IR_TABLE_NAME "skyp_ir" 26 #define SKYP_IR_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME27 39 #define DOME_TABLE_NAME "dome" 28 #define DOME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME29 40 #define TELESCOPE_TABLE_NAME "telescope" 30 #define TELESCOPE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME31 41 #define SUMMITEXP_TABLE_NAME "summitExp" 32 #define SUMMITEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME33 42 #define PZPENDINGEXP_TABLE_NAME "pzPendingExp" 34 #define PZPENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME35 43 #define PZPENDINGIMFILE_TABLE_NAME "pzPendingImfile" 36 #define PZPENDINGIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME37 44 #define NEWEXP_TABLE_NAME "newExp" 38 #define NEWEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME39 45 #define NEWIMFILE_TABLE_NAME "newImfile" 40 #define NEWIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME41 46 #define RAWDETRENDEXP_TABLE_NAME "rawDetrendExp" 42 #define RAWDETRENDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME43 47 #define RAWSCIENCEEXP_TABLE_NAME "rawScienceExp" 44 #define RAWSCIENCEEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME45 48 #define RAWIMFILE_TABLE_NAME "rawImfile" 46 #define RAWIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME47 49 #define P1PENDINGEXP_TABLE_NAME "p1PendingExp" 48 #define P1PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME49 50 #define P2PENDINGEXP_TABLE_NAME "p2PendingExp" 50 #define P2PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME51 51 #define P2PENDINGIMFILE_TABLE_NAME "p2PendingImfile" 52 #define P2PENDINGIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME53 52 #define P2PROCESSEDEXP_TABLE_NAME "p2ProcessedExp" 54 #define P2PROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME55 53 #define P2PROCESSEDIMFILE_TABLE_NAME "p2ProcessedImfile" 56 #define P2PROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME57 54 #define P3PENDINGEXP_TABLE_NAME "p3PendingExp" 58 #define P3PENDINGEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME59 55 #define P3PROCESSEDEXP_TABLE_NAME "p3ProcessedExp" 60 #define P3PROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME61 56 #define DETRUN_TABLE_NAME "detRun" 62 #define DETRUN_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME63 57 #define DETINPUTEXP_TABLE_NAME "detInputExp" 64 #define DETINPUTEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME65 58 #define DETPROCESSEDIMFILE_TABLE_NAME "detProcessedImfile" 66 #define DETPROCESSEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME67 59 #define DETPROCESSEDEXP_TABLE_NAME "detProcessedExp" 68 #define DETPROCESSEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME69 60 #define DETSTACKEDIMFILE_TABLE_NAME "detStackedImfile" 70 #define DETSTACKEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME71 61 #define DETNORMALIZEDSTATIMFILE_TABLE_NAME "detNormalizedStatImfile" 72 #define DETNORMALIZEDSTATIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME73 62 #define DETNORMALIZEDIMFILE_TABLE_NAME "detNormalizedImfile" 74 #define DETNORMALIZEDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME75 63 #define DETNORMALIZEDEXP_TABLE_NAME "detNormalizedExp" 76 #define DETNORMALIZEDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME77 64 #define DETMASTERFRAME_TABLE_NAME "detMasterFrame" 78 #define DETMASTERFRAME_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME79 65 #define DETMASTERIMFILE_TABLE_NAME "detMasterImfile" 80 #define DETMASTERIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME81 66 #define DETRESIDIMFILE_TABLE_NAME "detResidImfile" 82 #define DETRESIDIMFILE_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME83 67 #define DETRESIDEXP_TABLE_NAME "detResidExp" 84 #define DETRESIDEXP_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME85 68 #define DETRUNSUMMARY_TABLE_NAME "detRunSummary" 86 #define DETRUNSUMMARY_INDEX_NAME IPPDB_DEFAULT_INDEX_NAME87 69 #define MAX_STRING_LENGTH 1024 88 70 89 psDB *ippdbInit(const char *host, const char *user, const char *passwd, const char *dbname )90 { 91 return psDBInit(host, user, passwd, dbname );71 psDB *ippdbInit(const char *host, const char *user, const char *passwd, const char *dbname, unsigned int port) 72 { 73 return psDBInit(host, user, passwd, dbname, port); 92 74 } 93 75 … … 103 85 psMetadata *clean = psMetadataCopy(NULL, md); 104 86 105 // don't bother to check the return status as the key we are trying to106 // remove may or may not be there107 // XXX someday psErr should be checked -- the only acceptable error is key108 // not found109 psMetadataRemoveKey(clean, IPPDB_DEFAULT_INDEX_NAME);110 111 87 if (!ippdbPrintMetadataRaw(stream, clean, mdcf)) { 112 88 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); … … 205 181 for (long i = 0; i < psArrayLength(mds); i++) { 206 182 psMetadata *md = psMetadataCopy(NULL, mds->data[i]); 207 // don't bother to check the return status as the key we are trying to208 // remove may or may not be there209 // XXX someday psErr should be checked -- the only acceptable error210 // is key not found211 212 psMetadataRemoveKey(md, IPPDB_DEFAULT_INDEX_NAME);213 183 if (!psMetadataAddMetadata(output, PS_LIST_TAIL, mdname, PS_META_DUPLICATE_OK, NULL, md)) { 214 184 psError(PS_ERR_UNKNOWN, false, "failed to add a metadata item"); … … 288 258 289 259 md = psMetadataAlloc(); 290 if (!psMetadataAdd(md, PS_LIST_TAIL, WEATHER_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {291 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", WEATHER_INDEX_NAME);292 psFree(md);293 return false;294 }295 260 if (!psMetadataAddF32(md, PS_LIST_TAIL, "temp01", 0, NULL, 0.0)) { 296 261 psError(PS_ERR_UNKNOWN, false, "failed to add item temp01"); … … 403 368 return deleted; 404 369 } 405 bool weatherPop(psDB *dbh, psF32 *temp01, psF32 *humi01, psF32 *temp02, psF32 *humi02, psF32 *temp03, psF32 *humi03, psF32 *pressure)406 {407 psArray *rowSet;408 psMetadata *row;409 psMetadata *popped;410 long deleted;411 bool status;412 int rowID;413 414 rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, NULL, 1);415 if (!rowSet) {416 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", WEATHER_INDEX_NAME);417 psFree(rowSet);418 return NULL;419 }420 421 row = psArrayGet(rowSet, 0);422 psMemIncrRefCounter(row);423 if (!row) {424 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");425 return NULL;426 }427 psFree(rowSet);428 429 rowID = psMetadataLookupS32(&status, row, WEATHER_INDEX_NAME);430 if (!status) {431 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", WEATHER_INDEX_NAME);432 psFree(row);433 return NULL;434 }435 436 popped = psMetadataAlloc();437 psMetadataAddS32(popped, PS_LIST_TAIL, WEATHER_INDEX_NAME, 0, NULL, rowID);438 439 deleted = psDBDeleteRows(dbh, WEATHER_TABLE_NAME, popped, 0);440 if (deleted != 1) {441 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");442 psFree(popped);443 psFree(row);444 return NULL;445 }446 447 psFree(popped);448 449 *temp01 = psMetadataLookupF32(&status, row, "temp01");450 if (!status) {451 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp01");452 psFree(row);453 return false;454 }455 *humi01 = psMetadataLookupF32(&status, row, "humi01");456 if (!status) {457 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi01");458 psFree(row);459 return false;460 }461 *temp02 = psMetadataLookupF32(&status, row, "temp02");462 if (!status) {463 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp02");464 psFree(row);465 return false;466 }467 *humi02 = psMetadataLookupF32(&status, row, "humi02");468 if (!status) {469 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi02");470 psFree(row);471 return false;472 }473 *temp03 = psMetadataLookupF32(&status, row, "temp03");474 if (!status) {475 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item temp03");476 psFree(row);477 return false;478 }479 *humi03 = psMetadataLookupF32(&status, row, "humi03");480 if (!status) {481 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item humi03");482 psFree(row);483 return false;484 }485 *pressure = psMetadataLookupF32(&status, row, "pressure");486 if (!status) {487 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item pressure");488 psFree(row);489 return false;490 }491 492 psFree(row);493 494 return true;495 }496 497 370 bool weatherInsertObject(psDB *dbh, weatherRow *object) 498 371 { … … 509 382 510 383 return true; 511 }512 513 weatherRow *weatherPopObject(psDB *dbh)514 {515 psF32 temp01;516 psF32 humi01;517 psF32 temp02;518 psF32 humi02;519 psF32 temp03;520 psF32 humi03;521 psF32 pressure;522 523 if (!weatherPop(dbh, &temp01, &humi01, &temp02, &humi02, &temp03, &humi03, &pressure)) {524 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");525 return NULL;526 }527 528 return weatherRowAlloc(temp01, humi01, temp02, humi02, temp03, humi03, pressure);529 384 } 530 385 … … 564 419 } 565 420 566 bool weatherPopFits(psDB *dbh, psFits *fits, unsigned long long limit)567 {568 char query[MAX_STRING_LENGTH];569 570 if (!weatherSelectRowsFits(dbh, fits, NULL, limit)) {571 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");572 return false;573 }574 575 // remove limit rows from the end of the database576 if (snprintf(query, MAX_STRING_LENGTH,577 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",578 WEATHER_TABLE_NAME, WEATHER_INDEX_NAME, limit) < 0) {579 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);580 return false;581 }582 583 if (!p_psDBRunQuery(dbh, query)) {584 psError(PS_ERR_UNKNOWN, false, "database query failed");585 return false;586 }587 588 return true;589 }590 591 421 bool weatherSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 592 422 { 593 423 psArray *rowSet; 594 psU64 i;595 424 596 425 rowSet = psDBSelectRows(dbh, WEATHER_TABLE_NAME, where, limit); 597 426 if (!rowSet) { 598 427 return false; 599 }600 601 // strip index column602 for (i = 0; i < rowSet->n; i++) {603 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, WEATHER_INDEX_NAME)) {604 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", WEATHER_INDEX_NAME);605 psFree(rowSet);606 return false;607 }608 428 } 609 429 … … 722 542 if (!rowSet) { 723 543 return NULL; 724 }725 726 // strip index column727 for (i = 0; i < rowSet->n; i++) {728 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, WEATHER_INDEX_NAME)) {729 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", WEATHER_INDEX_NAME);730 psFree(rowSet);731 return false;732 }733 544 } 734 545 … … 847 658 848 659 md = psMetadataAlloc(); 849 if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_TRANSPARENCY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {850 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_TRANSPARENCY_INDEX_NAME);851 psFree(md);852 return false;853 }854 660 if (!psMetadataAddStr(md, PS_LIST_TAIL, "filter", 0, NULL, "255")) { 855 661 psError(PS_ERR_UNKNOWN, false, "failed to add item filter"); … … 962 768 return deleted; 963 769 } 964 bool skyp_transparencyPop(psDB *dbh, char **filter, psF64 *trans, psS32 *nstars, psF64 *ra, psF64 *decl, psF32 *exptime, psF64 *sky_bright)965 {966 psArray *rowSet;967 psMetadata *row;968 psMetadata *popped;969 long deleted;970 bool status;971 int rowID;972 973 rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, NULL, 1);974 if (!rowSet) {975 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_TRANSPARENCY_INDEX_NAME);976 psFree(rowSet);977 return NULL;978 }979 980 row = psArrayGet(rowSet, 0);981 psMemIncrRefCounter(row);982 if (!row) {983 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");984 return NULL;985 }986 psFree(rowSet);987 988 rowID = psMetadataLookupS32(&status, row, SKYP_TRANSPARENCY_INDEX_NAME);989 if (!status) {990 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_TRANSPARENCY_INDEX_NAME);991 psFree(row);992 return NULL;993 }994 995 popped = psMetadataAlloc();996 psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_TRANSPARENCY_INDEX_NAME, 0, NULL, rowID);997 998 deleted = psDBDeleteRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, popped, 0);999 if (deleted != 1) {1000 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");1001 psFree(popped);1002 psFree(row);1003 return NULL;1004 }1005 1006 psFree(popped);1007 1008 *filter = psMetadataLookupPtr(&status, row, "filter");1009 if (!status) {1010 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");1011 psFree(row);1012 return false;1013 }1014 *trans = psMetadataLookupF64(&status, row, "trans");1015 if (!status) {1016 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item trans");1017 psFree(row);1018 return false;1019 }1020 *nstars = psMetadataLookupS32(&status, row, "nstars");1021 if (!status) {1022 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");1023 psFree(row);1024 return false;1025 }1026 *ra = psMetadataLookupF64(&status, row, "ra");1027 if (!status) {1028 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");1029 psFree(row);1030 return false;1031 }1032 *decl = psMetadataLookupF64(&status, row, "decl");1033 if (!status) {1034 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");1035 psFree(row);1036 return false;1037 }1038 *exptime = psMetadataLookupF32(&status, row, "exptime");1039 if (!status) {1040 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");1041 psFree(row);1042 return false;1043 }1044 *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");1045 if (!status) {1046 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");1047 psFree(row);1048 return false;1049 }1050 1051 psFree(row);1052 1053 return true;1054 }1055 1056 770 bool skyp_transparencyInsertObject(psDB *dbh, skyp_transparencyRow *object) 1057 771 { … … 1068 782 1069 783 return true; 1070 }1071 1072 skyp_transparencyRow *skyp_transparencyPopObject(psDB *dbh)1073 {1074 char filter[256];1075 psF64 trans;1076 psS32 nstars;1077 psF64 ra;1078 psF64 decl;1079 psF32 exptime;1080 psF64 sky_bright;1081 1082 if (!skyp_transparencyPop(dbh, (char **)&filter, &trans, &nstars, &ra, &decl, &exptime, &sky_bright)) {1083 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");1084 return NULL;1085 }1086 1087 return skyp_transparencyRowAlloc(filter, trans, nstars, ra, decl, exptime, sky_bright);1088 784 } 1089 785 … … 1123 819 } 1124 820 1125 bool skyp_transparencyPopFits(psDB *dbh, psFits *fits, unsigned long long limit)1126 {1127 char query[MAX_STRING_LENGTH];1128 1129 if (!skyp_transparencySelectRowsFits(dbh, fits, NULL, limit)) {1130 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");1131 return false;1132 }1133 1134 // remove limit rows from the end of the database1135 if (snprintf(query, MAX_STRING_LENGTH,1136 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",1137 SKYP_TRANSPARENCY_TABLE_NAME, SKYP_TRANSPARENCY_INDEX_NAME, limit) < 0) {1138 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);1139 return false;1140 }1141 1142 if (!p_psDBRunQuery(dbh, query)) {1143 psError(PS_ERR_UNKNOWN, false, "database query failed");1144 return false;1145 }1146 1147 return true;1148 }1149 1150 821 bool skyp_transparencySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 1151 822 { 1152 823 psArray *rowSet; 1153 psU64 i;1154 824 1155 825 rowSet = psDBSelectRows(dbh, SKYP_TRANSPARENCY_TABLE_NAME, where, limit); 1156 826 if (!rowSet) { 1157 827 return false; 1158 }1159 1160 // strip index column1161 for (i = 0; i < rowSet->n; i++) {1162 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_TRANSPARENCY_INDEX_NAME)) {1163 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_TRANSPARENCY_INDEX_NAME);1164 psFree(rowSet);1165 return false;1166 }1167 828 } 1168 829 … … 1281 942 if (!rowSet) { 1282 943 return NULL; 1283 }1284 1285 // strip index column1286 for (i = 0; i < rowSet->n; i++) {1287 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_TRANSPARENCY_INDEX_NAME)) {1288 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_TRANSPARENCY_INDEX_NAME);1289 psFree(rowSet);1290 return false;1291 }1292 944 } 1293 945 … … 1408 1060 1409 1061 md = psMetadataAlloc(); 1410 if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_ABSORPTION_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {1411 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_ABSORPTION_INDEX_NAME);1412 psFree(md);1413 return false;1414 }1415 1062 if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) { 1416 1063 psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id"); … … 1543 1190 return deleted; 1544 1191 } 1545 bool skyp_absorptionPop(psDB *dbh, char **disperser_id, psF32 *atmcomp1, psF32 *atmcomp2, psF32 *atmcomp3, psS32 *nstars, psF64 *ra, psF64 *decl, psF32 *exptime, psF64 *sky_bright)1546 {1547 psArray *rowSet;1548 psMetadata *row;1549 psMetadata *popped;1550 long deleted;1551 bool status;1552 int rowID;1553 1554 rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, NULL, 1);1555 if (!rowSet) {1556 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_ABSORPTION_INDEX_NAME);1557 psFree(rowSet);1558 return NULL;1559 }1560 1561 row = psArrayGet(rowSet, 0);1562 psMemIncrRefCounter(row);1563 if (!row) {1564 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");1565 return NULL;1566 }1567 psFree(rowSet);1568 1569 rowID = psMetadataLookupS32(&status, row, SKYP_ABSORPTION_INDEX_NAME);1570 if (!status) {1571 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_ABSORPTION_INDEX_NAME);1572 psFree(row);1573 return NULL;1574 }1575 1576 popped = psMetadataAlloc();1577 psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_ABSORPTION_INDEX_NAME, 0, NULL, rowID);1578 1579 deleted = psDBDeleteRows(dbh, SKYP_ABSORPTION_TABLE_NAME, popped, 0);1580 if (deleted != 1) {1581 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");1582 psFree(popped);1583 psFree(row);1584 return NULL;1585 }1586 1587 psFree(popped);1588 1589 *disperser_id = psMetadataLookupPtr(&status, row, "disperser_id");1590 if (!status) {1591 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");1592 psFree(row);1593 return false;1594 }1595 *atmcomp1 = psMetadataLookupF32(&status, row, "atmcomp1");1596 if (!status) {1597 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");1598 psFree(row);1599 return false;1600 }1601 *atmcomp2 = psMetadataLookupF32(&status, row, "atmcomp2");1602 if (!status) {1603 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");1604 psFree(row);1605 return false;1606 }1607 *atmcomp3 = psMetadataLookupF32(&status, row, "atmcomp3");1608 if (!status) {1609 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");1610 psFree(row);1611 return false;1612 }1613 *nstars = psMetadataLookupS32(&status, row, "nstars");1614 if (!status) {1615 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nstars");1616 psFree(row);1617 return false;1618 }1619 *ra = psMetadataLookupF64(&status, row, "ra");1620 if (!status) {1621 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");1622 psFree(row);1623 return false;1624 }1625 *decl = psMetadataLookupF64(&status, row, "decl");1626 if (!status) {1627 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");1628 psFree(row);1629 return false;1630 }1631 *exptime = psMetadataLookupF32(&status, row, "exptime");1632 if (!status) {1633 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");1634 psFree(row);1635 return false;1636 }1637 *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");1638 if (!status) {1639 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");1640 psFree(row);1641 return false;1642 }1643 1644 psFree(row);1645 1646 return true;1647 }1648 1649 1192 bool skyp_absorptionInsertObject(psDB *dbh, skyp_absorptionRow *object) 1650 1193 { … … 1661 1204 1662 1205 return true; 1663 }1664 1665 skyp_absorptionRow *skyp_absorptionPopObject(psDB *dbh)1666 {1667 char disperser_id[256];1668 psF32 atmcomp1;1669 psF32 atmcomp2;1670 psF32 atmcomp3;1671 psS32 nstars;1672 psF64 ra;1673 psF64 decl;1674 psF32 exptime;1675 psF64 sky_bright;1676 1677 if (!skyp_absorptionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &nstars, &ra, &decl, &exptime, &sky_bright)) {1678 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");1679 return NULL;1680 }1681 1682 return skyp_absorptionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, nstars, ra, decl, exptime, sky_bright);1683 1206 } 1684 1207 … … 1718 1241 } 1719 1242 1720 bool skyp_absorptionPopFits(psDB *dbh, psFits *fits, unsigned long long limit)1721 {1722 char query[MAX_STRING_LENGTH];1723 1724 if (!skyp_absorptionSelectRowsFits(dbh, fits, NULL, limit)) {1725 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");1726 return false;1727 }1728 1729 // remove limit rows from the end of the database1730 if (snprintf(query, MAX_STRING_LENGTH,1731 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",1732 SKYP_ABSORPTION_TABLE_NAME, SKYP_ABSORPTION_INDEX_NAME, limit) < 0) {1733 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);1734 return false;1735 }1736 1737 if (!p_psDBRunQuery(dbh, query)) {1738 psError(PS_ERR_UNKNOWN, false, "database query failed");1739 return false;1740 }1741 1742 return true;1743 }1744 1745 1243 bool skyp_absorptionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 1746 1244 { 1747 1245 psArray *rowSet; 1748 psU64 i;1749 1246 1750 1247 rowSet = psDBSelectRows(dbh, SKYP_ABSORPTION_TABLE_NAME, where, limit); 1751 1248 if (!rowSet) { 1752 1249 return false; 1753 }1754 1755 // strip index column1756 for (i = 0; i < rowSet->n; i++) {1757 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_ABSORPTION_INDEX_NAME)) {1758 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_ABSORPTION_INDEX_NAME);1759 psFree(rowSet);1760 return false;1761 }1762 1250 } 1763 1251 … … 1898 1386 if (!rowSet) { 1899 1387 return NULL; 1900 }1901 1902 // strip index column1903 for (i = 0; i < rowSet->n; i++) {1904 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_ABSORPTION_INDEX_NAME)) {1905 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_ABSORPTION_INDEX_NAME);1906 psFree(rowSet);1907 return false;1908 }1909 1388 } 1910 1389 … … 2022 1501 2023 1502 md = psMetadataAlloc(); 2024 if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_EMISSION_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {2025 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_EMISSION_INDEX_NAME);2026 psFree(md);2027 return false;2028 }2029 1503 if (!psMetadataAddStr(md, PS_LIST_TAIL, "disperser_id", 0, NULL, "255")) { 2030 1504 psError(PS_ERR_UNKNOWN, false, "failed to add item disperser_id"); … … 2127 1601 return deleted; 2128 1602 } 2129 bool skyp_emissionPop(psDB *dbh, char **disperser_id, psF32 *atmcomp1, psF32 *atmcomp2, psF32 *atmcomp3, psF32 *continuum, psF32 *exptime)2130 {2131 psArray *rowSet;2132 psMetadata *row;2133 psMetadata *popped;2134 long deleted;2135 bool status;2136 int rowID;2137 2138 rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, NULL, 1);2139 if (!rowSet) {2140 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_EMISSION_INDEX_NAME);2141 psFree(rowSet);2142 return NULL;2143 }2144 2145 row = psArrayGet(rowSet, 0);2146 psMemIncrRefCounter(row);2147 if (!row) {2148 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");2149 return NULL;2150 }2151 psFree(rowSet);2152 2153 rowID = psMetadataLookupS32(&status, row, SKYP_EMISSION_INDEX_NAME);2154 if (!status) {2155 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_EMISSION_INDEX_NAME);2156 psFree(row);2157 return NULL;2158 }2159 2160 popped = psMetadataAlloc();2161 psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_EMISSION_INDEX_NAME, 0, NULL, rowID);2162 2163 deleted = psDBDeleteRows(dbh, SKYP_EMISSION_TABLE_NAME, popped, 0);2164 if (deleted != 1) {2165 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");2166 psFree(popped);2167 psFree(row);2168 return NULL;2169 }2170 2171 psFree(popped);2172 2173 *disperser_id = psMetadataLookupPtr(&status, row, "disperser_id");2174 if (!status) {2175 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item disperser_id");2176 psFree(row);2177 return false;2178 }2179 *atmcomp1 = psMetadataLookupF32(&status, row, "atmcomp1");2180 if (!status) {2181 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp1");2182 psFree(row);2183 return false;2184 }2185 *atmcomp2 = psMetadataLookupF32(&status, row, "atmcomp2");2186 if (!status) {2187 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp2");2188 psFree(row);2189 return false;2190 }2191 *atmcomp3 = psMetadataLookupF32(&status, row, "atmcomp3");2192 if (!status) {2193 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item atmcomp3");2194 psFree(row);2195 return false;2196 }2197 *continuum = psMetadataLookupF32(&status, row, "continuum");2198 if (!status) {2199 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item continuum");2200 psFree(row);2201 return false;2202 }2203 *exptime = psMetadataLookupF32(&status, row, "exptime");2204 if (!status) {2205 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exptime");2206 psFree(row);2207 return false;2208 }2209 2210 psFree(row);2211 2212 return true;2213 }2214 2215 1603 bool skyp_emissionInsertObject(psDB *dbh, skyp_emissionRow *object) 2216 1604 { … … 2227 1615 2228 1616 return true; 2229 }2230 2231 skyp_emissionRow *skyp_emissionPopObject(psDB *dbh)2232 {2233 char disperser_id[256];2234 psF32 atmcomp1;2235 psF32 atmcomp2;2236 psF32 atmcomp3;2237 psF32 continuum;2238 psF32 exptime;2239 2240 if (!skyp_emissionPop(dbh, (char **)&disperser_id, &atmcomp1, &atmcomp2, &atmcomp3, &continuum, &exptime)) {2241 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");2242 return NULL;2243 }2244 2245 return skyp_emissionRowAlloc(disperser_id, atmcomp1, atmcomp2, atmcomp3, continuum, exptime);2246 1617 } 2247 1618 … … 2281 1652 } 2282 1653 2283 bool skyp_emissionPopFits(psDB *dbh, psFits *fits, unsigned long long limit)2284 {2285 char query[MAX_STRING_LENGTH];2286 2287 if (!skyp_emissionSelectRowsFits(dbh, fits, NULL, limit)) {2288 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");2289 return false;2290 }2291 2292 // remove limit rows from the end of the database2293 if (snprintf(query, MAX_STRING_LENGTH,2294 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",2295 SKYP_EMISSION_TABLE_NAME, SKYP_EMISSION_INDEX_NAME, limit) < 0) {2296 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);2297 return false;2298 }2299 2300 if (!p_psDBRunQuery(dbh, query)) {2301 psError(PS_ERR_UNKNOWN, false, "database query failed");2302 return false;2303 }2304 2305 return true;2306 }2307 2308 1654 bool skyp_emissionSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 2309 1655 { 2310 1656 psArray *rowSet; 2311 psU64 i;2312 1657 2313 1658 rowSet = psDBSelectRows(dbh, SKYP_EMISSION_TABLE_NAME, where, limit); 2314 1659 if (!rowSet) { 2315 1660 return false; 2316 }2317 2318 // strip index column2319 for (i = 0; i < rowSet->n; i++) {2320 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_EMISSION_INDEX_NAME)) {2321 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_EMISSION_INDEX_NAME);2322 psFree(rowSet);2323 return false;2324 }2325 1661 } 2326 1662 … … 2428 1764 if (!rowSet) { 2429 1765 return NULL; 2430 }2431 2432 // strip index column2433 for (i = 0; i < rowSet->n; i++) {2434 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_EMISSION_INDEX_NAME)) {2435 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_EMISSION_INDEX_NAME);2436 psFree(rowSet);2437 return false;2438 }2439 1766 } 2440 1767 … … 2553 1880 2554 1881 md = psMetadataAlloc(); 2555 if (!psMetadataAdd(md, PS_LIST_TAIL, DIMM_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {2556 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DIMM_INDEX_NAME);2557 psFree(md);2558 return false;2559 }2560 1882 if (!psMetadataAddF32(md, PS_LIST_TAIL, "sigmax", 0, NULL, 0.0)) { 2561 1883 psError(PS_ERR_UNKNOWN, false, "failed to add item sigmax"); … … 2668 1990 return deleted; 2669 1991 } 2670 bool dimmPop(psDB *dbh, psF32 *sigmax, psF32 *sigmay, psF32 *fwhm, psF64 *ra, psF64 *decl, psF32 *expttime, char **telescope_id)2671 {2672 psArray *rowSet;2673 psMetadata *row;2674 psMetadata *popped;2675 long deleted;2676 bool status;2677 int rowID;2678 2679 rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, NULL, 1);2680 if (!rowSet) {2681 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DIMM_INDEX_NAME);2682 psFree(rowSet);2683 return NULL;2684 }2685 2686 row = psArrayGet(rowSet, 0);2687 psMemIncrRefCounter(row);2688 if (!row) {2689 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");2690 return NULL;2691 }2692 psFree(rowSet);2693 2694 rowID = psMetadataLookupS32(&status, row, DIMM_INDEX_NAME);2695 if (!status) {2696 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DIMM_INDEX_NAME);2697 psFree(row);2698 return NULL;2699 }2700 2701 popped = psMetadataAlloc();2702 psMetadataAddS32(popped, PS_LIST_TAIL, DIMM_INDEX_NAME, 0, NULL, rowID);2703 2704 deleted = psDBDeleteRows(dbh, DIMM_TABLE_NAME, popped, 0);2705 if (deleted != 1) {2706 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");2707 psFree(popped);2708 psFree(row);2709 return NULL;2710 }2711 2712 psFree(popped);2713 2714 *sigmax = psMetadataLookupF32(&status, row, "sigmax");2715 if (!status) {2716 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmax");2717 psFree(row);2718 return false;2719 }2720 *sigmay = psMetadataLookupF32(&status, row, "sigmay");2721 if (!status) {2722 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigmay");2723 psFree(row);2724 return false;2725 }2726 *fwhm = psMetadataLookupF32(&status, row, "fwhm");2727 if (!status) {2728 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fwhm");2729 psFree(row);2730 return false;2731 }2732 *ra = psMetadataLookupF64(&status, row, "ra");2733 if (!status) {2734 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");2735 psFree(row);2736 return false;2737 }2738 *decl = psMetadataLookupF64(&status, row, "decl");2739 if (!status) {2740 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");2741 psFree(row);2742 return false;2743 }2744 *expttime = psMetadataLookupF32(&status, row, "expttime");2745 if (!status) {2746 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item expttime");2747 psFree(row);2748 return false;2749 }2750 *telescope_id = psMetadataLookupPtr(&status, row, "telescope_id");2751 if (!status) {2752 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope_id");2753 psFree(row);2754 return false;2755 }2756 2757 psFree(row);2758 2759 return true;2760 }2761 2762 1992 bool dimmInsertObject(psDB *dbh, dimmRow *object) 2763 1993 { … … 2774 2004 2775 2005 return true; 2776 }2777 2778 dimmRow *dimmPopObject(psDB *dbh)2779 {2780 psF32 sigmax;2781 psF32 sigmay;2782 psF32 fwhm;2783 psF64 ra;2784 psF64 decl;2785 psF32 expttime;2786 char telescope_id[256];2787 2788 if (!dimmPop(dbh, &sigmax, &sigmay, &fwhm, &ra, &decl, &expttime, (char **)&telescope_id)) {2789 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");2790 return NULL;2791 }2792 2793 return dimmRowAlloc(sigmax, sigmay, fwhm, ra, decl, expttime, telescope_id);2794 2006 } 2795 2007 … … 2829 2041 } 2830 2042 2831 bool dimmPopFits(psDB *dbh, psFits *fits, unsigned long long limit)2832 {2833 char query[MAX_STRING_LENGTH];2834 2835 if (!dimmSelectRowsFits(dbh, fits, NULL, limit)) {2836 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");2837 return false;2838 }2839 2840 // remove limit rows from the end of the database2841 if (snprintf(query, MAX_STRING_LENGTH,2842 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",2843 DIMM_TABLE_NAME, DIMM_INDEX_NAME, limit) < 0) {2844 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);2845 return false;2846 }2847 2848 if (!p_psDBRunQuery(dbh, query)) {2849 psError(PS_ERR_UNKNOWN, false, "database query failed");2850 return false;2851 }2852 2853 return true;2854 }2855 2856 2043 bool dimmSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 2857 2044 { 2858 2045 psArray *rowSet; 2859 psU64 i;2860 2046 2861 2047 rowSet = psDBSelectRows(dbh, DIMM_TABLE_NAME, where, limit); 2862 2048 if (!rowSet) { 2863 2049 return false; 2864 }2865 2866 // strip index column2867 for (i = 0; i < rowSet->n; i++) {2868 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DIMM_INDEX_NAME)) {2869 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DIMM_INDEX_NAME);2870 psFree(rowSet);2871 return false;2872 }2873 2050 } 2874 2051 … … 2987 2164 if (!rowSet) { 2988 2165 return NULL; 2989 }2990 2991 // strip index column2992 for (i = 0; i < rowSet->n; i++) {2993 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DIMM_INDEX_NAME)) {2994 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DIMM_INDEX_NAME);2995 psFree(rowSet);2996 return false;2997 }2998 2166 } 2999 2167 … … 3110 2278 3111 2279 md = psMetadataAlloc(); 3112 if (!psMetadataAdd(md, PS_LIST_TAIL, SKYP_IR_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {3113 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SKYP_IR_INDEX_NAME);3114 psFree(md);3115 return false;3116 }3117 2280 if (!psMetadataAddF64(md, PS_LIST_TAIL, "sky_bright", 0, NULL, 0.0)) { 3118 2281 psError(PS_ERR_UNKNOWN, false, "failed to add item sky_bright"); … … 3215 2378 return deleted; 3216 2379 } 3217 bool skyp_irPop(psDB *dbh, psF64 *sky_bright, psF64 *sky_var, psF64 *ra, psF64 *decl, psF32 *fov_x, psF32 *fov_y)3218 {3219 psArray *rowSet;3220 psMetadata *row;3221 psMetadata *popped;3222 long deleted;3223 bool status;3224 int rowID;3225 3226 rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, NULL, 1);3227 if (!rowSet) {3228 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_IR_INDEX_NAME);3229 psFree(rowSet);3230 return NULL;3231 }3232 3233 row = psArrayGet(rowSet, 0);3234 psMemIncrRefCounter(row);3235 if (!row) {3236 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");3237 return NULL;3238 }3239 psFree(rowSet);3240 3241 rowID = psMetadataLookupS32(&status, row, SKYP_IR_INDEX_NAME);3242 if (!status) {3243 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SKYP_IR_INDEX_NAME);3244 psFree(row);3245 return NULL;3246 }3247 3248 popped = psMetadataAlloc();3249 psMetadataAddS32(popped, PS_LIST_TAIL, SKYP_IR_INDEX_NAME, 0, NULL, rowID);3250 3251 deleted = psDBDeleteRows(dbh, SKYP_IR_TABLE_NAME, popped, 0);3252 if (deleted != 1) {3253 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");3254 psFree(popped);3255 psFree(row);3256 return NULL;3257 }3258 3259 psFree(popped);3260 3261 *sky_bright = psMetadataLookupF64(&status, row, "sky_bright");3262 if (!status) {3263 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_bright");3264 psFree(row);3265 return false;3266 }3267 *sky_var = psMetadataLookupF64(&status, row, "sky_var");3268 if (!status) {3269 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sky_var");3270 psFree(row);3271 return false;3272 }3273 *ra = psMetadataLookupF64(&status, row, "ra");3274 if (!status) {3275 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");3276 psFree(row);3277 return false;3278 }3279 *decl = psMetadataLookupF64(&status, row, "decl");3280 if (!status) {3281 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");3282 psFree(row);3283 return false;3284 }3285 *fov_x = psMetadataLookupF32(&status, row, "fov_x");3286 if (!status) {3287 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_x");3288 psFree(row);3289 return false;3290 }3291 *fov_y = psMetadataLookupF32(&status, row, "fov_y");3292 if (!status) {3293 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item fov_y");3294 psFree(row);3295 return false;3296 }3297 3298 psFree(row);3299 3300 return true;3301 }3302 3303 2380 bool skyp_irInsertObject(psDB *dbh, skyp_irRow *object) 3304 2381 { … … 3315 2392 3316 2393 return true; 3317 }3318 3319 skyp_irRow *skyp_irPopObject(psDB *dbh)3320 {3321 psF64 sky_bright;3322 psF64 sky_var;3323 psF64 ra;3324 psF64 decl;3325 psF32 fov_x;3326 psF32 fov_y;3327 3328 if (!skyp_irPop(dbh, &sky_bright, &sky_var, &ra, &decl, &fov_x, &fov_y)) {3329 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");3330 return NULL;3331 }3332 3333 return skyp_irRowAlloc(sky_bright, sky_var, ra, decl, fov_x, fov_y);3334 2394 } 3335 2395 … … 3369 2429 } 3370 2430 3371 bool skyp_irPopFits(psDB *dbh, psFits *fits, unsigned long long limit)3372 {3373 char query[MAX_STRING_LENGTH];3374 3375 if (!skyp_irSelectRowsFits(dbh, fits, NULL, limit)) {3376 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");3377 return false;3378 }3379 3380 // remove limit rows from the end of the database3381 if (snprintf(query, MAX_STRING_LENGTH,3382 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",3383 SKYP_IR_TABLE_NAME, SKYP_IR_INDEX_NAME, limit) < 0) {3384 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);3385 return false;3386 }3387 3388 if (!p_psDBRunQuery(dbh, query)) {3389 psError(PS_ERR_UNKNOWN, false, "database query failed");3390 return false;3391 }3392 3393 return true;3394 }3395 3396 2431 bool skyp_irSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 3397 2432 { 3398 2433 psArray *rowSet; 3399 psU64 i;3400 2434 3401 2435 rowSet = psDBSelectRows(dbh, SKYP_IR_TABLE_NAME, where, limit); 3402 2436 if (!rowSet) { 3403 2437 return false; 3404 }3405 3406 // strip index column3407 for (i = 0; i < rowSet->n; i++) {3408 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SKYP_IR_INDEX_NAME)) {3409 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_IR_INDEX_NAME);3410 psFree(rowSet);3411 return false;3412 }3413 2438 } 3414 2439 … … 3516 2541 if (!rowSet) { 3517 2542 return NULL; 3518 }3519 3520 // strip index column3521 for (i = 0; i < rowSet->n; i++) {3522 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SKYP_IR_INDEX_NAME)) {3523 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SKYP_IR_INDEX_NAME);3524 psFree(rowSet);3525 return false;3526 }3527 2543 } 3528 2544 … … 3637 2653 3638 2654 md = psMetadataAlloc(); 3639 if (!psMetadataAdd(md, PS_LIST_TAIL, DOME_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {3640 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DOME_INDEX_NAME);3641 psFree(md);3642 return false;3643 }3644 2655 if (!psMetadataAddF32(md, PS_LIST_TAIL, "az", 0, NULL, 0.0)) { 3645 2656 psError(PS_ERR_UNKNOWN, false, "failed to add item az"); … … 3722 2733 return deleted; 3723 2734 } 3724 bool domePop(psDB *dbh, psF32 *az, bool *open, bool *light, bool *track)3725 {3726 psArray *rowSet;3727 psMetadata *row;3728 psMetadata *popped;3729 long deleted;3730 bool status;3731 int rowID;3732 3733 rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, NULL, 1);3734 if (!rowSet) {3735 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DOME_INDEX_NAME);3736 psFree(rowSet);3737 return NULL;3738 }3739 3740 row = psArrayGet(rowSet, 0);3741 psMemIncrRefCounter(row);3742 if (!row) {3743 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");3744 return NULL;3745 }3746 psFree(rowSet);3747 3748 rowID = psMetadataLookupS32(&status, row, DOME_INDEX_NAME);3749 if (!status) {3750 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DOME_INDEX_NAME);3751 psFree(row);3752 return NULL;3753 }3754 3755 popped = psMetadataAlloc();3756 psMetadataAddS32(popped, PS_LIST_TAIL, DOME_INDEX_NAME, 0, NULL, rowID);3757 3758 deleted = psDBDeleteRows(dbh, DOME_TABLE_NAME, popped, 0);3759 if (deleted != 1) {3760 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");3761 psFree(popped);3762 psFree(row);3763 return NULL;3764 }3765 3766 psFree(popped);3767 3768 *az = psMetadataLookupF32(&status, row, "az");3769 if (!status) {3770 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");3771 psFree(row);3772 return false;3773 }3774 *open = psMetadataLookupBool(&status, row, "open");3775 if (!status) {3776 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item open");3777 psFree(row);3778 return false;3779 }3780 *light = psMetadataLookupBool(&status, row, "light");3781 if (!status) {3782 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item light");3783 psFree(row);3784 return false;3785 }3786 *track = psMetadataLookupBool(&status, row, "track");3787 if (!status) {3788 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item track");3789 psFree(row);3790 return false;3791 }3792 3793 psFree(row);3794 3795 return true;3796 }3797 3798 2735 bool domeInsertObject(psDB *dbh, domeRow *object) 3799 2736 { … … 3810 2747 3811 2748 return true; 3812 }3813 3814 domeRow *domePopObject(psDB *dbh)3815 {3816 psF32 az;3817 bool open;3818 bool light;3819 bool track;3820 3821 if (!domePop(dbh, &az, &open, &light, &track)) {3822 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");3823 return NULL;3824 }3825 3826 return domeRowAlloc(az, open, light, track);3827 2749 } 3828 2750 … … 3862 2784 } 3863 2785 3864 bool domePopFits(psDB *dbh, psFits *fits, unsigned long long limit)3865 {3866 char query[MAX_STRING_LENGTH];3867 3868 if (!domeSelectRowsFits(dbh, fits, NULL, limit)) {3869 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");3870 return false;3871 }3872 3873 // remove limit rows from the end of the database3874 if (snprintf(query, MAX_STRING_LENGTH,3875 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",3876 DOME_TABLE_NAME, DOME_INDEX_NAME, limit) < 0) {3877 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);3878 return false;3879 }3880 3881 if (!p_psDBRunQuery(dbh, query)) {3882 psError(PS_ERR_UNKNOWN, false, "database query failed");3883 return false;3884 }3885 3886 return true;3887 }3888 3889 2786 bool domeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 3890 2787 { 3891 2788 psArray *rowSet; 3892 psU64 i;3893 2789 3894 2790 rowSet = psDBSelectRows(dbh, DOME_TABLE_NAME, where, limit); 3895 2791 if (!rowSet) { 3896 2792 return false; 3897 }3898 3899 // strip index column3900 for (i = 0; i < rowSet->n; i++) {3901 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DOME_INDEX_NAME)) {3902 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DOME_INDEX_NAME);3903 psFree(rowSet);3904 return false;3905 }3906 2793 } 3907 2794 … … 3987 2874 if (!rowSet) { 3988 2875 return NULL; 3989 }3990 3991 // strip index column3992 for (i = 0; i < rowSet->n; i++) {3993 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DOME_INDEX_NAME)) {3994 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DOME_INDEX_NAME);3995 psFree(rowSet);3996 return false;3997 }3998 2876 } 3999 2877 … … 4110 2988 4111 2989 md = psMetadataAlloc(); 4112 if (!psMetadataAdd(md, PS_LIST_TAIL, TELESCOPE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {4113 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", TELESCOPE_INDEX_NAME);4114 psFree(md);4115 return false;4116 }4117 2990 if (!psMetadataAddStr(md, PS_LIST_TAIL, "guide", 0, NULL, "255")) { 4118 2991 psError(PS_ERR_UNKNOWN, false, "failed to add item guide"); … … 4205 3078 return deleted; 4206 3079 } 4207 bool telescopePop(psDB *dbh, char **guide, psF32 *alt, psF32 *az, psF64 *ra, psF64 *decl)4208 {4209 psArray *rowSet;4210 psMetadata *row;4211 psMetadata *popped;4212 long deleted;4213 bool status;4214 int rowID;4215 4216 rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, NULL, 1);4217 if (!rowSet) {4218 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", TELESCOPE_INDEX_NAME);4219 psFree(rowSet);4220 return NULL;4221 }4222 4223 row = psArrayGet(rowSet, 0);4224 psMemIncrRefCounter(row);4225 if (!row) {4226 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");4227 return NULL;4228 }4229 psFree(rowSet);4230 4231 rowID = psMetadataLookupS32(&status, row, TELESCOPE_INDEX_NAME);4232 if (!status) {4233 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", TELESCOPE_INDEX_NAME);4234 psFree(row);4235 return NULL;4236 }4237 4238 popped = psMetadataAlloc();4239 psMetadataAddS32(popped, PS_LIST_TAIL, TELESCOPE_INDEX_NAME, 0, NULL, rowID);4240 4241 deleted = psDBDeleteRows(dbh, TELESCOPE_TABLE_NAME, popped, 0);4242 if (deleted != 1) {4243 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");4244 psFree(popped);4245 psFree(row);4246 return NULL;4247 }4248 4249 psFree(popped);4250 4251 *guide = psMetadataLookupPtr(&status, row, "guide");4252 if (!status) {4253 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item guide");4254 psFree(row);4255 return false;4256 }4257 *alt = psMetadataLookupF32(&status, row, "alt");4258 if (!status) {4259 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");4260 psFree(row);4261 return false;4262 }4263 *az = psMetadataLookupF32(&status, row, "az");4264 if (!status) {4265 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");4266 psFree(row);4267 return false;4268 }4269 *ra = psMetadataLookupF64(&status, row, "ra");4270 if (!status) {4271 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");4272 psFree(row);4273 return false;4274 }4275 *decl = psMetadataLookupF64(&status, row, "decl");4276 if (!status) {4277 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");4278 psFree(row);4279 return false;4280 }4281 4282 psFree(row);4283 4284 return true;4285 }4286 4287 3080 bool telescopeInsertObject(psDB *dbh, telescopeRow *object) 4288 3081 { … … 4299 3092 4300 3093 return true; 4301 }4302 4303 telescopeRow *telescopePopObject(psDB *dbh)4304 {4305 char guide[256];4306 psF32 alt;4307 psF32 az;4308 psF64 ra;4309 psF64 decl;4310 4311 if (!telescopePop(dbh, (char **)&guide, &alt, &az, &ra, &decl)) {4312 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");4313 return NULL;4314 }4315 4316 return telescopeRowAlloc(guide, alt, az, ra, decl);4317 3094 } 4318 3095 … … 4352 3129 } 4353 3130 4354 bool telescopePopFits(psDB *dbh, psFits *fits, unsigned long long limit)4355 {4356 char query[MAX_STRING_LENGTH];4357 4358 if (!telescopeSelectRowsFits(dbh, fits, NULL, limit)) {4359 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");4360 return false;4361 }4362 4363 // remove limit rows from the end of the database4364 if (snprintf(query, MAX_STRING_LENGTH,4365 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",4366 TELESCOPE_TABLE_NAME, TELESCOPE_INDEX_NAME, limit) < 0) {4367 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);4368 return false;4369 }4370 4371 if (!p_psDBRunQuery(dbh, query)) {4372 psError(PS_ERR_UNKNOWN, false, "database query failed");4373 return false;4374 }4375 4376 return true;4377 }4378 4379 3131 bool telescopeSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 4380 3132 { 4381 3133 psArray *rowSet; 4382 psU64 i;4383 3134 4384 3135 rowSet = psDBSelectRows(dbh, TELESCOPE_TABLE_NAME, where, limit); 4385 3136 if (!rowSet) { 4386 3137 return false; 4387 }4388 4389 // strip index column4390 for (i = 0; i < rowSet->n; i++) {4391 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, TELESCOPE_INDEX_NAME)) {4392 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", TELESCOPE_INDEX_NAME);4393 psFree(rowSet);4394 return false;4395 }4396 3138 } 4397 3139 … … 4488 3230 if (!rowSet) { 4489 3231 return NULL; 4490 }4491 4492 // strip index column4493 for (i = 0; i < rowSet->n; i++) {4494 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, TELESCOPE_INDEX_NAME)) {4495 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", TELESCOPE_INDEX_NAME);4496 psFree(rowSet);4497 return false;4498 }4499 3232 } 4500 3233 … … 4615 3348 4616 3349 md = psMetadataAlloc(); 4617 if (!psMetadataAdd(md, PS_LIST_TAIL, SUMMITEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {4618 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", SUMMITEXP_INDEX_NAME);4619 psFree(md);4620 return false;4621 }4622 3350 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) { 4623 3351 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); … … 4710 3438 return deleted; 4711 3439 } 4712 bool summitExpPop(psDB *dbh, char **exp_id, char **camera, char **telescope, char **exp_type, char **uri)4713 {4714 psArray *rowSet;4715 psMetadata *row;4716 psMetadata *popped;4717 long deleted;4718 bool status;4719 int rowID;4720 4721 rowSet = psDBSelectRows(dbh, SUMMITEXP_TABLE_NAME, NULL, 1);4722 if (!rowSet) {4723 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SUMMITEXP_INDEX_NAME);4724 psFree(rowSet);4725 return NULL;4726 }4727 4728 row = psArrayGet(rowSet, 0);4729 psMemIncrRefCounter(row);4730 if (!row) {4731 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");4732 return NULL;4733 }4734 psFree(rowSet);4735 4736 rowID = psMetadataLookupS32(&status, row, SUMMITEXP_INDEX_NAME);4737 if (!status) {4738 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", SUMMITEXP_INDEX_NAME);4739 psFree(row);4740 return NULL;4741 }4742 4743 popped = psMetadataAlloc();4744 psMetadataAddS32(popped, PS_LIST_TAIL, SUMMITEXP_INDEX_NAME, 0, NULL, rowID);4745 4746 deleted = psDBDeleteRows(dbh, SUMMITEXP_TABLE_NAME, popped, 0);4747 if (deleted != 1) {4748 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");4749 psFree(popped);4750 psFree(row);4751 return NULL;4752 }4753 4754 psFree(popped);4755 4756 *exp_id = psMetadataLookupPtr(&status, row, "exp_id");4757 if (!status) {4758 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");4759 psFree(row);4760 return false;4761 }4762 *camera = psMetadataLookupPtr(&status, row, "camera");4763 if (!status) {4764 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");4765 psFree(row);4766 return false;4767 }4768 *telescope = psMetadataLookupPtr(&status, row, "telescope");4769 if (!status) {4770 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");4771 psFree(row);4772 return false;4773 }4774 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");4775 if (!status) {4776 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");4777 psFree(row);4778 return false;4779 }4780 *uri = psMetadataLookupPtr(&status, row, "uri");4781 if (!status) {4782 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");4783 psFree(row);4784 return false;4785 }4786 4787 psFree(row);4788 4789 return true;4790 }4791 4792 3440 bool summitExpInsertObject(psDB *dbh, summitExpRow *object) 4793 3441 { … … 4804 3452 4805 3453 return true; 4806 }4807 4808 summitExpRow *summitExpPopObject(psDB *dbh)4809 {4810 char exp_id[256];4811 char camera[256];4812 char telescope[256];4813 char exp_type[256];4814 char uri[256];4815 4816 if (!summitExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, (char **)&uri)) {4817 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");4818 return NULL;4819 }4820 4821 return summitExpRowAlloc(exp_id, camera, telescope, exp_type, uri);4822 3454 } 4823 3455 … … 4857 3489 } 4858 3490 4859 bool summitExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)4860 {4861 char query[MAX_STRING_LENGTH];4862 4863 if (!summitExpSelectRowsFits(dbh, fits, NULL, limit)) {4864 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");4865 return false;4866 }4867 4868 // remove limit rows from the end of the database4869 if (snprintf(query, MAX_STRING_LENGTH,4870 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",4871 SUMMITEXP_TABLE_NAME, SUMMITEXP_INDEX_NAME, limit) < 0) {4872 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);4873 return false;4874 }4875 4876 if (!p_psDBRunQuery(dbh, query)) {4877 psError(PS_ERR_UNKNOWN, false, "database query failed");4878 return false;4879 }4880 4881 return true;4882 }4883 4884 3491 bool summitExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 4885 3492 { 4886 3493 psArray *rowSet; 4887 psU64 i;4888 3494 4889 3495 rowSet = psDBSelectRows(dbh, SUMMITEXP_TABLE_NAME, where, limit); 4890 3496 if (!rowSet) { 4891 3497 return false; 4892 }4893 4894 // strip index column4895 for (i = 0; i < rowSet->n; i++) {4896 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, SUMMITEXP_INDEX_NAME)) {4897 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SUMMITEXP_INDEX_NAME);4898 psFree(rowSet);4899 return false;4900 }4901 3498 } 4902 3499 … … 4993 3590 if (!rowSet) { 4994 3591 return NULL; 4995 }4996 4997 // strip index column4998 for (i = 0; i < rowSet->n; i++) {4999 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, SUMMITEXP_INDEX_NAME)) {5000 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", SUMMITEXP_INDEX_NAME);5001 psFree(rowSet);5002 return false;5003 }5004 3592 } 5005 3593 … … 5119 3707 5120 3708 md = psMetadataAlloc(); 5121 if (!psMetadataAdd(md, PS_LIST_TAIL, PZPENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {5122 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", PZPENDINGEXP_INDEX_NAME);5123 psFree(md);5124 return false;5125 }5126 3709 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) { 5127 3710 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); … … 5214 3797 return deleted; 5215 3798 } 5216 bool pzPendingExpPop(psDB *dbh, char **exp_id, char **camera, char **telescope, char **exp_type, psS32 *imfiles)5217 {5218 psArray *rowSet;5219 psMetadata *row;5220 psMetadata *popped;5221 long deleted;5222 bool status;5223 int rowID;5224 5225 rowSet = psDBSelectRows(dbh, PZPENDINGEXP_TABLE_NAME, NULL, 1);5226 if (!rowSet) {5227 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGEXP_INDEX_NAME);5228 psFree(rowSet);5229 return NULL;5230 }5231 5232 row = psArrayGet(rowSet, 0);5233 psMemIncrRefCounter(row);5234 if (!row) {5235 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");5236 return NULL;5237 }5238 psFree(rowSet);5239 5240 rowID = psMetadataLookupS32(&status, row, PZPENDINGEXP_INDEX_NAME);5241 if (!status) {5242 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGEXP_INDEX_NAME);5243 psFree(row);5244 return NULL;5245 }5246 5247 popped = psMetadataAlloc();5248 psMetadataAddS32(popped, PS_LIST_TAIL, PZPENDINGEXP_INDEX_NAME, 0, NULL, rowID);5249 5250 deleted = psDBDeleteRows(dbh, PZPENDINGEXP_TABLE_NAME, popped, 0);5251 if (deleted != 1) {5252 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");5253 psFree(popped);5254 psFree(row);5255 return NULL;5256 }5257 5258 psFree(popped);5259 5260 *exp_id = psMetadataLookupPtr(&status, row, "exp_id");5261 if (!status) {5262 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");5263 psFree(row);5264 return false;5265 }5266 *camera = psMetadataLookupPtr(&status, row, "camera");5267 if (!status) {5268 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");5269 psFree(row);5270 return false;5271 }5272 *telescope = psMetadataLookupPtr(&status, row, "telescope");5273 if (!status) {5274 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");5275 psFree(row);5276 return false;5277 }5278 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");5279 if (!status) {5280 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");5281 psFree(row);5282 return false;5283 }5284 *imfiles = psMetadataLookupS32(&status, row, "imfiles");5285 if (!status) {5286 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");5287 psFree(row);5288 return false;5289 }5290 5291 psFree(row);5292 5293 return true;5294 }5295 5296 3799 bool pzPendingExpInsertObject(psDB *dbh, pzPendingExpRow *object) 5297 3800 { … … 5308 3811 5309 3812 return true; 5310 }5311 5312 pzPendingExpRow *pzPendingExpPopObject(psDB *dbh)5313 {5314 char exp_id[256];5315 char camera[256];5316 char telescope[256];5317 char exp_type[256];5318 psS32 imfiles;5319 5320 if (!pzPendingExpPop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) {5321 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");5322 return NULL;5323 }5324 5325 return pzPendingExpRowAlloc(exp_id, camera, telescope, exp_type, imfiles);5326 3813 } 5327 3814 … … 5361 3848 } 5362 3849 5363 bool pzPendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)5364 {5365 char query[MAX_STRING_LENGTH];5366 5367 if (!pzPendingExpSelectRowsFits(dbh, fits, NULL, limit)) {5368 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");5369 return false;5370 }5371 5372 // remove limit rows from the end of the database5373 if (snprintf(query, MAX_STRING_LENGTH,5374 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",5375 PZPENDINGEXP_TABLE_NAME, PZPENDINGEXP_INDEX_NAME, limit) < 0) {5376 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);5377 return false;5378 }5379 5380 if (!p_psDBRunQuery(dbh, query)) {5381 psError(PS_ERR_UNKNOWN, false, "database query failed");5382 return false;5383 }5384 5385 return true;5386 }5387 5388 3850 bool pzPendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 5389 3851 { 5390 3852 psArray *rowSet; 5391 psU64 i;5392 3853 5393 3854 rowSet = psDBSelectRows(dbh, PZPENDINGEXP_TABLE_NAME, where, limit); 5394 3855 if (!rowSet) { 5395 3856 return false; 5396 }5397 5398 // strip index column5399 for (i = 0; i < rowSet->n; i++) {5400 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, PZPENDINGEXP_INDEX_NAME)) {5401 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGEXP_INDEX_NAME);5402 psFree(rowSet);5403 return false;5404 }5405 3857 } 5406 3858 … … 5497 3949 if (!rowSet) { 5498 3950 return NULL; 5499 }5500 5501 // strip index column5502 for (i = 0; i < rowSet->n; i++) {5503 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, PZPENDINGEXP_INDEX_NAME)) {5504 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGEXP_INDEX_NAME);5505 psFree(rowSet);5506 return false;5507 }5508 3951 } 5509 3952 … … 5629 4072 5630 4073 md = psMetadataAlloc(); 5631 if (!psMetadataAdd(md, PS_LIST_TAIL, PZPENDINGIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {5632 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", PZPENDINGIMFILE_INDEX_NAME);5633 psFree(md);5634 return false;5635 }5636 4074 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_id", 0, "Primary Key", "64")) { 5637 4075 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); … … 5754 4192 return deleted; 5755 4193 } 5756 bool pzPendingImfilePop(psDB *dbh, char **exp_id, char **camera, char **telescope, psS32 *bytes, char **md5sum, char **class, char **class_id, char **uri)5757 {5758 psArray *rowSet;5759 psMetadata *row;5760 psMetadata *popped;5761 long deleted;5762 bool status;5763 int rowID;5764 5765 rowSet = psDBSelectRows(dbh, PZPENDINGIMFILE_TABLE_NAME, NULL, 1);5766 if (!rowSet) {5767 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGIMFILE_INDEX_NAME);5768 psFree(rowSet);5769 return NULL;5770 }5771 5772 row = psArrayGet(rowSet, 0);5773 psMemIncrRefCounter(row);5774 if (!row) {5775 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");5776 return NULL;5777 }5778 psFree(rowSet);5779 5780 rowID = psMetadataLookupS32(&status, row, PZPENDINGIMFILE_INDEX_NAME);5781 if (!status) {5782 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", PZPENDINGIMFILE_INDEX_NAME);5783 psFree(row);5784 return NULL;5785 }5786 5787 popped = psMetadataAlloc();5788 psMetadataAddS32(popped, PS_LIST_TAIL, PZPENDINGIMFILE_INDEX_NAME, 0, NULL, rowID);5789 5790 deleted = psDBDeleteRows(dbh, PZPENDINGIMFILE_TABLE_NAME, popped, 0);5791 if (deleted != 1) {5792 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");5793 psFree(popped);5794 psFree(row);5795 return NULL;5796 }5797 5798 psFree(popped);5799 5800 *exp_id = psMetadataLookupPtr(&status, row, "exp_id");5801 if (!status) {5802 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");5803 psFree(row);5804 return false;5805 }5806 *camera = psMetadataLookupPtr(&status, row, "camera");5807 if (!status) {5808 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");5809 psFree(row);5810 return false;5811 }5812 *telescope = psMetadataLookupPtr(&status, row, "telescope");5813 if (!status) {5814 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");5815 psFree(row);5816 return false;5817 }5818 *bytes = psMetadataLookupS32(&status, row, "bytes");5819 if (!status) {5820 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bytes");5821 psFree(row);5822 return false;5823 }5824 *md5sum = psMetadataLookupPtr(&status, row, "md5sum");5825 if (!status) {5826 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item md5sum");5827 psFree(row);5828 return false;5829 }5830 *class = psMetadataLookupPtr(&status, row, "class");5831 if (!status) {5832 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");5833 psFree(row);5834 return false;5835 }5836 *class_id = psMetadataLookupPtr(&status, row, "class_id");5837 if (!status) {5838 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");5839 psFree(row);5840 return false;5841 }5842 *uri = psMetadataLookupPtr(&status, row, "uri");5843 if (!status) {5844 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");5845 psFree(row);5846 return false;5847 }5848 5849 psFree(row);5850 5851 return true;5852 }5853 5854 4194 bool pzPendingImfileInsertObject(psDB *dbh, pzPendingImfileRow *object) 5855 4195 { … … 5866 4206 5867 4207 return true; 5868 }5869 5870 pzPendingImfileRow *pzPendingImfilePopObject(psDB *dbh)5871 {5872 char exp_id[256];5873 char camera[256];5874 char telescope[256];5875 psS32 bytes;5876 char md5sum[256];5877 char class[256];5878 char class_id[256];5879 char uri[256];5880 5881 if (!pzPendingImfilePop(dbh, (char **)&exp_id, (char **)&camera, (char **)&telescope, &bytes, (char **)&md5sum, (char **)&class, (char **)&class_id, (char **)&uri)) {5882 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");5883 return NULL;5884 }5885 5886 return pzPendingImfileRowAlloc(exp_id, camera, telescope, bytes, md5sum, class, class_id, uri);5887 4208 } 5888 4209 … … 5922 4243 } 5923 4244 5924 bool pzPendingImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)5925 {5926 char query[MAX_STRING_LENGTH];5927 5928 if (!pzPendingImfileSelectRowsFits(dbh, fits, NULL, limit)) {5929 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");5930 return false;5931 }5932 5933 // remove limit rows from the end of the database5934 if (snprintf(query, MAX_STRING_LENGTH,5935 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",5936 PZPENDINGIMFILE_TABLE_NAME, PZPENDINGIMFILE_INDEX_NAME, limit) < 0) {5937 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);5938 return false;5939 }5940 5941 if (!p_psDBRunQuery(dbh, query)) {5942 psError(PS_ERR_UNKNOWN, false, "database query failed");5943 return false;5944 }5945 5946 return true;5947 }5948 5949 4245 bool pzPendingImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 5950 4246 { 5951 4247 psArray *rowSet; 5952 psU64 i;5953 4248 5954 4249 rowSet = psDBSelectRows(dbh, PZPENDINGIMFILE_TABLE_NAME, where, limit); 5955 4250 if (!rowSet) { 5956 4251 return false; 5957 }5958 5959 // strip index column5960 for (i = 0; i < rowSet->n; i++) {5961 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, PZPENDINGIMFILE_INDEX_NAME)) {5962 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGIMFILE_INDEX_NAME);5963 psFree(rowSet);5964 return false;5965 }5966 4252 } 5967 4253 … … 6091 4377 if (!rowSet) { 6092 4378 return NULL; 6093 }6094 6095 // strip index column6096 for (i = 0; i < rowSet->n; i++) {6097 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, PZPENDINGIMFILE_INDEX_NAME)) {6098 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", PZPENDINGIMFILE_INDEX_NAME);6099 psFree(rowSet);6100 return false;6101 }6102 4379 } 6103 4380 … … 6219 4496 6220 4497 md = psMetadataAlloc(); 6221 if (!psMetadataAdd(md, PS_LIST_TAIL, NEWEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {6222 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", NEWEXP_INDEX_NAME);6223 psFree(md);6224 return false;6225 }6226 4498 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 6227 4499 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 6324 4596 return deleted; 6325 4597 } 6326 bool newExpPop(psDB *dbh, char **exp_tag, char **exp_id, char **camera, char **telescope, char **exp_type, psS32 *imfiles)6327 {6328 psArray *rowSet;6329 psMetadata *row;6330 psMetadata *popped;6331 long deleted;6332 bool status;6333 int rowID;6334 6335 rowSet = psDBSelectRows(dbh, NEWEXP_TABLE_NAME, NULL, 1);6336 if (!rowSet) {6337 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWEXP_INDEX_NAME);6338 psFree(rowSet);6339 return NULL;6340 }6341 6342 row = psArrayGet(rowSet, 0);6343 psMemIncrRefCounter(row);6344 if (!row) {6345 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");6346 return NULL;6347 }6348 psFree(rowSet);6349 6350 rowID = psMetadataLookupS32(&status, row, NEWEXP_INDEX_NAME);6351 if (!status) {6352 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWEXP_INDEX_NAME);6353 psFree(row);6354 return NULL;6355 }6356 6357 popped = psMetadataAlloc();6358 psMetadataAddS32(popped, PS_LIST_TAIL, NEWEXP_INDEX_NAME, 0, NULL, rowID);6359 6360 deleted = psDBDeleteRows(dbh, NEWEXP_TABLE_NAME, popped, 0);6361 if (deleted != 1) {6362 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");6363 psFree(popped);6364 psFree(row);6365 return NULL;6366 }6367 6368 psFree(popped);6369 6370 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");6371 if (!status) {6372 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");6373 psFree(row);6374 return false;6375 }6376 *exp_id = psMetadataLookupPtr(&status, row, "exp_id");6377 if (!status) {6378 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_id");6379 psFree(row);6380 return false;6381 }6382 *camera = psMetadataLookupPtr(&status, row, "camera");6383 if (!status) {6384 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");6385 psFree(row);6386 return false;6387 }6388 *telescope = psMetadataLookupPtr(&status, row, "telescope");6389 if (!status) {6390 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");6391 psFree(row);6392 return false;6393 }6394 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");6395 if (!status) {6396 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");6397 psFree(row);6398 return false;6399 }6400 *imfiles = psMetadataLookupS32(&status, row, "imfiles");6401 if (!status) {6402 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");6403 psFree(row);6404 return false;6405 }6406 6407 psFree(row);6408 6409 return true;6410 }6411 6412 4598 bool newExpInsertObject(psDB *dbh, newExpRow *object) 6413 4599 { … … 6424 4610 6425 4611 return true; 6426 }6427 6428 newExpRow *newExpPopObject(psDB *dbh)6429 {6430 char exp_tag[256];6431 char exp_id[256];6432 char camera[256];6433 char telescope[256];6434 char exp_type[256];6435 psS32 imfiles;6436 6437 if (!newExpPop(dbh, (char **)&exp_tag, (char **)&exp_id, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles)) {6438 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");6439 return NULL;6440 }6441 6442 return newExpRowAlloc(exp_tag, exp_id, camera, telescope, exp_type, imfiles);6443 4612 } 6444 4613 … … 6478 4647 } 6479 4648 6480 bool newExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)6481 {6482 char query[MAX_STRING_LENGTH];6483 6484 if (!newExpSelectRowsFits(dbh, fits, NULL, limit)) {6485 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");6486 return false;6487 }6488 6489 // remove limit rows from the end of the database6490 if (snprintf(query, MAX_STRING_LENGTH,6491 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",6492 NEWEXP_TABLE_NAME, NEWEXP_INDEX_NAME, limit) < 0) {6493 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);6494 return false;6495 }6496 6497 if (!p_psDBRunQuery(dbh, query)) {6498 psError(PS_ERR_UNKNOWN, false, "database query failed");6499 return false;6500 }6501 6502 return true;6503 }6504 6505 4649 bool newExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 6506 4650 { 6507 4651 psArray *rowSet; 6508 psU64 i;6509 4652 6510 4653 rowSet = psDBSelectRows(dbh, NEWEXP_TABLE_NAME, where, limit); 6511 4654 if (!rowSet) { 6512 4655 return false; 6513 }6514 6515 // strip index column6516 for (i = 0; i < rowSet->n; i++) {6517 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, NEWEXP_INDEX_NAME)) {6518 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWEXP_INDEX_NAME);6519 psFree(rowSet);6520 return false;6521 }6522 4656 } 6523 4657 … … 6625 4759 if (!rowSet) { 6626 4760 return NULL; 6627 }6628 6629 // strip index column6630 for (i = 0; i < rowSet->n; i++) {6631 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, NEWEXP_INDEX_NAME)) {6632 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWEXP_INDEX_NAME);6633 psFree(rowSet);6634 return false;6635 }6636 4761 } 6637 4762 … … 6750 4875 6751 4876 md = psMetadataAlloc(); 6752 if (!psMetadataAdd(md, PS_LIST_TAIL, NEWIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {6753 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", NEWIMFILE_INDEX_NAME);6754 psFree(md);6755 return false;6756 }6757 4877 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 6758 4878 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 6835 4955 return deleted; 6836 4956 } 6837 bool newImfilePop(psDB *dbh, char **exp_tag, char **class, char **class_id, char **uri)6838 {6839 psArray *rowSet;6840 psMetadata *row;6841 psMetadata *popped;6842 long deleted;6843 bool status;6844 int rowID;6845 6846 rowSet = psDBSelectRows(dbh, NEWIMFILE_TABLE_NAME, NULL, 1);6847 if (!rowSet) {6848 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWIMFILE_INDEX_NAME);6849 psFree(rowSet);6850 return NULL;6851 }6852 6853 row = psArrayGet(rowSet, 0);6854 psMemIncrRefCounter(row);6855 if (!row) {6856 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");6857 return NULL;6858 }6859 psFree(rowSet);6860 6861 rowID = psMetadataLookupS32(&status, row, NEWIMFILE_INDEX_NAME);6862 if (!status) {6863 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", NEWIMFILE_INDEX_NAME);6864 psFree(row);6865 return NULL;6866 }6867 6868 popped = psMetadataAlloc();6869 psMetadataAddS32(popped, PS_LIST_TAIL, NEWIMFILE_INDEX_NAME, 0, NULL, rowID);6870 6871 deleted = psDBDeleteRows(dbh, NEWIMFILE_TABLE_NAME, popped, 0);6872 if (deleted != 1) {6873 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");6874 psFree(popped);6875 psFree(row);6876 return NULL;6877 }6878 6879 psFree(popped);6880 6881 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");6882 if (!status) {6883 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");6884 psFree(row);6885 return false;6886 }6887 *class = psMetadataLookupPtr(&status, row, "class");6888 if (!status) {6889 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");6890 psFree(row);6891 return false;6892 }6893 *class_id = psMetadataLookupPtr(&status, row, "class_id");6894 if (!status) {6895 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");6896 psFree(row);6897 return false;6898 }6899 *uri = psMetadataLookupPtr(&status, row, "uri");6900 if (!status) {6901 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");6902 psFree(row);6903 return false;6904 }6905 6906 psFree(row);6907 6908 return true;6909 }6910 6911 4957 bool newImfileInsertObject(psDB *dbh, newImfileRow *object) 6912 4958 { … … 6923 4969 6924 4970 return true; 6925 }6926 6927 newImfileRow *newImfilePopObject(psDB *dbh)6928 {6929 char exp_tag[256];6930 char class[256];6931 char class_id[256];6932 char uri[256];6933 6934 if (!newImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri)) {6935 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");6936 return NULL;6937 }6938 6939 return newImfileRowAlloc(exp_tag, class, class_id, uri);6940 4971 } 6941 4972 … … 6975 5006 } 6976 5007 6977 bool newImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)6978 {6979 char query[MAX_STRING_LENGTH];6980 6981 if (!newImfileSelectRowsFits(dbh, fits, NULL, limit)) {6982 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");6983 return false;6984 }6985 6986 // remove limit rows from the end of the database6987 if (snprintf(query, MAX_STRING_LENGTH,6988 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",6989 NEWIMFILE_TABLE_NAME, NEWIMFILE_INDEX_NAME, limit) < 0) {6990 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);6991 return false;6992 }6993 6994 if (!p_psDBRunQuery(dbh, query)) {6995 psError(PS_ERR_UNKNOWN, false, "database query failed");6996 return false;6997 }6998 6999 return true;7000 }7001 7002 5008 bool newImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 7003 5009 { 7004 5010 psArray *rowSet; 7005 psU64 i;7006 5011 7007 5012 rowSet = psDBSelectRows(dbh, NEWIMFILE_TABLE_NAME, where, limit); 7008 5013 if (!rowSet) { 7009 5014 return false; 7010 }7011 7012 // strip index column7013 for (i = 0; i < rowSet->n; i++) {7014 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, NEWIMFILE_INDEX_NAME)) {7015 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWIMFILE_INDEX_NAME);7016 psFree(rowSet);7017 return false;7018 }7019 5015 } 7020 5016 … … 7100 5096 if (!rowSet) { 7101 5097 return NULL; 7102 }7103 7104 // strip index column7105 for (i = 0; i < rowSet->n; i++) {7106 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, NEWIMFILE_INDEX_NAME)) {7107 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", NEWIMFILE_INDEX_NAME);7108 psFree(rowSet);7109 return false;7110 }7111 5098 } 7112 5099 … … 7241 5228 7242 5229 md = psMetadataAlloc(); 7243 if (!psMetadataAdd(md, PS_LIST_TAIL, RAWDETRENDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {7244 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWDETRENDEXP_INDEX_NAME);7245 psFree(md);7246 return false;7247 }7248 5230 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 7249 5231 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 7466 5448 return deleted; 7467 5449 } 7468 bool rawDetrendExpPop(psDB *dbh, char **exp_tag, char **camera, char **telescope, char **exp_type, psS32 *imfiles, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)7469 {7470 psArray *rowSet;7471 psMetadata *row;7472 psMetadata *popped;7473 long deleted;7474 bool status;7475 int rowID;7476 7477 rowSet = psDBSelectRows(dbh, RAWDETRENDEXP_TABLE_NAME, NULL, 1);7478 if (!rowSet) {7479 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWDETRENDEXP_INDEX_NAME);7480 psFree(rowSet);7481 return NULL;7482 }7483 7484 row = psArrayGet(rowSet, 0);7485 psMemIncrRefCounter(row);7486 if (!row) {7487 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");7488 return NULL;7489 }7490 psFree(rowSet);7491 7492 rowID = psMetadataLookupS32(&status, row, RAWDETRENDEXP_INDEX_NAME);7493 if (!status) {7494 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWDETRENDEXP_INDEX_NAME);7495 psFree(row);7496 return NULL;7497 }7498 7499 popped = psMetadataAlloc();7500 psMetadataAddS32(popped, PS_LIST_TAIL, RAWDETRENDEXP_INDEX_NAME, 0, NULL, rowID);7501 7502 deleted = psDBDeleteRows(dbh, RAWDETRENDEXP_TABLE_NAME, popped, 0);7503 if (deleted != 1) {7504 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");7505 psFree(popped);7506 psFree(row);7507 return NULL;7508 }7509 7510 psFree(popped);7511 7512 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");7513 if (!status) {7514 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");7515 psFree(row);7516 return false;7517 }7518 *camera = psMetadataLookupPtr(&status, row, "camera");7519 if (!status) {7520 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");7521 psFree(row);7522 return false;7523 }7524 *telescope = psMetadataLookupPtr(&status, row, "telescope");7525 if (!status) {7526 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");7527 psFree(row);7528 return false;7529 }7530 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");7531 if (!status) {7532 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");7533 psFree(row);7534 return false;7535 }7536 *imfiles = psMetadataLookupS32(&status, row, "imfiles");7537 if (!status) {7538 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");7539 psFree(row);7540 return false;7541 }7542 *filter = psMetadataLookupPtr(&status, row, "filter");7543 if (!status) {7544 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");7545 psFree(row);7546 return false;7547 }7548 *airmass = psMetadataLookupF32(&status, row, "airmass");7549 if (!status) {7550 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");7551 psFree(row);7552 return false;7553 }7554 *ra = psMetadataLookupF64(&status, row, "ra");7555 if (!status) {7556 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");7557 psFree(row);7558 return false;7559 }7560 *decl = psMetadataLookupF64(&status, row, "decl");7561 if (!status) {7562 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");7563 psFree(row);7564 return false;7565 }7566 *exp_time = psMetadataLookupF32(&status, row, "exp_time");7567 if (!status) {7568 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");7569 psFree(row);7570 return false;7571 }7572 *bg = psMetadataLookupF64(&status, row, "bg");7573 if (!status) {7574 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");7575 psFree(row);7576 return false;7577 }7578 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");7579 if (!status) {7580 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");7581 psFree(row);7582 return false;7583 }7584 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");7585 if (!status) {7586 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");7587 psFree(row);7588 return false;7589 }7590 *alt = psMetadataLookupF64(&status, row, "alt");7591 if (!status) {7592 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");7593 psFree(row);7594 return false;7595 }7596 *az = psMetadataLookupF64(&status, row, "az");7597 if (!status) {7598 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");7599 psFree(row);7600 return false;7601 }7602 *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");7603 if (!status) {7604 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");7605 psFree(row);7606 return false;7607 }7608 *posang = psMetadataLookupF64(&status, row, "posang");7609 if (!status) {7610 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");7611 psFree(row);7612 return false;7613 }7614 *object = psMetadataLookupPtr(&status, row, "object");7615 if (!status) {7616 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");7617 psFree(row);7618 return false;7619 }7620 7621 psFree(row);7622 7623 return true;7624 }7625 7626 5450 bool rawDetrendExpInsertObject(psDB *dbh, rawDetrendExpRow *object) 7627 5451 { … … 7638 5462 7639 5463 return true; 7640 }7641 7642 rawDetrendExpRow *rawDetrendExpPopObject(psDB *dbh)7643 {7644 char exp_tag[256];7645 char camera[256];7646 char telescope[256];7647 char exp_type[256];7648 psS32 imfiles;7649 char filter[256];7650 psF32 airmass;7651 psF64 ra;7652 psF64 decl;7653 psF32 exp_time;7654 psF64 bg;7655 psF64 bg_stdev;7656 psF64 bg_mean_stdev;7657 psF64 alt;7658 psF64 az;7659 psF32 ccd_temp;7660 psF64 posang;7661 char object[256];7662 7663 if (!rawDetrendExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {7664 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");7665 return NULL;7666 }7667 7668 return rawDetrendExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);7669 5464 } 7670 5465 … … 7704 5499 } 7705 5500 7706 bool rawDetrendExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)7707 {7708 char query[MAX_STRING_LENGTH];7709 7710 if (!rawDetrendExpSelectRowsFits(dbh, fits, NULL, limit)) {7711 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");7712 return false;7713 }7714 7715 // remove limit rows from the end of the database7716 if (snprintf(query, MAX_STRING_LENGTH,7717 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",7718 RAWDETRENDEXP_TABLE_NAME, RAWDETRENDEXP_INDEX_NAME, limit) < 0) {7719 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);7720 return false;7721 }7722 7723 if (!p_psDBRunQuery(dbh, query)) {7724 psError(PS_ERR_UNKNOWN, false, "database query failed");7725 return false;7726 }7727 7728 return true;7729 }7730 7731 5501 bool rawDetrendExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 7732 5502 { 7733 5503 psArray *rowSet; 7734 psU64 i;7735 5504 7736 5505 rowSet = psDBSelectRows(dbh, RAWDETRENDEXP_TABLE_NAME, where, limit); 7737 5506 if (!rowSet) { 7738 5507 return false; 7739 }7740 7741 // strip index column7742 for (i = 0; i < rowSet->n; i++) {7743 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWDETRENDEXP_INDEX_NAME)) {7744 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWDETRENDEXP_INDEX_NAME);7745 psFree(rowSet);7746 return false;7747 }7748 5508 } 7749 5509 … … 7985 5745 } 7986 5746 7987 // strip index column7988 for (i = 0; i < rowSet->n; i++) {7989 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWDETRENDEXP_INDEX_NAME)) {7990 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWDETRENDEXP_INDEX_NAME);7991 psFree(rowSet);7992 return false;7993 }7994 }7995 7996 5747 // convert psMetadata rows to row objects 7997 5748 … … 8124 5875 8125 5876 md = psMetadataAlloc(); 8126 if (!psMetadataAdd(md, PS_LIST_TAIL, RAWSCIENCEEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {8127 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWSCIENCEEXP_INDEX_NAME);8128 psFree(md);8129 return false;8130 }8131 5877 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 8132 5878 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 8349 6095 return deleted; 8350 6096 } 8351 bool rawScienceExpPop(psDB *dbh, char **exp_tag, char **camera, char **telescope, char **exp_type, psS32 *imfiles, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)8352 {8353 psArray *rowSet;8354 psMetadata *row;8355 psMetadata *popped;8356 long deleted;8357 bool status;8358 int rowID;8359 8360 rowSet = psDBSelectRows(dbh, RAWSCIENCEEXP_TABLE_NAME, NULL, 1);8361 if (!rowSet) {8362 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWSCIENCEEXP_INDEX_NAME);8363 psFree(rowSet);8364 return NULL;8365 }8366 8367 row = psArrayGet(rowSet, 0);8368 psMemIncrRefCounter(row);8369 if (!row) {8370 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");8371 return NULL;8372 }8373 psFree(rowSet);8374 8375 rowID = psMetadataLookupS32(&status, row, RAWSCIENCEEXP_INDEX_NAME);8376 if (!status) {8377 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWSCIENCEEXP_INDEX_NAME);8378 psFree(row);8379 return NULL;8380 }8381 8382 popped = psMetadataAlloc();8383 psMetadataAddS32(popped, PS_LIST_TAIL, RAWSCIENCEEXP_INDEX_NAME, 0, NULL, rowID);8384 8385 deleted = psDBDeleteRows(dbh, RAWSCIENCEEXP_TABLE_NAME, popped, 0);8386 if (deleted != 1) {8387 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");8388 psFree(popped);8389 psFree(row);8390 return NULL;8391 }8392 8393 psFree(popped);8394 8395 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");8396 if (!status) {8397 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");8398 psFree(row);8399 return false;8400 }8401 *camera = psMetadataLookupPtr(&status, row, "camera");8402 if (!status) {8403 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item camera");8404 psFree(row);8405 return false;8406 }8407 *telescope = psMetadataLookupPtr(&status, row, "telescope");8408 if (!status) {8409 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item telescope");8410 psFree(row);8411 return false;8412 }8413 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");8414 if (!status) {8415 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");8416 psFree(row);8417 return false;8418 }8419 *imfiles = psMetadataLookupS32(&status, row, "imfiles");8420 if (!status) {8421 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item imfiles");8422 psFree(row);8423 return false;8424 }8425 *filter = psMetadataLookupPtr(&status, row, "filter");8426 if (!status) {8427 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");8428 psFree(row);8429 return false;8430 }8431 *airmass = psMetadataLookupF32(&status, row, "airmass");8432 if (!status) {8433 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");8434 psFree(row);8435 return false;8436 }8437 *ra = psMetadataLookupF64(&status, row, "ra");8438 if (!status) {8439 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");8440 psFree(row);8441 return false;8442 }8443 *decl = psMetadataLookupF64(&status, row, "decl");8444 if (!status) {8445 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");8446 psFree(row);8447 return false;8448 }8449 *exp_time = psMetadataLookupF32(&status, row, "exp_time");8450 if (!status) {8451 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");8452 psFree(row);8453 return false;8454 }8455 *bg = psMetadataLookupF64(&status, row, "bg");8456 if (!status) {8457 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");8458 psFree(row);8459 return false;8460 }8461 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");8462 if (!status) {8463 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");8464 psFree(row);8465 return false;8466 }8467 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");8468 if (!status) {8469 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");8470 psFree(row);8471 return false;8472 }8473 *alt = psMetadataLookupF64(&status, row, "alt");8474 if (!status) {8475 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");8476 psFree(row);8477 return false;8478 }8479 *az = psMetadataLookupF64(&status, row, "az");8480 if (!status) {8481 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");8482 psFree(row);8483 return false;8484 }8485 *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");8486 if (!status) {8487 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");8488 psFree(row);8489 return false;8490 }8491 *posang = psMetadataLookupF64(&status, row, "posang");8492 if (!status) {8493 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");8494 psFree(row);8495 return false;8496 }8497 *object = psMetadataLookupPtr(&status, row, "object");8498 if (!status) {8499 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");8500 psFree(row);8501 return false;8502 }8503 8504 psFree(row);8505 8506 return true;8507 }8508 8509 6097 bool rawScienceExpInsertObject(psDB *dbh, rawScienceExpRow *object) 8510 6098 { … … 8521 6109 8522 6110 return true; 8523 }8524 8525 rawScienceExpRow *rawScienceExpPopObject(psDB *dbh)8526 {8527 char exp_tag[256];8528 char camera[256];8529 char telescope[256];8530 char exp_type[256];8531 psS32 imfiles;8532 char filter[256];8533 psF32 airmass;8534 psF64 ra;8535 psF64 decl;8536 psF32 exp_time;8537 psF64 bg;8538 psF64 bg_stdev;8539 psF64 bg_mean_stdev;8540 psF64 alt;8541 psF64 az;8542 psF32 ccd_temp;8543 psF64 posang;8544 char object[256];8545 8546 if (!rawScienceExpPop(dbh, (char **)&exp_tag, (char **)&camera, (char **)&telescope, (char **)&exp_type, &imfiles, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {8547 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");8548 return NULL;8549 }8550 8551 return rawScienceExpRowAlloc(exp_tag, camera, telescope, exp_type, imfiles, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);8552 6111 } 8553 6112 … … 8587 6146 } 8588 6147 8589 bool rawScienceExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)8590 {8591 char query[MAX_STRING_LENGTH];8592 8593 if (!rawScienceExpSelectRowsFits(dbh, fits, NULL, limit)) {8594 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");8595 return false;8596 }8597 8598 // remove limit rows from the end of the database8599 if (snprintf(query, MAX_STRING_LENGTH,8600 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",8601 RAWSCIENCEEXP_TABLE_NAME, RAWSCIENCEEXP_INDEX_NAME, limit) < 0) {8602 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);8603 return false;8604 }8605 8606 if (!p_psDBRunQuery(dbh, query)) {8607 psError(PS_ERR_UNKNOWN, false, "database query failed");8608 return false;8609 }8610 8611 return true;8612 }8613 8614 6148 bool rawScienceExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 8615 6149 { 8616 6150 psArray *rowSet; 8617 psU64 i;8618 6151 8619 6152 rowSet = psDBSelectRows(dbh, RAWSCIENCEEXP_TABLE_NAME, where, limit); 8620 6153 if (!rowSet) { 8621 6154 return false; 8622 }8623 8624 // strip index column8625 for (i = 0; i < rowSet->n; i++) {8626 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWSCIENCEEXP_INDEX_NAME)) {8627 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWSCIENCEEXP_INDEX_NAME);8628 psFree(rowSet);8629 return false;8630 }8631 6155 } 8632 6156 … … 8868 6392 } 8869 6393 8870 // strip index column8871 for (i = 0; i < rowSet->n; i++) {8872 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWSCIENCEEXP_INDEX_NAME)) {8873 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWSCIENCEEXP_INDEX_NAME);8874 psFree(rowSet);8875 return false;8876 }8877 }8878 8879 6394 // convert psMetadata rows to row objects 8880 6395 … … 9008 6523 9009 6524 md = psMetadataAlloc(); 9010 if (!psMetadataAdd(md, PS_LIST_TAIL, RAWIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {9011 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", RAWIMFILE_INDEX_NAME);9012 psFree(md);9013 return false;9014 }9015 6525 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 9016 6526 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 9233 6743 return deleted; 9234 6744 } 9235 bool rawImfilePop(psDB *dbh, char **exp_tag, char **class, char **class_id, char **uri, char **exp_type, char **filter, psF32 *airmass, psF64 *ra, psF64 *decl, psF32 *exp_time, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF64 *alt, psF64 *az, psF32 *ccd_temp, psF64 *posang, char **object)9236 {9237 psArray *rowSet;9238 psMetadata *row;9239 psMetadata *popped;9240 long deleted;9241 bool status;9242 int rowID;9243 9244 rowSet = psDBSelectRows(dbh, RAWIMFILE_TABLE_NAME, NULL, 1);9245 if (!rowSet) {9246 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWIMFILE_INDEX_NAME);9247 psFree(rowSet);9248 return NULL;9249 }9250 9251 row = psArrayGet(rowSet, 0);9252 psMemIncrRefCounter(row);9253 if (!row) {9254 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");9255 return NULL;9256 }9257 psFree(rowSet);9258 9259 rowID = psMetadataLookupS32(&status, row, RAWIMFILE_INDEX_NAME);9260 if (!status) {9261 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", RAWIMFILE_INDEX_NAME);9262 psFree(row);9263 return NULL;9264 }9265 9266 popped = psMetadataAlloc();9267 psMetadataAddS32(popped, PS_LIST_TAIL, RAWIMFILE_INDEX_NAME, 0, NULL, rowID);9268 9269 deleted = psDBDeleteRows(dbh, RAWIMFILE_TABLE_NAME, popped, 0);9270 if (deleted != 1) {9271 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");9272 psFree(popped);9273 psFree(row);9274 return NULL;9275 }9276 9277 psFree(popped);9278 9279 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");9280 if (!status) {9281 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");9282 psFree(row);9283 return false;9284 }9285 *class = psMetadataLookupPtr(&status, row, "class");9286 if (!status) {9287 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class");9288 psFree(row);9289 return false;9290 }9291 *class_id = psMetadataLookupPtr(&status, row, "class_id");9292 if (!status) {9293 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");9294 psFree(row);9295 return false;9296 }9297 *uri = psMetadataLookupPtr(&status, row, "uri");9298 if (!status) {9299 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");9300 psFree(row);9301 return false;9302 }9303 *exp_type = psMetadataLookupPtr(&status, row, "exp_type");9304 if (!status) {9305 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_type");9306 psFree(row);9307 return false;9308 }9309 *filter = psMetadataLookupPtr(&status, row, "filter");9310 if (!status) {9311 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item filter");9312 psFree(row);9313 return false;9314 }9315 *airmass = psMetadataLookupF32(&status, row, "airmass");9316 if (!status) {9317 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item airmass");9318 psFree(row);9319 return false;9320 }9321 *ra = psMetadataLookupF64(&status, row, "ra");9322 if (!status) {9323 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ra");9324 psFree(row);9325 return false;9326 }9327 *decl = psMetadataLookupF64(&status, row, "decl");9328 if (!status) {9329 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item decl");9330 psFree(row);9331 return false;9332 }9333 *exp_time = psMetadataLookupF32(&status, row, "exp_time");9334 if (!status) {9335 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_time");9336 psFree(row);9337 return false;9338 }9339 *bg = psMetadataLookupF64(&status, row, "bg");9340 if (!status) {9341 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");9342 psFree(row);9343 return false;9344 }9345 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");9346 if (!status) {9347 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");9348 psFree(row);9349 return false;9350 }9351 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");9352 if (!status) {9353 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");9354 psFree(row);9355 return false;9356 }9357 *alt = psMetadataLookupF64(&status, row, "alt");9358 if (!status) {9359 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item alt");9360 psFree(row);9361 return false;9362 }9363 *az = psMetadataLookupF64(&status, row, "az");9364 if (!status) {9365 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item az");9366 psFree(row);9367 return false;9368 }9369 *ccd_temp = psMetadataLookupF32(&status, row, "ccd_temp");9370 if (!status) {9371 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item ccd_temp");9372 psFree(row);9373 return false;9374 }9375 *posang = psMetadataLookupF64(&status, row, "posang");9376 if (!status) {9377 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item posang");9378 psFree(row);9379 return false;9380 }9381 *object = psMetadataLookupPtr(&status, row, "object");9382 if (!status) {9383 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item object");9384 psFree(row);9385 return false;9386 }9387 9388 psFree(row);9389 9390 return true;9391 }9392 9393 6745 bool rawImfileInsertObject(psDB *dbh, rawImfileRow *object) 9394 6746 { … … 9405 6757 9406 6758 return true; 9407 }9408 9409 rawImfileRow *rawImfilePopObject(psDB *dbh)9410 {9411 char exp_tag[256];9412 char class[256];9413 char class_id[256];9414 char uri[256];9415 char exp_type[256];9416 char filter[256];9417 psF32 airmass;9418 psF64 ra;9419 psF64 decl;9420 psF32 exp_time;9421 psF64 bg;9422 psF64 bg_stdev;9423 psF64 bg_mean_stdev;9424 psF64 alt;9425 psF64 az;9426 psF32 ccd_temp;9427 psF64 posang;9428 char object[256];9429 9430 if (!rawImfilePop(dbh, (char **)&exp_tag, (char **)&class, (char **)&class_id, (char **)&uri, (char **)&exp_type, (char **)&filter, &airmass, &ra, &decl, &exp_time, &bg, &bg_stdev, &bg_mean_stdev, &alt, &az, &ccd_temp, &posang, (char **)&object)) {9431 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");9432 return NULL;9433 }9434 9435 return rawImfileRowAlloc(exp_tag, class, class_id, uri, exp_type, filter, airmass, ra, decl, exp_time, bg, bg_stdev, bg_mean_stdev, alt, az, ccd_temp, posang, object);9436 6759 } 9437 6760 … … 9471 6794 } 9472 6795 9473 bool rawImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)9474 {9475 char query[MAX_STRING_LENGTH];9476 9477 if (!rawImfileSelectRowsFits(dbh, fits, NULL, limit)) {9478 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");9479 return false;9480 }9481 9482 // remove limit rows from the end of the database9483 if (snprintf(query, MAX_STRING_LENGTH,9484 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",9485 RAWIMFILE_TABLE_NAME, RAWIMFILE_INDEX_NAME, limit) < 0) {9486 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);9487 return false;9488 }9489 9490 if (!p_psDBRunQuery(dbh, query)) {9491 psError(PS_ERR_UNKNOWN, false, "database query failed");9492 return false;9493 }9494 9495 return true;9496 }9497 9498 6796 bool rawImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 9499 6797 { 9500 6798 psArray *rowSet; 9501 psU64 i;9502 6799 9503 6800 rowSet = psDBSelectRows(dbh, RAWIMFILE_TABLE_NAME, where, limit); 9504 6801 if (!rowSet) { 9505 6802 return false; 9506 }9507 9508 // strip index column9509 for (i = 0; i < rowSet->n; i++) {9510 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, RAWIMFILE_INDEX_NAME)) {9511 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWIMFILE_INDEX_NAME);9512 psFree(rowSet);9513 return false;9514 }9515 6803 } 9516 6804 … … 9752 7040 } 9753 7041 9754 // strip index column9755 for (i = 0; i < rowSet->n; i++) {9756 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, RAWIMFILE_INDEX_NAME)) {9757 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", RAWIMFILE_INDEX_NAME);9758 psFree(rowSet);9759 return false;9760 }9761 }9762 9763 7042 // convert psMetadata rows to row objects 9764 7043 … … 9872 7151 9873 7152 md = psMetadataAlloc(); 9874 if (!psMetadataAdd(md, PS_LIST_TAIL, P1PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {9875 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P1PENDINGEXP_INDEX_NAME);9876 psFree(md);9877 return false;9878 }9879 7153 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 9880 7154 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 9947 7221 return deleted; 9948 7222 } 9949 bool p1PendingExpPop(psDB *dbh, char **exp_tag, char **recipe, psS32 *p1_version)9950 {9951 psArray *rowSet;9952 psMetadata *row;9953 psMetadata *popped;9954 long deleted;9955 bool status;9956 int rowID;9957 9958 rowSet = psDBSelectRows(dbh, P1PENDINGEXP_TABLE_NAME, NULL, 1);9959 if (!rowSet) {9960 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P1PENDINGEXP_INDEX_NAME);9961 psFree(rowSet);9962 return NULL;9963 }9964 9965 row = psArrayGet(rowSet, 0);9966 psMemIncrRefCounter(row);9967 if (!row) {9968 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");9969 return NULL;9970 }9971 psFree(rowSet);9972 9973 rowID = psMetadataLookupS32(&status, row, P1PENDINGEXP_INDEX_NAME);9974 if (!status) {9975 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P1PENDINGEXP_INDEX_NAME);9976 psFree(row);9977 return NULL;9978 }9979 9980 popped = psMetadataAlloc();9981 psMetadataAddS32(popped, PS_LIST_TAIL, P1PENDINGEXP_INDEX_NAME, 0, NULL, rowID);9982 9983 deleted = psDBDeleteRows(dbh, P1PENDINGEXP_TABLE_NAME, popped, 0);9984 if (deleted != 1) {9985 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");9986 psFree(popped);9987 psFree(row);9988 return NULL;9989 }9990 9991 psFree(popped);9992 9993 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");9994 if (!status) {9995 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");9996 psFree(row);9997 return false;9998 }9999 *recipe = psMetadataLookupPtr(&status, row, "recipe");10000 if (!status) {10001 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");10002 psFree(row);10003 return false;10004 }10005 *p1_version = psMetadataLookupS32(&status, row, "p1_version");10006 if (!status) {10007 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");10008 psFree(row);10009 return false;10010 }10011 10012 psFree(row);10013 10014 return true;10015 }10016 10017 7223 bool p1PendingExpInsertObject(psDB *dbh, p1PendingExpRow *object) 10018 7224 { … … 10029 7235 10030 7236 return true; 10031 }10032 10033 p1PendingExpRow *p1PendingExpPopObject(psDB *dbh)10034 {10035 char exp_tag[256];10036 char recipe[256];10037 psS32 p1_version;10038 10039 if (!p1PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version)) {10040 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");10041 return NULL;10042 }10043 10044 return p1PendingExpRowAlloc(exp_tag, recipe, p1_version);10045 7237 } 10046 7238 … … 10080 7272 } 10081 7273 10082 bool p1PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)10083 {10084 char query[MAX_STRING_LENGTH];10085 10086 if (!p1PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {10087 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");10088 return false;10089 }10090 10091 // remove limit rows from the end of the database10092 if (snprintf(query, MAX_STRING_LENGTH,10093 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",10094 P1PENDINGEXP_TABLE_NAME, P1PENDINGEXP_INDEX_NAME, limit) < 0) {10095 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);10096 return false;10097 }10098 10099 if (!p_psDBRunQuery(dbh, query)) {10100 psError(PS_ERR_UNKNOWN, false, "database query failed");10101 return false;10102 }10103 10104 return true;10105 }10106 10107 7274 bool p1PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 10108 7275 { 10109 7276 psArray *rowSet; 10110 psU64 i;10111 7277 10112 7278 rowSet = psDBSelectRows(dbh, P1PENDINGEXP_TABLE_NAME, where, limit); 10113 7279 if (!rowSet) { 10114 7280 return false; 10115 }10116 10117 // strip index column10118 for (i = 0; i < rowSet->n; i++) {10119 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P1PENDINGEXP_INDEX_NAME)) {10120 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P1PENDINGEXP_INDEX_NAME);10121 psFree(rowSet);10122 return false;10123 }10124 7281 } 10125 7282 … … 10194 7351 if (!rowSet) { 10195 7352 return NULL; 10196 }10197 10198 // strip index column10199 for (i = 0; i < rowSet->n; i++) {10200 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P1PENDINGEXP_INDEX_NAME)) {10201 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P1PENDINGEXP_INDEX_NAME);10202 psFree(rowSet);10203 return false;10204 }10205 7353 } 10206 7354 … … 10317 7465 10318 7466 md = psMetadataAlloc(); 10319 if (!psMetadataAdd(md, PS_LIST_TAIL, P2PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {10320 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PENDINGEXP_INDEX_NAME);10321 psFree(md);10322 return false;10323 }10324 7467 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 10325 7468 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 10402 7545 return deleted; 10403 7546 } 10404 bool p2PendingExpPop(psDB *dbh, char **exp_tag, char **recipe, psS32 *p1_version, psS32 *p2_version)10405 {10406 psArray *rowSet;10407 psMetadata *row;10408 psMetadata *popped;10409 long deleted;10410 bool status;10411 int rowID;10412 10413 rowSet = psDBSelectRows(dbh, P2PENDINGEXP_TABLE_NAME, NULL, 1);10414 if (!rowSet) {10415 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGEXP_INDEX_NAME);10416 psFree(rowSet);10417 return NULL;10418 }10419 10420 row = psArrayGet(rowSet, 0);10421 psMemIncrRefCounter(row);10422 if (!row) {10423 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");10424 return NULL;10425 }10426 psFree(rowSet);10427 10428 rowID = psMetadataLookupS32(&status, row, P2PENDINGEXP_INDEX_NAME);10429 if (!status) {10430 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGEXP_INDEX_NAME);10431 psFree(row);10432 return NULL;10433 }10434 10435 popped = psMetadataAlloc();10436 psMetadataAddS32(popped, PS_LIST_TAIL, P2PENDINGEXP_INDEX_NAME, 0, NULL, rowID);10437 10438 deleted = psDBDeleteRows(dbh, P2PENDINGEXP_TABLE_NAME, popped, 0);10439 if (deleted != 1) {10440 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");10441 psFree(popped);10442 psFree(row);10443 return NULL;10444 }10445 10446 psFree(popped);10447 10448 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");10449 if (!status) {10450 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");10451 psFree(row);10452 return false;10453 }10454 *recipe = psMetadataLookupPtr(&status, row, "recipe");10455 if (!status) {10456 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");10457 psFree(row);10458 return false;10459 }10460 *p1_version = psMetadataLookupS32(&status, row, "p1_version");10461 if (!status) {10462 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");10463 psFree(row);10464 return false;10465 }10466 *p2_version = psMetadataLookupS32(&status, row, "p2_version");10467 if (!status) {10468 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");10469 psFree(row);10470 return false;10471 }10472 10473 psFree(row);10474 10475 return true;10476 }10477 10478 7547 bool p2PendingExpInsertObject(psDB *dbh, p2PendingExpRow *object) 10479 7548 { … … 10490 7559 10491 7560 return true; 10492 }10493 10494 p2PendingExpRow *p2PendingExpPopObject(psDB *dbh)10495 {10496 char exp_tag[256];10497 char recipe[256];10498 psS32 p1_version;10499 psS32 p2_version;10500 10501 if (!p2PendingExpPop(dbh, (char **)&exp_tag, (char **)&recipe, &p1_version, &p2_version)) {10502 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");10503 return NULL;10504 }10505 10506 return p2PendingExpRowAlloc(exp_tag, recipe, p1_version, p2_version);10507 7561 } 10508 7562 … … 10542 7596 } 10543 7597 10544 bool p2PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)10545 {10546 char query[MAX_STRING_LENGTH];10547 10548 if (!p2PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {10549 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");10550 return false;10551 }10552 10553 // remove limit rows from the end of the database10554 if (snprintf(query, MAX_STRING_LENGTH,10555 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",10556 P2PENDINGEXP_TABLE_NAME, P2PENDINGEXP_INDEX_NAME, limit) < 0) {10557 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);10558 return false;10559 }10560 10561 if (!p_psDBRunQuery(dbh, query)) {10562 psError(PS_ERR_UNKNOWN, false, "database query failed");10563 return false;10564 }10565 10566 return true;10567 }10568 10569 7598 bool p2PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 10570 7599 { 10571 7600 psArray *rowSet; 10572 psU64 i;10573 7601 10574 7602 rowSet = psDBSelectRows(dbh, P2PENDINGEXP_TABLE_NAME, where, limit); 10575 7603 if (!rowSet) { 10576 7604 return false; 10577 }10578 10579 // strip index column10580 for (i = 0; i < rowSet->n; i++) {10581 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PENDINGEXP_INDEX_NAME)) {10582 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGEXP_INDEX_NAME);10583 psFree(rowSet);10584 return false;10585 }10586 7605 } 10587 7606 … … 10667 7686 if (!rowSet) { 10668 7687 return NULL; 10669 }10670 10671 // strip index column10672 for (i = 0; i < rowSet->n; i++) {10673 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PENDINGEXP_INDEX_NAME)) {10674 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGEXP_INDEX_NAME);10675 psFree(rowSet);10676 return false;10677 }10678 7688 } 10679 7689 … … 10794 7804 10795 7805 md = psMetadataAlloc(); 10796 if (!psMetadataAdd(md, PS_LIST_TAIL, P2PENDINGIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {10797 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PENDINGIMFILE_INDEX_NAME);10798 psFree(md);10799 return false;10800 }10801 7806 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 10802 7807 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 10899 7904 return deleted; 10900 7905 } 10901 bool p2PendingImfilePop(psDB *dbh, char **exp_tag, char **class_id, char **uri, char **recipe, psS32 *p1_version, psS32 *p2_version)10902 {10903 psArray *rowSet;10904 psMetadata *row;10905 psMetadata *popped;10906 long deleted;10907 bool status;10908 int rowID;10909 10910 rowSet = psDBSelectRows(dbh, P2PENDINGIMFILE_TABLE_NAME, NULL, 1);10911 if (!rowSet) {10912 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGIMFILE_INDEX_NAME);10913 psFree(rowSet);10914 return NULL;10915 }10916 10917 row = psArrayGet(rowSet, 0);10918 psMemIncrRefCounter(row);10919 if (!row) {10920 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");10921 return NULL;10922 }10923 psFree(rowSet);10924 10925 rowID = psMetadataLookupS32(&status, row, P2PENDINGIMFILE_INDEX_NAME);10926 if (!status) {10927 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PENDINGIMFILE_INDEX_NAME);10928 psFree(row);10929 return NULL;10930 }10931 10932 popped = psMetadataAlloc();10933 psMetadataAddS32(popped, PS_LIST_TAIL, P2PENDINGIMFILE_INDEX_NAME, 0, NULL, rowID);10934 10935 deleted = psDBDeleteRows(dbh, P2PENDINGIMFILE_TABLE_NAME, popped, 0);10936 if (deleted != 1) {10937 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");10938 psFree(popped);10939 psFree(row);10940 return NULL;10941 }10942 10943 psFree(popped);10944 10945 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");10946 if (!status) {10947 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");10948 psFree(row);10949 return false;10950 }10951 *class_id = psMetadataLookupPtr(&status, row, "class_id");10952 if (!status) {10953 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");10954 psFree(row);10955 return false;10956 }10957 *uri = psMetadataLookupPtr(&status, row, "uri");10958 if (!status) {10959 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");10960 psFree(row);10961 return false;10962 }10963 *recipe = psMetadataLookupPtr(&status, row, "recipe");10964 if (!status) {10965 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");10966 psFree(row);10967 return false;10968 }10969 *p1_version = psMetadataLookupS32(&status, row, "p1_version");10970 if (!status) {10971 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");10972 psFree(row);10973 return false;10974 }10975 *p2_version = psMetadataLookupS32(&status, row, "p2_version");10976 if (!status) {10977 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");10978 psFree(row);10979 return false;10980 }10981 10982 psFree(row);10983 10984 return true;10985 }10986 10987 7906 bool p2PendingImfileInsertObject(psDB *dbh, p2PendingImfileRow *object) 10988 7907 { … … 10999 7918 11000 7919 return true; 11001 }11002 11003 p2PendingImfileRow *p2PendingImfilePopObject(psDB *dbh)11004 {11005 char exp_tag[256];11006 char class_id[256];11007 char uri[256];11008 char recipe[256];11009 psS32 p1_version;11010 psS32 p2_version;11011 11012 if (!p2PendingImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &p1_version, &p2_version)) {11013 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");11014 return NULL;11015 }11016 11017 return p2PendingImfileRowAlloc(exp_tag, class_id, uri, recipe, p1_version, p2_version);11018 7920 } 11019 7921 … … 11053 7955 } 11054 7956 11055 bool p2PendingImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)11056 {11057 char query[MAX_STRING_LENGTH];11058 11059 if (!p2PendingImfileSelectRowsFits(dbh, fits, NULL, limit)) {11060 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");11061 return false;11062 }11063 11064 // remove limit rows from the end of the database11065 if (snprintf(query, MAX_STRING_LENGTH,11066 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",11067 P2PENDINGIMFILE_TABLE_NAME, P2PENDINGIMFILE_INDEX_NAME, limit) < 0) {11068 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);11069 return false;11070 }11071 11072 if (!p_psDBRunQuery(dbh, query)) {11073 psError(PS_ERR_UNKNOWN, false, "database query failed");11074 return false;11075 }11076 11077 return true;11078 }11079 11080 7957 bool p2PendingImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 11081 7958 { 11082 7959 psArray *rowSet; 11083 psU64 i;11084 7960 11085 7961 rowSet = psDBSelectRows(dbh, P2PENDINGIMFILE_TABLE_NAME, where, limit); 11086 7962 if (!rowSet) { 11087 7963 return false; 11088 }11089 11090 // strip index column11091 for (i = 0; i < rowSet->n; i++) {11092 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PENDINGIMFILE_INDEX_NAME)) {11093 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGIMFILE_INDEX_NAME);11094 psFree(rowSet);11095 return false;11096 }11097 7964 } 11098 7965 … … 11200 8067 if (!rowSet) { 11201 8068 return NULL; 11202 }11203 11204 // strip index column11205 for (i = 0; i < rowSet->n; i++) {11206 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PENDINGIMFILE_INDEX_NAME)) {11207 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PENDINGIMFILE_INDEX_NAME);11208 psFree(rowSet);11209 return false;11210 }11211 8069 } 11212 8070 … … 11321 8179 11322 8180 md = psMetadataAlloc(); 11323 if (!psMetadataAdd(md, PS_LIST_TAIL, P2PROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {11324 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PROCESSEDEXP_INDEX_NAME);11325 psFree(md);11326 return false;11327 }11328 8181 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 11329 8182 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 11396 8249 return deleted; 11397 8250 } 11398 bool p2ProcessedExpPop(psDB *dbh, char **exp_tag, psS32 *p1_version, psS32 *p2_version)11399 {11400 psArray *rowSet;11401 psMetadata *row;11402 psMetadata *popped;11403 long deleted;11404 bool status;11405 int rowID;11406 11407 rowSet = psDBSelectRows(dbh, P2PROCESSEDEXP_TABLE_NAME, NULL, 1);11408 if (!rowSet) {11409 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDEXP_INDEX_NAME);11410 psFree(rowSet);11411 return NULL;11412 }11413 11414 row = psArrayGet(rowSet, 0);11415 psMemIncrRefCounter(row);11416 if (!row) {11417 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");11418 return NULL;11419 }11420 psFree(rowSet);11421 11422 rowID = psMetadataLookupS32(&status, row, P2PROCESSEDEXP_INDEX_NAME);11423 if (!status) {11424 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDEXP_INDEX_NAME);11425 psFree(row);11426 return NULL;11427 }11428 11429 popped = psMetadataAlloc();11430 psMetadataAddS32(popped, PS_LIST_TAIL, P2PROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);11431 11432 deleted = psDBDeleteRows(dbh, P2PROCESSEDEXP_TABLE_NAME, popped, 0);11433 if (deleted != 1) {11434 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");11435 psFree(popped);11436 psFree(row);11437 return NULL;11438 }11439 11440 psFree(popped);11441 11442 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");11443 if (!status) {11444 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");11445 psFree(row);11446 return false;11447 }11448 *p1_version = psMetadataLookupS32(&status, row, "p1_version");11449 if (!status) {11450 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");11451 psFree(row);11452 return false;11453 }11454 *p2_version = psMetadataLookupS32(&status, row, "p2_version");11455 if (!status) {11456 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");11457 psFree(row);11458 return false;11459 }11460 11461 psFree(row);11462 11463 return true;11464 }11465 11466 8251 bool p2ProcessedExpInsertObject(psDB *dbh, p2ProcessedExpRow *object) 11467 8252 { … … 11478 8263 11479 8264 return true; 11480 }11481 11482 p2ProcessedExpRow *p2ProcessedExpPopObject(psDB *dbh)11483 {11484 char exp_tag[256];11485 psS32 p1_version;11486 psS32 p2_version;11487 11488 if (!p2ProcessedExpPop(dbh, (char **)&exp_tag, &p1_version, &p2_version)) {11489 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");11490 return NULL;11491 }11492 11493 return p2ProcessedExpRowAlloc(exp_tag, p1_version, p2_version);11494 8265 } 11495 8266 … … 11529 8300 } 11530 8301 11531 bool p2ProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)11532 {11533 char query[MAX_STRING_LENGTH];11534 11535 if (!p2ProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {11536 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");11537 return false;11538 }11539 11540 // remove limit rows from the end of the database11541 if (snprintf(query, MAX_STRING_LENGTH,11542 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",11543 P2PROCESSEDEXP_TABLE_NAME, P2PROCESSEDEXP_INDEX_NAME, limit) < 0) {11544 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);11545 return false;11546 }11547 11548 if (!p_psDBRunQuery(dbh, query)) {11549 psError(PS_ERR_UNKNOWN, false, "database query failed");11550 return false;11551 }11552 11553 return true;11554 }11555 11556 8302 bool p2ProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 11557 8303 { 11558 8304 psArray *rowSet; 11559 psU64 i;11560 8305 11561 8306 rowSet = psDBSelectRows(dbh, P2PROCESSEDEXP_TABLE_NAME, where, limit); 11562 8307 if (!rowSet) { 11563 8308 return false; 11564 }11565 11566 // strip index column11567 for (i = 0; i < rowSet->n; i++) {11568 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PROCESSEDEXP_INDEX_NAME)) {11569 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDEXP_INDEX_NAME);11570 psFree(rowSet);11571 return false;11572 }11573 8309 } 11574 8310 … … 11643 8379 if (!rowSet) { 11644 8380 return NULL; 11645 }11646 11647 // strip index column11648 for (i = 0; i < rowSet->n; i++) {11649 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PROCESSEDEXP_INDEX_NAME)) {11650 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDEXP_INDEX_NAME);11651 psFree(rowSet);11652 return false;11653 }11654 8381 } 11655 8382 … … 11777 8504 11778 8505 md = psMetadataAlloc(); 11779 if (!psMetadataAdd(md, PS_LIST_TAIL, P2PROCESSEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {11780 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P2PROCESSEDIMFILE_INDEX_NAME);11781 psFree(md);11782 return false;11783 }11784 8506 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 11785 8507 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 11932 8654 return deleted; 11933 8655 } 11934 bool p2ProcessedImfilePop(psDB *dbh, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, psS32 *p1_version, psS32 *p2_version)11935 {11936 psArray *rowSet;11937 psMetadata *row;11938 psMetadata *popped;11939 long deleted;11940 bool status;11941 int rowID;11942 11943 rowSet = psDBSelectRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, NULL, 1);11944 if (!rowSet) {11945 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDIMFILE_INDEX_NAME);11946 psFree(rowSet);11947 return NULL;11948 }11949 11950 row = psArrayGet(rowSet, 0);11951 psMemIncrRefCounter(row);11952 if (!row) {11953 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");11954 return NULL;11955 }11956 psFree(rowSet);11957 11958 rowID = psMetadataLookupS32(&status, row, P2PROCESSEDIMFILE_INDEX_NAME);11959 if (!status) {11960 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P2PROCESSEDIMFILE_INDEX_NAME);11961 psFree(row);11962 return NULL;11963 }11964 11965 popped = psMetadataAlloc();11966 psMetadataAddS32(popped, PS_LIST_TAIL, P2PROCESSEDIMFILE_INDEX_NAME, 0, NULL, rowID);11967 11968 deleted = psDBDeleteRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, popped, 0);11969 if (deleted != 1) {11970 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");11971 psFree(popped);11972 psFree(row);11973 return NULL;11974 }11975 11976 psFree(popped);11977 11978 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");11979 if (!status) {11980 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");11981 psFree(row);11982 return false;11983 }11984 *class_id = psMetadataLookupPtr(&status, row, "class_id");11985 if (!status) {11986 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");11987 psFree(row);11988 return false;11989 }11990 *uri = psMetadataLookupPtr(&status, row, "uri");11991 if (!status) {11992 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");11993 psFree(row);11994 return false;11995 }11996 *recipe = psMetadataLookupPtr(&status, row, "recipe");11997 if (!status) {11998 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");11999 psFree(row);12000 return false;12001 }12002 *bg = psMetadataLookupF64(&status, row, "bg");12003 if (!status) {12004 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");12005 psFree(row);12006 return false;12007 }12008 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");12009 if (!status) {12010 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");12011 psFree(row);12012 return false;12013 }12014 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");12015 if (!status) {12016 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");12017 psFree(row);12018 return false;12019 }12020 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");12021 if (!status) {12022 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");12023 psFree(row);12024 return false;12025 }12026 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");12027 if (!status) {12028 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");12029 psFree(row);12030 return false;12031 }12032 *p1_version = psMetadataLookupS32(&status, row, "p1_version");12033 if (!status) {12034 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p1_version");12035 psFree(row);12036 return false;12037 }12038 *p2_version = psMetadataLookupS32(&status, row, "p2_version");12039 if (!status) {12040 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");12041 psFree(row);12042 return false;12043 }12044 12045 psFree(row);12046 12047 return true;12048 }12049 12050 8656 bool p2ProcessedImfileInsertObject(psDB *dbh, p2ProcessedImfileRow *object) 12051 8657 { … … 12062 8668 12063 8669 return true; 12064 }12065 12066 p2ProcessedImfileRow *p2ProcessedImfilePopObject(psDB *dbh)12067 {12068 char exp_tag[256];12069 char class_id[256];12070 char uri[256];12071 char recipe[256];12072 psF64 bg;12073 psF64 bg_stdev;12074 psF64 bg_mean_stdev;12075 char b1_uri[256];12076 char b2_uri[256];12077 psS32 p1_version;12078 psS32 p2_version;12079 12080 if (!p2ProcessedImfilePop(dbh, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &p1_version, &p2_version)) {12081 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");12082 return NULL;12083 }12084 12085 return p2ProcessedImfileRowAlloc(exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, p1_version, p2_version);12086 8670 } 12087 8671 … … 12121 8705 } 12122 8706 12123 bool p2ProcessedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)12124 {12125 char query[MAX_STRING_LENGTH];12126 12127 if (!p2ProcessedImfileSelectRowsFits(dbh, fits, NULL, limit)) {12128 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");12129 return false;12130 }12131 12132 // remove limit rows from the end of the database12133 if (snprintf(query, MAX_STRING_LENGTH,12134 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",12135 P2PROCESSEDIMFILE_TABLE_NAME, P2PROCESSEDIMFILE_INDEX_NAME, limit) < 0) {12136 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);12137 return false;12138 }12139 12140 if (!p_psDBRunQuery(dbh, query)) {12141 psError(PS_ERR_UNKNOWN, false, "database query failed");12142 return false;12143 }12144 12145 return true;12146 }12147 12148 8707 bool p2ProcessedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 12149 8708 { 12150 8709 psArray *rowSet; 12151 psU64 i;12152 8710 12153 8711 rowSet = psDBSelectRows(dbh, P2PROCESSEDIMFILE_TABLE_NAME, where, limit); 12154 8712 if (!rowSet) { 12155 8713 return false; 12156 }12157 12158 // strip index column12159 for (i = 0; i < rowSet->n; i++) {12160 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P2PROCESSEDIMFILE_INDEX_NAME)) {12161 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDIMFILE_INDEX_NAME);12162 psFree(rowSet);12163 return false;12164 }12165 8714 } 12166 8715 … … 12323 8872 if (!rowSet) { 12324 8873 return NULL; 12325 }12326 12327 // strip index column12328 for (i = 0; i < rowSet->n; i++) {12329 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P2PROCESSEDIMFILE_INDEX_NAME)) {12330 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P2PROCESSEDIMFILE_INDEX_NAME);12331 psFree(rowSet);12332 return false;12333 }12334 8874 } 12335 8875 … … 12444 8984 12445 8985 md = psMetadataAlloc(); 12446 if (!psMetadataAdd(md, PS_LIST_TAIL, P3PENDINGEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {12447 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P3PENDINGEXP_INDEX_NAME);12448 psFree(md);12449 return false;12450 }12451 8986 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 12452 8987 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 12519 9054 return deleted; 12520 9055 } 12521 bool p3PendingExpPop(psDB *dbh, char **exp_tag, psS32 *p2_version, psS32 *p3_version)12522 {12523 psArray *rowSet;12524 psMetadata *row;12525 psMetadata *popped;12526 long deleted;12527 bool status;12528 int rowID;12529 12530 rowSet = psDBSelectRows(dbh, P3PENDINGEXP_TABLE_NAME, NULL, 1);12531 if (!rowSet) {12532 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PENDINGEXP_INDEX_NAME);12533 psFree(rowSet);12534 return NULL;12535 }12536 12537 row = psArrayGet(rowSet, 0);12538 psMemIncrRefCounter(row);12539 if (!row) {12540 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");12541 return NULL;12542 }12543 psFree(rowSet);12544 12545 rowID = psMetadataLookupS32(&status, row, P3PENDINGEXP_INDEX_NAME);12546 if (!status) {12547 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PENDINGEXP_INDEX_NAME);12548 psFree(row);12549 return NULL;12550 }12551 12552 popped = psMetadataAlloc();12553 psMetadataAddS32(popped, PS_LIST_TAIL, P3PENDINGEXP_INDEX_NAME, 0, NULL, rowID);12554 12555 deleted = psDBDeleteRows(dbh, P3PENDINGEXP_TABLE_NAME, popped, 0);12556 if (deleted != 1) {12557 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");12558 psFree(popped);12559 psFree(row);12560 return NULL;12561 }12562 12563 psFree(popped);12564 12565 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");12566 if (!status) {12567 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");12568 psFree(row);12569 return false;12570 }12571 *p2_version = psMetadataLookupS32(&status, row, "p2_version");12572 if (!status) {12573 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");12574 psFree(row);12575 return false;12576 }12577 *p3_version = psMetadataLookupS32(&status, row, "p3_version");12578 if (!status) {12579 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");12580 psFree(row);12581 return false;12582 }12583 12584 psFree(row);12585 12586 return true;12587 }12588 12589 9056 bool p3PendingExpInsertObject(psDB *dbh, p3PendingExpRow *object) 12590 9057 { … … 12601 9068 12602 9069 return true; 12603 }12604 12605 p3PendingExpRow *p3PendingExpPopObject(psDB *dbh)12606 {12607 char exp_tag[256];12608 psS32 p2_version;12609 psS32 p3_version;12610 12611 if (!p3PendingExpPop(dbh, (char **)&exp_tag, &p2_version, &p3_version)) {12612 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");12613 return NULL;12614 }12615 12616 return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version);12617 9070 } 12618 9071 … … 12652 9105 } 12653 9106 12654 bool p3PendingExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)12655 {12656 char query[MAX_STRING_LENGTH];12657 12658 if (!p3PendingExpSelectRowsFits(dbh, fits, NULL, limit)) {12659 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");12660 return false;12661 }12662 12663 // remove limit rows from the end of the database12664 if (snprintf(query, MAX_STRING_LENGTH,12665 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",12666 P3PENDINGEXP_TABLE_NAME, P3PENDINGEXP_INDEX_NAME, limit) < 0) {12667 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);12668 return false;12669 }12670 12671 if (!p_psDBRunQuery(dbh, query)) {12672 psError(PS_ERR_UNKNOWN, false, "database query failed");12673 return false;12674 }12675 12676 return true;12677 }12678 12679 9107 bool p3PendingExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 12680 9108 { 12681 9109 psArray *rowSet; 12682 psU64 i;12683 9110 12684 9111 rowSet = psDBSelectRows(dbh, P3PENDINGEXP_TABLE_NAME, where, limit); 12685 9112 if (!rowSet) { 12686 9113 return false; 12687 }12688 12689 // strip index column12690 for (i = 0; i < rowSet->n; i++) {12691 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P3PENDINGEXP_INDEX_NAME)) {12692 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PENDINGEXP_INDEX_NAME);12693 psFree(rowSet);12694 return false;12695 }12696 9114 } 12697 9115 … … 12766 9184 if (!rowSet) { 12767 9185 return NULL; 12768 }12769 12770 // strip index column12771 for (i = 0; i < rowSet->n; i++) {12772 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P3PENDINGEXP_INDEX_NAME)) {12773 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PENDINGEXP_INDEX_NAME);12774 psFree(rowSet);12775 return false;12776 }12777 9186 } 12778 9187 … … 12903 9312 12904 9313 md = psMetadataAlloc(); 12905 if (!psMetadataAdd(md, PS_LIST_TAIL, P3PROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {12906 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", P3PROCESSEDEXP_INDEX_NAME);12907 psFree(md);12908 return false;12909 }12910 9314 if (!psMetadataAddStr(md, PS_LIST_TAIL, "exp_tag", 0, "Primary Key", "64")) { 12911 9315 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_tag"); … … 13098 9502 return deleted; 13099 9503 } 13100 bool p3ProcessedExpPop(psDB *dbh, char **exp_tag, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, psF32 *sigma_ra, psF32 *sigma_dec, psS32 *nastro, char **b1_uri, char **b2_uri, psF32 *zp_mean, psF32 *zp_stdev, psS32 *p2_version, psS32 *p3_version)13101 {13102 psArray *rowSet;13103 psMetadata *row;13104 psMetadata *popped;13105 long deleted;13106 bool status;13107 int rowID;13108 13109 rowSet = psDBSelectRows(dbh, P3PROCESSEDEXP_TABLE_NAME, NULL, 1);13110 if (!rowSet) {13111 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PROCESSEDEXP_INDEX_NAME);13112 psFree(rowSet);13113 return NULL;13114 }13115 13116 row = psArrayGet(rowSet, 0);13117 psMemIncrRefCounter(row);13118 if (!row) {13119 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");13120 return NULL;13121 }13122 psFree(rowSet);13123 13124 rowID = psMetadataLookupS32(&status, row, P3PROCESSEDEXP_INDEX_NAME);13125 if (!status) {13126 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", P3PROCESSEDEXP_INDEX_NAME);13127 psFree(row);13128 return NULL;13129 }13130 13131 popped = psMetadataAlloc();13132 psMetadataAddS32(popped, PS_LIST_TAIL, P3PROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);13133 13134 deleted = psDBDeleteRows(dbh, P3PROCESSEDEXP_TABLE_NAME, popped, 0);13135 if (deleted != 1) {13136 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");13137 psFree(popped);13138 psFree(row);13139 return NULL;13140 }13141 13142 psFree(popped);13143 13144 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");13145 if (!status) {13146 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");13147 psFree(row);13148 return false;13149 }13150 *uri = psMetadataLookupPtr(&status, row, "uri");13151 if (!status) {13152 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");13153 psFree(row);13154 return false;13155 }13156 *recipe = psMetadataLookupPtr(&status, row, "recipe");13157 if (!status) {13158 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");13159 psFree(row);13160 return false;13161 }13162 *bg = psMetadataLookupF64(&status, row, "bg");13163 if (!status) {13164 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");13165 psFree(row);13166 return false;13167 }13168 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");13169 if (!status) {13170 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");13171 psFree(row);13172 return false;13173 }13174 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");13175 if (!status) {13176 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");13177 psFree(row);13178 return false;13179 }13180 *sigma_ra = psMetadataLookupF32(&status, row, "sigma_ra");13181 if (!status) {13182 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_ra");13183 psFree(row);13184 return false;13185 }13186 *sigma_dec = psMetadataLookupF32(&status, row, "sigma_dec");13187 if (!status) {13188 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item sigma_dec");13189 psFree(row);13190 return false;13191 }13192 *nastro = psMetadataLookupS32(&status, row, "nastro");13193 if (!status) {13194 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item nastro");13195 psFree(row);13196 return false;13197 }13198 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");13199 if (!status) {13200 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");13201 psFree(row);13202 return false;13203 }13204 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");13205 if (!status) {13206 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");13207 psFree(row);13208 return false;13209 }13210 *zp_mean = psMetadataLookupF32(&status, row, "zp_mean");13211 if (!status) {13212 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_mean");13213 psFree(row);13214 return false;13215 }13216 *zp_stdev = psMetadataLookupF32(&status, row, "zp_stdev");13217 if (!status) {13218 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item zp_stdev");13219 psFree(row);13220 return false;13221 }13222 *p2_version = psMetadataLookupS32(&status, row, "p2_version");13223 if (!status) {13224 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p2_version");13225 psFree(row);13226 return false;13227 }13228 *p3_version = psMetadataLookupS32(&status, row, "p3_version");13229 if (!status) {13230 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item p3_version");13231 psFree(row);13232 return false;13233 }13234 13235 psFree(row);13236 13237 return true;13238 }13239 13240 9504 bool p3ProcessedExpInsertObject(psDB *dbh, p3ProcessedExpRow *object) 13241 9505 { … … 13252 9516 13253 9517 return true; 13254 }13255 13256 p3ProcessedExpRow *p3ProcessedExpPopObject(psDB *dbh)13257 {13258 char exp_tag[256];13259 char uri[256];13260 char recipe[256];13261 psF64 bg;13262 psF64 bg_stdev;13263 psF64 bg_mean_stdev;13264 psF32 sigma_ra;13265 psF32 sigma_dec;13266 psS32 nastro;13267 char b1_uri[256];13268 char b2_uri[256];13269 psF32 zp_mean;13270 psF32 zp_stdev;13271 psS32 p2_version;13272 psS32 p3_version;13273 13274 if (!p3ProcessedExpPop(dbh, (char **)&exp_tag, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, &sigma_ra, &sigma_dec, &nastro, (char **)&b1_uri, (char **)&b2_uri, &zp_mean, &zp_stdev, &p2_version, &p3_version)) {13275 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");13276 return NULL;13277 }13278 13279 return p3ProcessedExpRowAlloc(exp_tag, uri, recipe, bg, bg_stdev, bg_mean_stdev, sigma_ra, sigma_dec, nastro, b1_uri, b2_uri, zp_mean, zp_stdev, p2_version, p3_version);13280 9518 } 13281 9519 … … 13315 9553 } 13316 9554 13317 bool p3ProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)13318 {13319 char query[MAX_STRING_LENGTH];13320 13321 if (!p3ProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {13322 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");13323 return false;13324 }13325 13326 // remove limit rows from the end of the database13327 if (snprintf(query, MAX_STRING_LENGTH,13328 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",13329 P3PROCESSEDEXP_TABLE_NAME, P3PROCESSEDEXP_INDEX_NAME, limit) < 0) {13330 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);13331 return false;13332 }13333 13334 if (!p_psDBRunQuery(dbh, query)) {13335 psError(PS_ERR_UNKNOWN, false, "database query failed");13336 return false;13337 }13338 13339 return true;13340 }13341 13342 9555 bool p3ProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 13343 9556 { 13344 9557 psArray *rowSet; 13345 psU64 i;13346 9558 13347 9559 rowSet = psDBSelectRows(dbh, P3PROCESSEDEXP_TABLE_NAME, where, limit); 13348 9560 if (!rowSet) { 13349 9561 return false; 13350 }13351 13352 // strip index column13353 for (i = 0; i < rowSet->n; i++) {13354 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, P3PROCESSEDEXP_INDEX_NAME)) {13355 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PROCESSEDEXP_INDEX_NAME);13356 psFree(rowSet);13357 return false;13358 }13359 9562 } 13360 9563 … … 13563 9766 } 13564 9767 13565 // strip index column13566 for (i = 0; i < rowSet->n; i++) {13567 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, P3PROCESSEDEXP_INDEX_NAME)) {13568 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", P3PROCESSEDEXP_INDEX_NAME);13569 psFree(rowSet);13570 return false;13571 }13572 }13573 13574 9768 // convert psMetadata rows to row objects 13575 9769 … … 13657 9851 static void detRunRowFree(detRunRow *object); 13658 9852 13659 detRunRow *detRunRowAlloc(psS32 iteration, const char *det_type, const char *state)9853 detRunRow *detRunRowAlloc(psS32 det_id, psS32 iteration, const char *det_type, const char *state) 13660 9854 { 13661 9855 detRunRow *_object; … … 13664 9858 psMemSetDeallocator(_object, (psFreeFunc)detRunRowFree); 13665 9859 9860 _object->det_id = det_id; 13666 9861 _object->iteration = iteration; 13667 9862 _object->det_type = psStringCopy(det_type); … … 13683 9878 13684 9879 md = psMetadataAlloc(); 13685 if (!psMetadataAdd (md, PS_LIST_TAIL, DETRUN_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {13686 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUN_INDEX_NAME);9880 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key AUTO_INCREMENT", 0)) { 9881 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 13687 9882 psFree(md); 13688 9883 return false; … … 13716 9911 } 13717 9912 13718 bool detRunInsert(psDB * dbh, psS32 iteration, const char *det_type, const char *state)9913 bool detRunInsert(psDB * dbh, psS32 det_id, psS32 iteration, const char *det_type, const char *state) 13719 9914 { 13720 9915 psMetadata *md; … … 13722 9917 13723 9918 md = psMetadataAlloc(); 9919 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, det_id)) { 9920 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 9921 psFree(md); 9922 return false; 9923 } 13724 9924 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, iteration)) { 13725 9925 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); … … 13758 9958 return deleted; 13759 9959 } 13760 bool detRunPop(psDB *dbh, psS32 *iteration, char **det_type, char **state)13761 {13762 psArray *rowSet;13763 psMetadata *row;13764 psMetadata *popped;13765 long deleted;13766 bool status;13767 int rowID;13768 13769 rowSet = psDBSelectRows(dbh, DETRUN_TABLE_NAME, NULL, 1);13770 if (!rowSet) {13771 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUN_INDEX_NAME);13772 psFree(rowSet);13773 return NULL;13774 }13775 13776 row = psArrayGet(rowSet, 0);13777 psMemIncrRefCounter(row);13778 if (!row) {13779 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");13780 return NULL;13781 }13782 psFree(rowSet);13783 13784 rowID = psMetadataLookupS32(&status, row, DETRUN_INDEX_NAME);13785 if (!status) {13786 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUN_INDEX_NAME);13787 psFree(row);13788 return NULL;13789 }13790 13791 popped = psMetadataAlloc();13792 psMetadataAddS32(popped, PS_LIST_TAIL, DETRUN_INDEX_NAME, 0, NULL, rowID);13793 13794 deleted = psDBDeleteRows(dbh, DETRUN_TABLE_NAME, popped, 0);13795 if (deleted != 1) {13796 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");13797 psFree(popped);13798 psFree(row);13799 return NULL;13800 }13801 13802 psFree(popped);13803 13804 *iteration = psMetadataLookupS32(&status, row, "iteration");13805 if (!status) {13806 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");13807 psFree(row);13808 return false;13809 }13810 *det_type = psMetadataLookupPtr(&status, row, "det_type");13811 if (!status) {13812 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_type");13813 psFree(row);13814 return false;13815 }13816 *state = psMetadataLookupPtr(&status, row, "state");13817 if (!status) {13818 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item state");13819 psFree(row);13820 return false;13821 }13822 13823 psFree(row);13824 13825 return true;13826 }13827 13828 9960 bool detRunInsertObject(psDB *dbh, detRunRow *object) 13829 9961 { 13830 return detRunInsert(dbh, object-> iteration, object->det_type, object->state);9962 return detRunInsert(dbh, object->det_id, object->iteration, object->det_type, object->state); 13831 9963 } 13832 9964 … … 13840 9972 13841 9973 return true; 13842 }13843 13844 detRunRow *detRunPopObject(psDB *dbh)13845 {13846 psS32 iteration;13847 char det_type[256];13848 char state[256];13849 13850 if (!detRunPop(dbh, &iteration, (char **)&det_type, (char **)&state)) {13851 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");13852 return NULL;13853 }13854 13855 return detRunRowAlloc(iteration, det_type, state);13856 9974 } 13857 9975 … … 13891 10009 } 13892 10010 13893 bool detRunPopFits(psDB *dbh, psFits *fits, unsigned long long limit)13894 {13895 char query[MAX_STRING_LENGTH];13896 13897 if (!detRunSelectRowsFits(dbh, fits, NULL, limit)) {13898 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");13899 return false;13900 }13901 13902 // remove limit rows from the end of the database13903 if (snprintf(query, MAX_STRING_LENGTH,13904 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",13905 DETRUN_TABLE_NAME, DETRUN_INDEX_NAME, limit) < 0) {13906 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);13907 return false;13908 }13909 13910 if (!p_psDBRunQuery(dbh, query)) {13911 psError(PS_ERR_UNKNOWN, false, "database query failed");13912 return false;13913 }13914 13915 return true;13916 }13917 13918 10011 bool detRunSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 13919 10012 { 13920 10013 psArray *rowSet; 13921 psU64 i;13922 10014 13923 10015 rowSet = psDBSelectRows(dbh, DETRUN_TABLE_NAME, where, limit); 13924 10016 if (!rowSet) { 13925 10017 return false; 13926 }13927 13928 // strip index column13929 for (i = 0; i < rowSet->n; i++) {13930 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUN_INDEX_NAME)) {13931 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUN_INDEX_NAME);13932 psFree(rowSet);13933 return false;13934 }13935 10018 } 13936 10019 … … 13952 10035 13953 10036 md = psMetadataAlloc(); 10037 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, object->det_id)) { 10038 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); 10039 psFree(md); 10040 return NULL; 10041 } 13954 10042 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, object->iteration)) { 13955 10043 psError(PS_ERR_UNKNOWN, false, "failed to add item iteration"); … … 13974 10062 { 13975 10063 bool status; 10064 psS32 det_id; 13976 10065 psS32 iteration; 13977 10066 char *det_type; 13978 10067 char *state; 13979 10068 10069 det_id = psMetadataLookupS32(&status, md, "det_id"); 10070 if (!status) { 10071 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id"); 10072 return false; 10073 } 13980 10074 iteration = psMetadataLookupS32(&status, md, "iteration"); 13981 10075 if (!status) { … … 13994 10088 } 13995 10089 13996 return detRunRowAlloc( iteration, det_type, state);10090 return detRunRowAlloc(det_id, iteration, det_type, state); 13997 10091 } 13998 10092 psArray *detRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 14005 10099 if (!rowSet) { 14006 10100 return NULL; 14007 }14008 14009 // strip index column14010 for (i = 0; i < rowSet->n; i++) {14011 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUN_INDEX_NAME)) {14012 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUN_INDEX_NAME);14013 psFree(rowSet);14014 return false;14015 }14016 10101 } 14017 10102 … … 14127 10212 14128 10213 md = psMetadataAlloc(); 14129 if (!psMetadataAdd(md, PS_LIST_TAIL, DETINPUTEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {14130 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETINPUTEXP_INDEX_NAME);14131 psFree(md);14132 return false;14133 }14134 10214 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 14135 10215 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 14212 10292 return deleted; 14213 10293 } 14214 bool detInputExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, bool *include)14215 {14216 psArray *rowSet;14217 psMetadata *row;14218 psMetadata *popped;14219 long deleted;14220 bool status;14221 int rowID;14222 14223 rowSet = psDBSelectRows(dbh, DETINPUTEXP_TABLE_NAME, NULL, 1);14224 if (!rowSet) {14225 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETINPUTEXP_INDEX_NAME);14226 psFree(rowSet);14227 return NULL;14228 }14229 14230 row = psArrayGet(rowSet, 0);14231 psMemIncrRefCounter(row);14232 if (!row) {14233 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");14234 return NULL;14235 }14236 psFree(rowSet);14237 14238 rowID = psMetadataLookupS32(&status, row, DETINPUTEXP_INDEX_NAME);14239 if (!status) {14240 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETINPUTEXP_INDEX_NAME);14241 psFree(row);14242 return NULL;14243 }14244 14245 popped = psMetadataAlloc();14246 psMetadataAddS32(popped, PS_LIST_TAIL, DETINPUTEXP_INDEX_NAME, 0, NULL, rowID);14247 14248 deleted = psDBDeleteRows(dbh, DETINPUTEXP_TABLE_NAME, popped, 0);14249 if (deleted != 1) {14250 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");14251 psFree(popped);14252 psFree(row);14253 return NULL;14254 }14255 14256 psFree(popped);14257 14258 *det_id = psMetadataLookupS32(&status, row, "det_id");14259 if (!status) {14260 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");14261 psFree(row);14262 return false;14263 }14264 *iteration = psMetadataLookupS32(&status, row, "iteration");14265 if (!status) {14266 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");14267 psFree(row);14268 return false;14269 }14270 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");14271 if (!status) {14272 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");14273 psFree(row);14274 return false;14275 }14276 *include = psMetadataLookupBool(&status, row, "include");14277 if (!status) {14278 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item include");14279 psFree(row);14280 return false;14281 }14282 14283 psFree(row);14284 14285 return true;14286 }14287 14288 10294 bool detInputExpInsertObject(psDB *dbh, detInputExpRow *object) 14289 10295 { … … 14300 10306 14301 10307 return true; 14302 }14303 14304 detInputExpRow *detInputExpPopObject(psDB *dbh)14305 {14306 psS32 det_id;14307 psS32 iteration;14308 char exp_tag[256];14309 bool include;14310 14311 if (!detInputExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, &include)) {14312 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");14313 return NULL;14314 }14315 14316 return detInputExpRowAlloc(det_id, iteration, exp_tag, include);14317 10308 } 14318 10309 … … 14352 10343 } 14353 10344 14354 bool detInputExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)14355 {14356 char query[MAX_STRING_LENGTH];14357 14358 if (!detInputExpSelectRowsFits(dbh, fits, NULL, limit)) {14359 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");14360 return false;14361 }14362 14363 // remove limit rows from the end of the database14364 if (snprintf(query, MAX_STRING_LENGTH,14365 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",14366 DETINPUTEXP_TABLE_NAME, DETINPUTEXP_INDEX_NAME, limit) < 0) {14367 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);14368 return false;14369 }14370 14371 if (!p_psDBRunQuery(dbh, query)) {14372 psError(PS_ERR_UNKNOWN, false, "database query failed");14373 return false;14374 }14375 14376 return true;14377 }14378 14379 10345 bool detInputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 14380 10346 { 14381 10347 psArray *rowSet; 14382 psU64 i;14383 10348 14384 10349 rowSet = psDBSelectRows(dbh, DETINPUTEXP_TABLE_NAME, where, limit); 14385 10350 if (!rowSet) { 14386 10351 return false; 14387 }14388 14389 // strip index column14390 for (i = 0; i < rowSet->n; i++) {14391 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETINPUTEXP_INDEX_NAME)) {14392 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETINPUTEXP_INDEX_NAME);14393 psFree(rowSet);14394 return false;14395 }14396 10352 } 14397 10353 … … 14477 10433 if (!rowSet) { 14478 10434 return NULL; 14479 }14480 14481 // strip index column14482 for (i = 0; i < rowSet->n; i++) {14483 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETINPUTEXP_INDEX_NAME)) {14484 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETINPUTEXP_INDEX_NAME);14485 psFree(rowSet);14486 return false;14487 }14488 10435 } 14489 10436 … … 14610 10557 14611 10558 md = psMetadataAlloc(); 14612 if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {14613 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDIMFILE_INDEX_NAME);14614 psFree(md);14615 return false;14616 }14617 10559 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 14618 10560 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 14755 10697 return deleted; 14756 10698 } 14757 bool detProcessedImfilePop(psDB *dbh, psS32 *det_id, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)14758 {14759 psArray *rowSet;14760 psMetadata *row;14761 psMetadata *popped;14762 long deleted;14763 bool status;14764 int rowID;14765 14766 rowSet = psDBSelectRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, NULL, 1);14767 if (!rowSet) {14768 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDIMFILE_INDEX_NAME);14769 psFree(rowSet);14770 return NULL;14771 }14772 14773 row = psArrayGet(rowSet, 0);14774 psMemIncrRefCounter(row);14775 if (!row) {14776 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");14777 return NULL;14778 }14779 psFree(rowSet);14780 14781 rowID = psMetadataLookupS32(&status, row, DETPROCESSEDIMFILE_INDEX_NAME);14782 if (!status) {14783 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDIMFILE_INDEX_NAME);14784 psFree(row);14785 return NULL;14786 }14787 14788 popped = psMetadataAlloc();14789 psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDIMFILE_INDEX_NAME, 0, NULL, rowID);14790 14791 deleted = psDBDeleteRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, popped, 0);14792 if (deleted != 1) {14793 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");14794 psFree(popped);14795 psFree(row);14796 return NULL;14797 }14798 14799 psFree(popped);14800 14801 *det_id = psMetadataLookupS32(&status, row, "det_id");14802 if (!status) {14803 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");14804 psFree(row);14805 return false;14806 }14807 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");14808 if (!status) {14809 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");14810 psFree(row);14811 return false;14812 }14813 *class_id = psMetadataLookupPtr(&status, row, "class_id");14814 if (!status) {14815 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");14816 psFree(row);14817 return false;14818 }14819 *uri = psMetadataLookupPtr(&status, row, "uri");14820 if (!status) {14821 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");14822 psFree(row);14823 return false;14824 }14825 *recipe = psMetadataLookupPtr(&status, row, "recipe");14826 if (!status) {14827 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");14828 psFree(row);14829 return false;14830 }14831 *bg = psMetadataLookupF64(&status, row, "bg");14832 if (!status) {14833 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");14834 psFree(row);14835 return false;14836 }14837 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");14838 if (!status) {14839 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");14840 psFree(row);14841 return false;14842 }14843 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");14844 if (!status) {14845 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");14846 psFree(row);14847 return false;14848 }14849 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");14850 if (!status) {14851 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");14852 psFree(row);14853 return false;14854 }14855 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");14856 if (!status) {14857 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");14858 psFree(row);14859 return false;14860 }14861 14862 psFree(row);14863 14864 return true;14865 }14866 14867 10699 bool detProcessedImfileInsertObject(psDB *dbh, detProcessedImfileRow *object) 14868 10700 { … … 14879 10711 14880 10712 return true; 14881 }14882 14883 detProcessedImfileRow *detProcessedImfilePopObject(psDB *dbh)14884 {14885 psS32 det_id;14886 char exp_tag[256];14887 char class_id[256];14888 char uri[256];14889 char recipe[256];14890 psF64 bg;14891 psF64 bg_stdev;14892 psF64 bg_mean_stdev;14893 char b1_uri[256];14894 char b2_uri[256];14895 14896 if (!detProcessedImfilePop(dbh, &det_id, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {14897 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");14898 return NULL;14899 }14900 14901 return detProcessedImfileRowAlloc(det_id, exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);14902 10713 } 14903 10714 … … 14937 10748 } 14938 10749 14939 bool detProcessedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)14940 {14941 char query[MAX_STRING_LENGTH];14942 14943 if (!detProcessedImfileSelectRowsFits(dbh, fits, NULL, limit)) {14944 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");14945 return false;14946 }14947 14948 // remove limit rows from the end of the database14949 if (snprintf(query, MAX_STRING_LENGTH,14950 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",14951 DETPROCESSEDIMFILE_TABLE_NAME, DETPROCESSEDIMFILE_INDEX_NAME, limit) < 0) {14952 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);14953 return false;14954 }14955 14956 if (!p_psDBRunQuery(dbh, query)) {14957 psError(PS_ERR_UNKNOWN, false, "database query failed");14958 return false;14959 }14960 14961 return true;14962 }14963 14964 10750 bool detProcessedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 14965 10751 { 14966 10752 psArray *rowSet; 14967 psU64 i;14968 10753 14969 10754 rowSet = psDBSelectRows(dbh, DETPROCESSEDIMFILE_TABLE_NAME, where, limit); 14970 10755 if (!rowSet) { 14971 10756 return false; 14972 }14973 14974 // strip index column14975 for (i = 0; i < rowSet->n; i++) {14976 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDIMFILE_INDEX_NAME)) {14977 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDIMFILE_INDEX_NAME);14978 psFree(rowSet);14979 return false;14980 }14981 10757 } 14982 10758 … … 15128 10904 if (!rowSet) { 15129 10905 return NULL; 15130 }15131 15132 // strip index column15133 for (i = 0; i < rowSet->n; i++) {15134 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDIMFILE_INDEX_NAME)) {15135 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDIMFILE_INDEX_NAME);15136 psFree(rowSet);15137 return false;15138 }15139 10906 } 15140 10907 … … 15257 11024 15258 11025 md = psMetadataAlloc(); 15259 if (!psMetadataAdd(md, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {15260 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETPROCESSEDEXP_INDEX_NAME);15261 psFree(md);15262 return false;15263 }15264 11026 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 15265 11027 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 15382 11144 return deleted; 15383 11145 } 15384 bool detProcessedExpPop(psDB *dbh, psS32 *det_id, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)15385 {15386 psArray *rowSet;15387 psMetadata *row;15388 psMetadata *popped;15389 long deleted;15390 bool status;15391 int rowID;15392 15393 rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, NULL, 1);15394 if (!rowSet) {15395 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);15396 psFree(rowSet);15397 return NULL;15398 }15399 15400 row = psArrayGet(rowSet, 0);15401 psMemIncrRefCounter(row);15402 if (!row) {15403 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");15404 return NULL;15405 }15406 psFree(rowSet);15407 15408 rowID = psMetadataLookupS32(&status, row, DETPROCESSEDEXP_INDEX_NAME);15409 if (!status) {15410 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETPROCESSEDEXP_INDEX_NAME);15411 psFree(row);15412 return NULL;15413 }15414 15415 popped = psMetadataAlloc();15416 psMetadataAddS32(popped, PS_LIST_TAIL, DETPROCESSEDEXP_INDEX_NAME, 0, NULL, rowID);15417 15418 deleted = psDBDeleteRows(dbh, DETPROCESSEDEXP_TABLE_NAME, popped, 0);15419 if (deleted != 1) {15420 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");15421 psFree(popped);15422 psFree(row);15423 return NULL;15424 }15425 15426 psFree(popped);15427 15428 *det_id = psMetadataLookupS32(&status, row, "det_id");15429 if (!status) {15430 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");15431 psFree(row);15432 return false;15433 }15434 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");15435 if (!status) {15436 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");15437 psFree(row);15438 return false;15439 }15440 *recipe = psMetadataLookupPtr(&status, row, "recipe");15441 if (!status) {15442 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");15443 psFree(row);15444 return false;15445 }15446 *bg = psMetadataLookupF64(&status, row, "bg");15447 if (!status) {15448 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");15449 psFree(row);15450 return false;15451 }15452 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");15453 if (!status) {15454 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");15455 psFree(row);15456 return false;15457 }15458 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");15459 if (!status) {15460 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");15461 psFree(row);15462 return false;15463 }15464 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");15465 if (!status) {15466 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");15467 psFree(row);15468 return false;15469 }15470 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");15471 if (!status) {15472 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");15473 psFree(row);15474 return false;15475 }15476 15477 psFree(row);15478 15479 return true;15480 }15481 15482 11146 bool detProcessedExpInsertObject(psDB *dbh, detProcessedExpRow *object) 15483 11147 { … … 15494 11158 15495 11159 return true; 15496 }15497 15498 detProcessedExpRow *detProcessedExpPopObject(psDB *dbh)15499 {15500 psS32 det_id;15501 char exp_tag[256];15502 char recipe[256];15503 psF64 bg;15504 psF64 bg_stdev;15505 psF64 bg_mean_stdev;15506 char b1_uri[256];15507 char b2_uri[256];15508 15509 if (!detProcessedExpPop(dbh, &det_id, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {15510 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");15511 return NULL;15512 }15513 15514 return detProcessedExpRowAlloc(det_id, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);15515 11160 } 15516 11161 … … 15550 11195 } 15551 11196 15552 bool detProcessedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)15553 {15554 char query[MAX_STRING_LENGTH];15555 15556 if (!detProcessedExpSelectRowsFits(dbh, fits, NULL, limit)) {15557 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");15558 return false;15559 }15560 15561 // remove limit rows from the end of the database15562 if (snprintf(query, MAX_STRING_LENGTH,15563 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",15564 DETPROCESSEDEXP_TABLE_NAME, DETPROCESSEDEXP_INDEX_NAME, limit) < 0) {15565 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);15566 return false;15567 }15568 15569 if (!p_psDBRunQuery(dbh, query)) {15570 psError(PS_ERR_UNKNOWN, false, "database query failed");15571 return false;15572 }15573 15574 return true;15575 }15576 15577 11197 bool detProcessedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 15578 11198 { 15579 11199 psArray *rowSet; 15580 psU64 i;15581 11200 15582 11201 rowSet = psDBSelectRows(dbh, DETPROCESSEDEXP_TABLE_NAME, where, limit); 15583 11202 if (!rowSet) { 15584 11203 return false; 15585 }15586 15587 // strip index column15588 for (i = 0; i < rowSet->n; i++) {15589 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETPROCESSEDEXP_INDEX_NAME)) {15590 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);15591 psFree(rowSet);15592 return false;15593 }15594 11204 } 15595 11205 … … 15719 11329 if (!rowSet) { 15720 11330 return NULL; 15721 }15722 15723 // strip index column15724 for (i = 0; i < rowSet->n; i++) {15725 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETPROCESSEDEXP_INDEX_NAME)) {15726 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETPROCESSEDEXP_INDEX_NAME);15727 psFree(rowSet);15728 return false;15729 }15730 11331 } 15731 11332 … … 15847 11448 15848 11449 md = psMetadataAlloc(); 15849 if (!psMetadataAdd(md, PS_LIST_TAIL, DETSTACKEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {15850 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETSTACKEDIMFILE_INDEX_NAME);15851 psFree(md);15852 return false;15853 }15854 11450 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 15855 11451 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 15972 11568 return deleted; 15973 11569 } 15974 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)15975 {15976 psArray *rowSet;15977 psMetadata *row;15978 psMetadata *popped;15979 long deleted;15980 bool status;15981 int rowID;15982 15983 rowSet = psDBSelectRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, NULL, 1);15984 if (!rowSet) {15985 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETSTACKEDIMFILE_INDEX_NAME);15986 psFree(rowSet);15987 return NULL;15988 }15989 15990 row = psArrayGet(rowSet, 0);15991 psMemIncrRefCounter(row);15992 if (!row) {15993 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");15994 return NULL;15995 }15996 psFree(rowSet);15997 15998 rowID = psMetadataLookupS32(&status, row, DETSTACKEDIMFILE_INDEX_NAME);15999 if (!status) {16000 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETSTACKEDIMFILE_INDEX_NAME);16001 psFree(row);16002 return NULL;16003 }16004 16005 popped = psMetadataAlloc();16006 psMetadataAddS32(popped, PS_LIST_TAIL, DETSTACKEDIMFILE_INDEX_NAME, 0, NULL, rowID);16007 16008 deleted = psDBDeleteRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, popped, 0);16009 if (deleted != 1) {16010 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");16011 psFree(popped);16012 psFree(row);16013 return NULL;16014 }16015 16016 psFree(popped);16017 16018 *det_id = psMetadataLookupS32(&status, row, "det_id");16019 if (!status) {16020 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");16021 psFree(row);16022 return false;16023 }16024 *iteration = psMetadataLookupS32(&status, row, "iteration");16025 if (!status) {16026 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");16027 psFree(row);16028 return false;16029 }16030 *class_id = psMetadataLookupPtr(&status, row, "class_id");16031 if (!status) {16032 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");16033 psFree(row);16034 return false;16035 }16036 *uri = psMetadataLookupPtr(&status, row, "uri");16037 if (!status) {16038 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");16039 psFree(row);16040 return false;16041 }16042 *recipe = psMetadataLookupPtr(&status, row, "recipe");16043 if (!status) {16044 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");16045 psFree(row);16046 return false;16047 }16048 *bg = psMetadataLookupF64(&status, row, "bg");16049 if (!status) {16050 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");16051 psFree(row);16052 return false;16053 }16054 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");16055 if (!status) {16056 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");16057 psFree(row);16058 return false;16059 }16060 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");16061 if (!status) {16062 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");16063 psFree(row);16064 return false;16065 }16066 16067 psFree(row);16068 16069 return true;16070 }16071 16072 11570 bool detStackedImfileInsertObject(psDB *dbh, detStackedImfileRow *object) 16073 11571 { … … 16084 11582 16085 11583 return true; 16086 }16087 16088 detStackedImfileRow *detStackedImfilePopObject(psDB *dbh)16089 {16090 psS32 det_id;16091 psS32 iteration;16092 char class_id[256];16093 char uri[256];16094 char recipe[256];16095 psF64 bg;16096 psF64 bg_stdev;16097 psF64 bg_mean_stdev;16098 16099 if (!detStackedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev)) {16100 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");16101 return NULL;16102 }16103 16104 return detStackedImfileRowAlloc(det_id, iteration, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev);16105 11584 } 16106 11585 … … 16140 11619 } 16141 11620 16142 bool detStackedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)16143 {16144 char query[MAX_STRING_LENGTH];16145 16146 if (!detStackedImfileSelectRowsFits(dbh, fits, NULL, limit)) {16147 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");16148 return false;16149 }16150 16151 // remove limit rows from the end of the database16152 if (snprintf(query, MAX_STRING_LENGTH,16153 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",16154 DETSTACKEDIMFILE_TABLE_NAME, DETSTACKEDIMFILE_INDEX_NAME, limit) < 0) {16155 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);16156 return false;16157 }16158 16159 if (!p_psDBRunQuery(dbh, query)) {16160 psError(PS_ERR_UNKNOWN, false, "database query failed");16161 return false;16162 }16163 16164 return true;16165 }16166 16167 11621 bool detStackedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 16168 11622 { 16169 11623 psArray *rowSet; 16170 psU64 i;16171 11624 16172 11625 rowSet = psDBSelectRows(dbh, DETSTACKEDIMFILE_TABLE_NAME, where, limit); 16173 11626 if (!rowSet) { 16174 11627 return false; 16175 }16176 16177 // strip index column16178 for (i = 0; i < rowSet->n; i++) {16179 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETSTACKEDIMFILE_INDEX_NAME)) {16180 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETSTACKEDIMFILE_INDEX_NAME);16181 psFree(rowSet);16182 return false;16183 }16184 11628 } 16185 11629 … … 16309 11753 if (!rowSet) { 16310 11754 return NULL; 16311 }16312 16313 // strip index column16314 for (i = 0; i < rowSet->n; i++) {16315 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETSTACKEDIMFILE_INDEX_NAME)) {16316 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETSTACKEDIMFILE_INDEX_NAME);16317 psFree(rowSet);16318 return false;16319 }16320 11755 } 16321 11756 … … 16431 11866 16432 11867 md = psMetadataAlloc(); 16433 if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDSTATIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {16434 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);16435 psFree(md);16436 return false;16437 }16438 11868 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 16439 11869 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 16516 11946 return deleted; 16517 11947 } 16518 bool detNormalizedStatImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, psF32 *norm)16519 {16520 psArray *rowSet;16521 psMetadata *row;16522 psMetadata *popped;16523 long deleted;16524 bool status;16525 int rowID;16526 16527 rowSet = psDBSelectRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, NULL, 1);16528 if (!rowSet) {16529 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);16530 psFree(rowSet);16531 return NULL;16532 }16533 16534 row = psArrayGet(rowSet, 0);16535 psMemIncrRefCounter(row);16536 if (!row) {16537 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");16538 return NULL;16539 }16540 psFree(rowSet);16541 16542 rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDSTATIMFILE_INDEX_NAME);16543 if (!status) {16544 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);16545 psFree(row);16546 return NULL;16547 }16548 16549 popped = psMetadataAlloc();16550 psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDSTATIMFILE_INDEX_NAME, 0, NULL, rowID);16551 16552 deleted = psDBDeleteRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, popped, 0);16553 if (deleted != 1) {16554 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");16555 psFree(popped);16556 psFree(row);16557 return NULL;16558 }16559 16560 psFree(popped);16561 16562 *det_id = psMetadataLookupS32(&status, row, "det_id");16563 if (!status) {16564 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");16565 psFree(row);16566 return false;16567 }16568 *iteration = psMetadataLookupS32(&status, row, "iteration");16569 if (!status) {16570 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");16571 psFree(row);16572 return false;16573 }16574 *class_id = psMetadataLookupPtr(&status, row, "class_id");16575 if (!status) {16576 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");16577 psFree(row);16578 return false;16579 }16580 *norm = psMetadataLookupF32(&status, row, "norm");16581 if (!status) {16582 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item norm");16583 psFree(row);16584 return false;16585 }16586 16587 psFree(row);16588 16589 return true;16590 }16591 16592 11948 bool detNormalizedStatImfileInsertObject(psDB *dbh, detNormalizedStatImfileRow *object) 16593 11949 { … … 16604 11960 16605 11961 return true; 16606 }16607 16608 detNormalizedStatImfileRow *detNormalizedStatImfilePopObject(psDB *dbh)16609 {16610 psS32 det_id;16611 psS32 iteration;16612 char class_id[256];16613 psF32 norm;16614 16615 if (!detNormalizedStatImfilePop(dbh, &det_id, &iteration, (char **)&class_id, &norm)) {16616 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");16617 return NULL;16618 }16619 16620 return detNormalizedStatImfileRowAlloc(det_id, iteration, class_id, norm);16621 11962 } 16622 11963 … … 16656 11997 } 16657 11998 16658 bool detNormalizedStatImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)16659 {16660 char query[MAX_STRING_LENGTH];16661 16662 if (!detNormalizedStatImfileSelectRowsFits(dbh, fits, NULL, limit)) {16663 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");16664 return false;16665 }16666 16667 // remove limit rows from the end of the database16668 if (snprintf(query, MAX_STRING_LENGTH,16669 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",16670 DETNORMALIZEDSTATIMFILE_TABLE_NAME, DETNORMALIZEDSTATIMFILE_INDEX_NAME, limit) < 0) {16671 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);16672 return false;16673 }16674 16675 if (!p_psDBRunQuery(dbh, query)) {16676 psError(PS_ERR_UNKNOWN, false, "database query failed");16677 return false;16678 }16679 16680 return true;16681 }16682 16683 11999 bool detNormalizedStatImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 16684 12000 { 16685 12001 psArray *rowSet; 16686 psU64 i;16687 12002 16688 12003 rowSet = psDBSelectRows(dbh, DETNORMALIZEDSTATIMFILE_TABLE_NAME, where, limit); 16689 12004 if (!rowSet) { 16690 12005 return false; 16691 }16692 16693 // strip index column16694 for (i = 0; i < rowSet->n; i++) {16695 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDSTATIMFILE_INDEX_NAME)) {16696 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);16697 psFree(rowSet);16698 return false;16699 }16700 12006 } 16701 12007 … … 16781 12087 if (!rowSet) { 16782 12088 return NULL; 16783 }16784 16785 // strip index column16786 for (i = 0; i < rowSet->n; i++) {16787 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDSTATIMFILE_INDEX_NAME)) {16788 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDSTATIMFILE_INDEX_NAME);16789 psFree(rowSet);16790 return false;16791 }16792 12089 } 16793 12090 … … 16911 12208 16912 12209 md = psMetadataAlloc(); 16913 if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {16914 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDIMFILE_INDEX_NAME);16915 psFree(md);16916 return false;16917 }16918 12210 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 16919 12211 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 17046 12338 return deleted; 17047 12339 } 17048 bool detNormalizedImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **class_id, char **uri, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)17049 {17050 psArray *rowSet;17051 psMetadata *row;17052 psMetadata *popped;17053 long deleted;17054 bool status;17055 int rowID;17056 17057 rowSet = psDBSelectRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, NULL, 1);17058 if (!rowSet) {17059 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDIMFILE_INDEX_NAME);17060 psFree(rowSet);17061 return NULL;17062 }17063 17064 row = psArrayGet(rowSet, 0);17065 psMemIncrRefCounter(row);17066 if (!row) {17067 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");17068 return NULL;17069 }17070 psFree(rowSet);17071 17072 rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDIMFILE_INDEX_NAME);17073 if (!status) {17074 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDIMFILE_INDEX_NAME);17075 psFree(row);17076 return NULL;17077 }17078 17079 popped = psMetadataAlloc();17080 psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDIMFILE_INDEX_NAME, 0, NULL, rowID);17081 17082 deleted = psDBDeleteRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, popped, 0);17083 if (deleted != 1) {17084 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");17085 psFree(popped);17086 psFree(row);17087 return NULL;17088 }17089 17090 psFree(popped);17091 17092 *det_id = psMetadataLookupS32(&status, row, "det_id");17093 if (!status) {17094 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");17095 psFree(row);17096 return false;17097 }17098 *iteration = psMetadataLookupS32(&status, row, "iteration");17099 if (!status) {17100 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");17101 psFree(row);17102 return false;17103 }17104 *class_id = psMetadataLookupPtr(&status, row, "class_id");17105 if (!status) {17106 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");17107 psFree(row);17108 return false;17109 }17110 *uri = psMetadataLookupPtr(&status, row, "uri");17111 if (!status) {17112 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");17113 psFree(row);17114 return false;17115 }17116 *bg = psMetadataLookupF64(&status, row, "bg");17117 if (!status) {17118 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");17119 psFree(row);17120 return false;17121 }17122 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");17123 if (!status) {17124 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");17125 psFree(row);17126 return false;17127 }17128 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");17129 if (!status) {17130 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");17131 psFree(row);17132 return false;17133 }17134 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");17135 if (!status) {17136 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");17137 psFree(row);17138 return false;17139 }17140 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");17141 if (!status) {17142 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");17143 psFree(row);17144 return false;17145 }17146 17147 psFree(row);17148 17149 return true;17150 }17151 17152 12340 bool detNormalizedImfileInsertObject(psDB *dbh, detNormalizedImfileRow *object) 17153 12341 { … … 17164 12352 17165 12353 return true; 17166 }17167 17168 detNormalizedImfileRow *detNormalizedImfilePopObject(psDB *dbh)17169 {17170 psS32 det_id;17171 psS32 iteration;17172 char class_id[256];17173 char uri[256];17174 psF64 bg;17175 psF64 bg_stdev;17176 psF64 bg_mean_stdev;17177 char b1_uri[256];17178 char b2_uri[256];17179 17180 if (!detNormalizedImfilePop(dbh, &det_id, &iteration, (char **)&class_id, (char **)&uri, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {17181 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");17182 return NULL;17183 }17184 17185 return detNormalizedImfileRowAlloc(det_id, iteration, class_id, uri, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);17186 12354 } 17187 12355 … … 17221 12389 } 17222 12390 17223 bool detNormalizedImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)17224 {17225 char query[MAX_STRING_LENGTH];17226 17227 if (!detNormalizedImfileSelectRowsFits(dbh, fits, NULL, limit)) {17228 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");17229 return false;17230 }17231 17232 // remove limit rows from the end of the database17233 if (snprintf(query, MAX_STRING_LENGTH,17234 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",17235 DETNORMALIZEDIMFILE_TABLE_NAME, DETNORMALIZEDIMFILE_INDEX_NAME, limit) < 0) {17236 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);17237 return false;17238 }17239 17240 if (!p_psDBRunQuery(dbh, query)) {17241 psError(PS_ERR_UNKNOWN, false, "database query failed");17242 return false;17243 }17244 17245 return true;17246 }17247 17248 12391 bool detNormalizedImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 17249 12392 { 17250 12393 psArray *rowSet; 17251 psU64 i;17252 12394 17253 12395 rowSet = psDBSelectRows(dbh, DETNORMALIZEDIMFILE_TABLE_NAME, where, limit); 17254 12396 if (!rowSet) { 17255 12397 return false; 17256 }17257 17258 // strip index column17259 for (i = 0; i < rowSet->n; i++) {17260 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDIMFILE_INDEX_NAME)) {17261 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDIMFILE_INDEX_NAME);17262 psFree(rowSet);17263 return false;17264 }17265 12398 } 17266 12399 … … 17401 12534 if (!rowSet) { 17402 12535 return NULL; 17403 }17404 17405 // strip index column17406 for (i = 0; i < rowSet->n; i++) {17407 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDIMFILE_INDEX_NAME)) {17408 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDIMFILE_INDEX_NAME);17409 psFree(rowSet);17410 return false;17411 }17412 12536 } 17413 12537 … … 17529 12653 17530 12654 md = psMetadataAlloc(); 17531 if (!psMetadataAdd(md, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {17532 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETNORMALIZEDEXP_INDEX_NAME);17533 psFree(md);17534 return false;17535 }17536 12655 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 17537 12656 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 17654 12773 return deleted; 17655 12774 } 17656 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)17657 {17658 psArray *rowSet;17659 psMetadata *row;17660 psMetadata *popped;17661 long deleted;17662 bool status;17663 int rowID;17664 17665 rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, NULL, 1);17666 if (!rowSet) {17667 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);17668 psFree(rowSet);17669 return NULL;17670 }17671 17672 row = psArrayGet(rowSet, 0);17673 psMemIncrRefCounter(row);17674 if (!row) {17675 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");17676 return NULL;17677 }17678 psFree(rowSet);17679 17680 rowID = psMetadataLookupS32(&status, row, DETNORMALIZEDEXP_INDEX_NAME);17681 if (!status) {17682 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETNORMALIZEDEXP_INDEX_NAME);17683 psFree(row);17684 return NULL;17685 }17686 17687 popped = psMetadataAlloc();17688 psMetadataAddS32(popped, PS_LIST_TAIL, DETNORMALIZEDEXP_INDEX_NAME, 0, NULL, rowID);17689 17690 deleted = psDBDeleteRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, popped, 0);17691 if (deleted != 1) {17692 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");17693 psFree(popped);17694 psFree(row);17695 return NULL;17696 }17697 17698 psFree(popped);17699 17700 *det_id = psMetadataLookupS32(&status, row, "det_id");17701 if (!status) {17702 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");17703 psFree(row);17704 return false;17705 }17706 *iteration = psMetadataLookupS32(&status, row, "iteration");17707 if (!status) {17708 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");17709 psFree(row);17710 return false;17711 }17712 *recipe = psMetadataLookupPtr(&status, row, "recipe");17713 if (!status) {17714 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");17715 psFree(row);17716 return false;17717 }17718 *bg = psMetadataLookupF64(&status, row, "bg");17719 if (!status) {17720 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");17721 psFree(row);17722 return false;17723 }17724 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");17725 if (!status) {17726 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");17727 psFree(row);17728 return false;17729 }17730 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");17731 if (!status) {17732 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");17733 psFree(row);17734 return false;17735 }17736 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");17737 if (!status) {17738 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");17739 psFree(row);17740 return false;17741 }17742 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");17743 if (!status) {17744 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");17745 psFree(row);17746 return false;17747 }17748 17749 psFree(row);17750 17751 return true;17752 }17753 17754 12775 bool detNormalizedExpInsertObject(psDB *dbh, detNormalizedExpRow *object) 17755 12776 { … … 17766 12787 17767 12788 return true; 17768 }17769 17770 detNormalizedExpRow *detNormalizedExpPopObject(psDB *dbh)17771 {17772 psS32 det_id;17773 psS32 iteration;17774 char recipe[256];17775 psF64 bg;17776 psF64 bg_stdev;17777 psF64 bg_mean_stdev;17778 char b1_uri[256];17779 char b2_uri[256];17780 17781 if (!detNormalizedExpPop(dbh, &det_id, &iteration, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {17782 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");17783 return NULL;17784 }17785 17786 return detNormalizedExpRowAlloc(det_id, iteration, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);17787 12789 } 17788 12790 … … 17822 12824 } 17823 12825 17824 bool detNormalizedExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)17825 {17826 char query[MAX_STRING_LENGTH];17827 17828 if (!detNormalizedExpSelectRowsFits(dbh, fits, NULL, limit)) {17829 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");17830 return false;17831 }17832 17833 // remove limit rows from the end of the database17834 if (snprintf(query, MAX_STRING_LENGTH,17835 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",17836 DETNORMALIZEDEXP_TABLE_NAME, DETNORMALIZEDEXP_INDEX_NAME, limit) < 0) {17837 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);17838 return false;17839 }17840 17841 if (!p_psDBRunQuery(dbh, query)) {17842 psError(PS_ERR_UNKNOWN, false, "database query failed");17843 return false;17844 }17845 17846 return true;17847 }17848 17849 12826 bool detNormalizedExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 17850 12827 { 17851 12828 psArray *rowSet; 17852 psU64 i;17853 12829 17854 12830 rowSet = psDBSelectRows(dbh, DETNORMALIZEDEXP_TABLE_NAME, where, limit); 17855 12831 if (!rowSet) { 17856 12832 return false; 17857 }17858 17859 // strip index column17860 for (i = 0; i < rowSet->n; i++) {17861 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETNORMALIZEDEXP_INDEX_NAME)) {17862 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);17863 psFree(rowSet);17864 return false;17865 }17866 12833 } 17867 12834 … … 17991 12958 if (!rowSet) { 17992 12959 return NULL; 17993 }17994 17995 // strip index column17996 for (i = 0; i < rowSet->n; i++) {17997 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETNORMALIZEDEXP_INDEX_NAME)) {17998 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETNORMALIZEDEXP_INDEX_NAME);17999 psFree(rowSet);18000 return false;18001 }18002 12960 } 18003 12961 … … 18112 13070 18113 13071 md = psMetadataAlloc(); 18114 if (!psMetadataAdd(md, PS_LIST_TAIL, DETMASTERFRAME_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {18115 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETMASTERFRAME_INDEX_NAME);18116 psFree(md);18117 return false;18118 }18119 13072 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 18120 13073 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 18187 13140 return deleted; 18188 13141 } 18189 bool detMasterFramePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **comment)18190 {18191 psArray *rowSet;18192 psMetadata *row;18193 psMetadata *popped;18194 long deleted;18195 bool status;18196 int rowID;18197 18198 rowSet = psDBSelectRows(dbh, DETMASTERFRAME_TABLE_NAME, NULL, 1);18199 if (!rowSet) {18200 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERFRAME_INDEX_NAME);18201 psFree(rowSet);18202 return NULL;18203 }18204 18205 row = psArrayGet(rowSet, 0);18206 psMemIncrRefCounter(row);18207 if (!row) {18208 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");18209 return NULL;18210 }18211 psFree(rowSet);18212 18213 rowID = psMetadataLookupS32(&status, row, DETMASTERFRAME_INDEX_NAME);18214 if (!status) {18215 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERFRAME_INDEX_NAME);18216 psFree(row);18217 return NULL;18218 }18219 18220 popped = psMetadataAlloc();18221 psMetadataAddS32(popped, PS_LIST_TAIL, DETMASTERFRAME_INDEX_NAME, 0, NULL, rowID);18222 18223 deleted = psDBDeleteRows(dbh, DETMASTERFRAME_TABLE_NAME, popped, 0);18224 if (deleted != 1) {18225 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");18226 psFree(popped);18227 psFree(row);18228 return NULL;18229 }18230 18231 psFree(popped);18232 18233 *det_id = psMetadataLookupS32(&status, row, "det_id");18234 if (!status) {18235 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");18236 psFree(row);18237 return false;18238 }18239 *iteration = psMetadataLookupS32(&status, row, "iteration");18240 if (!status) {18241 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");18242 psFree(row);18243 return false;18244 }18245 *comment = psMetadataLookupPtr(&status, row, "comment");18246 if (!status) {18247 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item comment");18248 psFree(row);18249 return false;18250 }18251 18252 psFree(row);18253 18254 return true;18255 }18256 18257 13142 bool detMasterFrameInsertObject(psDB *dbh, detMasterFrameRow *object) 18258 13143 { … … 18269 13154 18270 13155 return true; 18271 }18272 18273 detMasterFrameRow *detMasterFramePopObject(psDB *dbh)18274 {18275 psS32 det_id;18276 psS32 iteration;18277 char comment[256];18278 18279 if (!detMasterFramePop(dbh, &det_id, &iteration, (char **)&comment)) {18280 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");18281 return NULL;18282 }18283 18284 return detMasterFrameRowAlloc(det_id, iteration, comment);18285 13156 } 18286 13157 … … 18320 13191 } 18321 13192 18322 bool detMasterFramePopFits(psDB *dbh, psFits *fits, unsigned long long limit)18323 {18324 char query[MAX_STRING_LENGTH];18325 18326 if (!detMasterFrameSelectRowsFits(dbh, fits, NULL, limit)) {18327 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");18328 return false;18329 }18330 18331 // remove limit rows from the end of the database18332 if (snprintf(query, MAX_STRING_LENGTH,18333 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",18334 DETMASTERFRAME_TABLE_NAME, DETMASTERFRAME_INDEX_NAME, limit) < 0) {18335 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);18336 return false;18337 }18338 18339 if (!p_psDBRunQuery(dbh, query)) {18340 psError(PS_ERR_UNKNOWN, false, "database query failed");18341 return false;18342 }18343 18344 return true;18345 }18346 18347 13193 bool detMasterFrameSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 18348 13194 { 18349 13195 psArray *rowSet; 18350 psU64 i;18351 13196 18352 13197 rowSet = psDBSelectRows(dbh, DETMASTERFRAME_TABLE_NAME, where, limit); 18353 13198 if (!rowSet) { 18354 13199 return false; 18355 }18356 18357 // strip index column18358 for (i = 0; i < rowSet->n; i++) {18359 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETMASTERFRAME_INDEX_NAME)) {18360 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERFRAME_INDEX_NAME);18361 psFree(rowSet);18362 return false;18363 }18364 13200 } 18365 13201 … … 18434 13270 if (!rowSet) { 18435 13271 return NULL; 18436 }18437 18438 // strip index column18439 for (i = 0; i < rowSet->n; i++) {18440 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETMASTERFRAME_INDEX_NAME)) {18441 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERFRAME_INDEX_NAME);18442 psFree(rowSet);18443 return false;18444 }18445 13272 } 18446 13273 … … 18558 13385 18559 13386 md = psMetadataAlloc(); 18560 if (!psMetadataAdd(md, PS_LIST_TAIL, DETMASTERIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {18561 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETMASTERIMFILE_INDEX_NAME);18562 psFree(md);18563 return false;18564 }18565 13387 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 18566 13388 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 18643 13465 return deleted; 18644 13466 } 18645 bool detMasterImfilePop(psDB *dbh, psS32 *det_id, char **class_id, char **uri, char **recipe)18646 {18647 psArray *rowSet;18648 psMetadata *row;18649 psMetadata *popped;18650 long deleted;18651 bool status;18652 int rowID;18653 18654 rowSet = psDBSelectRows(dbh, DETMASTERIMFILE_TABLE_NAME, NULL, 1);18655 if (!rowSet) {18656 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERIMFILE_INDEX_NAME);18657 psFree(rowSet);18658 return NULL;18659 }18660 18661 row = psArrayGet(rowSet, 0);18662 psMemIncrRefCounter(row);18663 if (!row) {18664 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");18665 return NULL;18666 }18667 psFree(rowSet);18668 18669 rowID = psMetadataLookupS32(&status, row, DETMASTERIMFILE_INDEX_NAME);18670 if (!status) {18671 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETMASTERIMFILE_INDEX_NAME);18672 psFree(row);18673 return NULL;18674 }18675 18676 popped = psMetadataAlloc();18677 psMetadataAddS32(popped, PS_LIST_TAIL, DETMASTERIMFILE_INDEX_NAME, 0, NULL, rowID);18678 18679 deleted = psDBDeleteRows(dbh, DETMASTERIMFILE_TABLE_NAME, popped, 0);18680 if (deleted != 1) {18681 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");18682 psFree(popped);18683 psFree(row);18684 return NULL;18685 }18686 18687 psFree(popped);18688 18689 *det_id = psMetadataLookupS32(&status, row, "det_id");18690 if (!status) {18691 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");18692 psFree(row);18693 return false;18694 }18695 *class_id = psMetadataLookupPtr(&status, row, "class_id");18696 if (!status) {18697 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");18698 psFree(row);18699 return false;18700 }18701 *uri = psMetadataLookupPtr(&status, row, "uri");18702 if (!status) {18703 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");18704 psFree(row);18705 return false;18706 }18707 *recipe = psMetadataLookupPtr(&status, row, "recipe");18708 if (!status) {18709 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");18710 psFree(row);18711 return false;18712 }18713 18714 psFree(row);18715 18716 return true;18717 }18718 18719 13467 bool detMasterImfileInsertObject(psDB *dbh, detMasterImfileRow *object) 18720 13468 { … … 18731 13479 18732 13480 return true; 18733 }18734 18735 detMasterImfileRow *detMasterImfilePopObject(psDB *dbh)18736 {18737 psS32 det_id;18738 char class_id[256];18739 char uri[256];18740 char recipe[256];18741 18742 if (!detMasterImfilePop(dbh, &det_id, (char **)&class_id, (char **)&uri, (char **)&recipe)) {18743 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");18744 return NULL;18745 }18746 18747 return detMasterImfileRowAlloc(det_id, class_id, uri, recipe);18748 13481 } 18749 13482 … … 18783 13516 } 18784 13517 18785 bool detMasterImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)18786 {18787 char query[MAX_STRING_LENGTH];18788 18789 if (!detMasterImfileSelectRowsFits(dbh, fits, NULL, limit)) {18790 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");18791 return false;18792 }18793 18794 // remove limit rows from the end of the database18795 if (snprintf(query, MAX_STRING_LENGTH,18796 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",18797 DETMASTERIMFILE_TABLE_NAME, DETMASTERIMFILE_INDEX_NAME, limit) < 0) {18798 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);18799 return false;18800 }18801 18802 if (!p_psDBRunQuery(dbh, query)) {18803 psError(PS_ERR_UNKNOWN, false, "database query failed");18804 return false;18805 }18806 18807 return true;18808 }18809 18810 13518 bool detMasterImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 18811 13519 { 18812 13520 psArray *rowSet; 18813 psU64 i;18814 13521 18815 13522 rowSet = psDBSelectRows(dbh, DETMASTERIMFILE_TABLE_NAME, where, limit); 18816 13523 if (!rowSet) { 18817 13524 return false; 18818 }18819 18820 // strip index column18821 for (i = 0; i < rowSet->n; i++) {18822 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETMASTERIMFILE_INDEX_NAME)) {18823 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERIMFILE_INDEX_NAME);18824 psFree(rowSet);18825 return false;18826 }18827 13525 } 18828 13526 … … 18908 13606 if (!rowSet) { 18909 13607 return NULL; 18910 }18911 18912 // strip index column18913 for (i = 0; i < rowSet->n; i++) {18914 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETMASTERIMFILE_INDEX_NAME)) {18915 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETMASTERIMFILE_INDEX_NAME);18916 psFree(rowSet);18917 return false;18918 }18919 13608 } 18920 13609 … … 19042 13731 19043 13732 md = psMetadataAlloc(); 19044 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {19045 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDIMFILE_INDEX_NAME);19046 psFree(md);19047 return false;19048 }19049 13733 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 19050 13734 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 19197 13881 return deleted; 19198 13882 } 19199 bool detResidImfilePop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, char **class_id, char **uri, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri)19200 {19201 psArray *rowSet;19202 psMetadata *row;19203 psMetadata *popped;19204 long deleted;19205 bool status;19206 int rowID;19207 19208 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, NULL, 1);19209 if (!rowSet) {19210 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME);19211 psFree(rowSet);19212 return NULL;19213 }19214 19215 row = psArrayGet(rowSet, 0);19216 psMemIncrRefCounter(row);19217 if (!row) {19218 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");19219 return NULL;19220 }19221 psFree(rowSet);19222 19223 rowID = psMetadataLookupS32(&status, row, DETRESIDIMFILE_INDEX_NAME);19224 if (!status) {19225 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDIMFILE_INDEX_NAME);19226 psFree(row);19227 return NULL;19228 }19229 19230 popped = psMetadataAlloc();19231 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDIMFILE_INDEX_NAME, 0, NULL, rowID);19232 19233 deleted = psDBDeleteRows(dbh, DETRESIDIMFILE_TABLE_NAME, popped, 0);19234 if (deleted != 1) {19235 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");19236 psFree(popped);19237 psFree(row);19238 return NULL;19239 }19240 19241 psFree(popped);19242 19243 *det_id = psMetadataLookupS32(&status, row, "det_id");19244 if (!status) {19245 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");19246 psFree(row);19247 return false;19248 }19249 *iteration = psMetadataLookupS32(&status, row, "iteration");19250 if (!status) {19251 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");19252 psFree(row);19253 return false;19254 }19255 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");19256 if (!status) {19257 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");19258 psFree(row);19259 return false;19260 }19261 *class_id = psMetadataLookupPtr(&status, row, "class_id");19262 if (!status) {19263 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item class_id");19264 psFree(row);19265 return false;19266 }19267 *uri = psMetadataLookupPtr(&status, row, "uri");19268 if (!status) {19269 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item uri");19270 psFree(row);19271 return false;19272 }19273 *recipe = psMetadataLookupPtr(&status, row, "recipe");19274 if (!status) {19275 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");19276 psFree(row);19277 return false;19278 }19279 *bg = psMetadataLookupF64(&status, row, "bg");19280 if (!status) {19281 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");19282 psFree(row);19283 return false;19284 }19285 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");19286 if (!status) {19287 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");19288 psFree(row);19289 return false;19290 }19291 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");19292 if (!status) {19293 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");19294 psFree(row);19295 return false;19296 }19297 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");19298 if (!status) {19299 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");19300 psFree(row);19301 return false;19302 }19303 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");19304 if (!status) {19305 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");19306 psFree(row);19307 return false;19308 }19309 19310 psFree(row);19311 19312 return true;19313 }19314 19315 13883 bool detResidImfileInsertObject(psDB *dbh, detResidImfileRow *object) 19316 13884 { … … 19327 13895 19328 13896 return true; 19329 }19330 19331 detResidImfileRow *detResidImfilePopObject(psDB *dbh)19332 {19333 psS32 det_id;19334 psS32 iteration;19335 char exp_tag[256];19336 char class_id[256];19337 char uri[256];19338 char recipe[256];19339 psF64 bg;19340 psF64 bg_stdev;19341 psF64 bg_mean_stdev;19342 char b1_uri[256];19343 char b2_uri[256];19344 19345 if (!detResidImfilePop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&class_id, (char **)&uri, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri)) {19346 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");19347 return NULL;19348 }19349 19350 return detResidImfileRowAlloc(det_id, iteration, exp_tag, class_id, uri, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri);19351 13897 } 19352 13898 … … 19386 13932 } 19387 13933 19388 bool detResidImfilePopFits(psDB *dbh, psFits *fits, unsigned long long limit)19389 {19390 char query[MAX_STRING_LENGTH];19391 19392 if (!detResidImfileSelectRowsFits(dbh, fits, NULL, limit)) {19393 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");19394 return false;19395 }19396 19397 // remove limit rows from the end of the database19398 if (snprintf(query, MAX_STRING_LENGTH,19399 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",19400 DETRESIDIMFILE_TABLE_NAME, DETRESIDIMFILE_INDEX_NAME, limit) < 0) {19401 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);19402 return false;19403 }19404 19405 if (!p_psDBRunQuery(dbh, query)) {19406 psError(PS_ERR_UNKNOWN, false, "database query failed");19407 return false;19408 }19409 19410 return true;19411 }19412 19413 13934 bool detResidImfileSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 19414 13935 { 19415 13936 psArray *rowSet; 19416 psU64 i;19417 13937 19418 13938 rowSet = psDBSelectRows(dbh, DETRESIDIMFILE_TABLE_NAME, where, limit); 19419 13939 if (!rowSet) { 19420 13940 return false; 19421 }19422 19423 // strip index column19424 for (i = 0; i < rowSet->n; i++) {19425 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDIMFILE_INDEX_NAME)) {19426 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME);19427 psFree(rowSet);19428 return false;19429 }19430 13941 } 19431 13942 … … 19588 14099 if (!rowSet) { 19589 14100 return NULL; 19590 }19591 19592 // strip index column19593 for (i = 0; i < rowSet->n; i++) {19594 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDIMFILE_INDEX_NAME)) {19595 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDIMFILE_INDEX_NAME);19596 psFree(rowSet);19597 return false;19598 }19599 14101 } 19600 14102 … … 19719 14221 19720 14222 md = psMetadataAlloc(); 19721 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {19722 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRESIDEXP_INDEX_NAME);19723 psFree(md);19724 return false;19725 }19726 14223 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 19727 14224 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 19864 14361 return deleted; 19865 14362 } 19866 bool detResidExpPop(psDB *dbh, psS32 *det_id, psS32 *iteration, char **exp_tag, char **recipe, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, char **b1_uri, char **b2_uri, bool *accept)19867 {19868 psArray *rowSet;19869 psMetadata *row;19870 psMetadata *popped;19871 long deleted;19872 bool status;19873 int rowID;19874 19875 rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, NULL, 1);19876 if (!rowSet) {19877 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME);19878 psFree(rowSet);19879 return NULL;19880 }19881 19882 row = psArrayGet(rowSet, 0);19883 psMemIncrRefCounter(row);19884 if (!row) {19885 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");19886 return NULL;19887 }19888 psFree(rowSet);19889 19890 rowID = psMetadataLookupS32(&status, row, DETRESIDEXP_INDEX_NAME);19891 if (!status) {19892 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRESIDEXP_INDEX_NAME);19893 psFree(row);19894 return NULL;19895 }19896 19897 popped = psMetadataAlloc();19898 psMetadataAddS32(popped, PS_LIST_TAIL, DETRESIDEXP_INDEX_NAME, 0, NULL, rowID);19899 19900 deleted = psDBDeleteRows(dbh, DETRESIDEXP_TABLE_NAME, popped, 0);19901 if (deleted != 1) {19902 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");19903 psFree(popped);19904 psFree(row);19905 return NULL;19906 }19907 19908 psFree(popped);19909 19910 *det_id = psMetadataLookupS32(&status, row, "det_id");19911 if (!status) {19912 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");19913 psFree(row);19914 return false;19915 }19916 *iteration = psMetadataLookupS32(&status, row, "iteration");19917 if (!status) {19918 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");19919 psFree(row);19920 return false;19921 }19922 *exp_tag = psMetadataLookupPtr(&status, row, "exp_tag");19923 if (!status) {19924 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item exp_tag");19925 psFree(row);19926 return false;19927 }19928 *recipe = psMetadataLookupPtr(&status, row, "recipe");19929 if (!status) {19930 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item recipe");19931 psFree(row);19932 return false;19933 }19934 *bg = psMetadataLookupF64(&status, row, "bg");19935 if (!status) {19936 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");19937 psFree(row);19938 return false;19939 }19940 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");19941 if (!status) {19942 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");19943 psFree(row);19944 return false;19945 }19946 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");19947 if (!status) {19948 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");19949 psFree(row);19950 return false;19951 }19952 *b1_uri = psMetadataLookupPtr(&status, row, "b1_uri");19953 if (!status) {19954 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b1_uri");19955 psFree(row);19956 return false;19957 }19958 *b2_uri = psMetadataLookupPtr(&status, row, "b2_uri");19959 if (!status) {19960 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item b2_uri");19961 psFree(row);19962 return false;19963 }19964 *accept = psMetadataLookupBool(&status, row, "accept");19965 if (!status) {19966 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");19967 psFree(row);19968 return false;19969 }19970 19971 psFree(row);19972 19973 return true;19974 }19975 19976 14363 bool detResidExpInsertObject(psDB *dbh, detResidExpRow *object) 19977 14364 { … … 19988 14375 19989 14376 return true; 19990 }19991 19992 detResidExpRow *detResidExpPopObject(psDB *dbh)19993 {19994 psS32 det_id;19995 psS32 iteration;19996 char exp_tag[256];19997 char recipe[256];19998 psF64 bg;19999 psF64 bg_stdev;20000 psF64 bg_mean_stdev;20001 char b1_uri[256];20002 char b2_uri[256];20003 bool accept;20004 20005 if (!detResidExpPop(dbh, &det_id, &iteration, (char **)&exp_tag, (char **)&recipe, &bg, &bg_stdev, &bg_mean_stdev, (char **)&b1_uri, (char **)&b2_uri, &accept)) {20006 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");20007 return NULL;20008 }20009 20010 return detResidExpRowAlloc(det_id, iteration, exp_tag, recipe, bg, bg_stdev, bg_mean_stdev, b1_uri, b2_uri, accept);20011 14377 } 20012 14378 … … 20046 14412 } 20047 14413 20048 bool detResidExpPopFits(psDB *dbh, psFits *fits, unsigned long long limit)20049 {20050 char query[MAX_STRING_LENGTH];20051 20052 if (!detResidExpSelectRowsFits(dbh, fits, NULL, limit)) {20053 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");20054 return false;20055 }20056 20057 // remove limit rows from the end of the database20058 if (snprintf(query, MAX_STRING_LENGTH,20059 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",20060 DETRESIDEXP_TABLE_NAME, DETRESIDEXP_INDEX_NAME, limit) < 0) {20061 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);20062 return false;20063 }20064 20065 if (!p_psDBRunQuery(dbh, query)) {20066 psError(PS_ERR_UNKNOWN, false, "database query failed");20067 return false;20068 }20069 20070 return true;20071 }20072 20073 14414 bool detResidExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 20074 14415 { 20075 14416 psArray *rowSet; 20076 psU64 i;20077 14417 20078 14418 rowSet = psDBSelectRows(dbh, DETRESIDEXP_TABLE_NAME, where, limit); 20079 14419 if (!rowSet) { 20080 14420 return false; 20081 }20082 20083 // strip index column20084 for (i = 0; i < rowSet->n; i++) {20085 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRESIDEXP_INDEX_NAME)) {20086 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME);20087 psFree(rowSet);20088 return false;20089 }20090 14421 } 20091 14422 … … 20237 14568 if (!rowSet) { 20238 14569 return NULL; 20239 }20240 20241 // strip index column20242 for (i = 0; i < rowSet->n; i++) {20243 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRESIDEXP_INDEX_NAME)) {20244 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRESIDEXP_INDEX_NAME);20245 psFree(rowSet);20246 return false;20247 }20248 14570 } 20249 14571 … … 20360 14682 20361 14683 md = psMetadataAlloc(); 20362 if (!psMetadataAdd(md, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, PS_DATA_S32, "AUTO_INCREMENT", 0.0)) {20363 psError(PS_ERR_UNKNOWN, false, "failed to add item %s", DETRUNSUMMARY_INDEX_NAME);20364 psFree(md);20365 return false;20366 }20367 14684 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, "Primary Key", 0)) { 20368 14685 psError(PS_ERR_UNKNOWN, false, "failed to add item det_id"); … … 20465 14782 return deleted; 20466 14783 } 20467 bool detRunSummaryPop(psDB *dbh, psS32 *det_id, psS32 *iteration, psF64 *bg, psF64 *bg_stdev, psF64 *bg_mean_stdev, bool *accept)20468 {20469 psArray *rowSet;20470 psMetadata *row;20471 psMetadata *popped;20472 long deleted;20473 bool status;20474 int rowID;20475 20476 rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, NULL, 1);20477 if (!rowSet) {20478 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);20479 psFree(rowSet);20480 return NULL;20481 }20482 20483 row = psArrayGet(rowSet, 0);20484 psMemIncrRefCounter(row);20485 if (!row) {20486 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");20487 return NULL;20488 }20489 psFree(rowSet);20490 20491 rowID = psMetadataLookupS32(&status, row, DETRUNSUMMARY_INDEX_NAME);20492 if (!status) {20493 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item %s", DETRUNSUMMARY_INDEX_NAME);20494 psFree(row);20495 return NULL;20496 }20497 20498 popped = psMetadataAlloc();20499 psMetadataAddS32(popped, PS_LIST_TAIL, DETRUNSUMMARY_INDEX_NAME, 0, NULL, rowID);20500 20501 deleted = psDBDeleteRows(dbh, DETRUNSUMMARY_TABLE_NAME, popped, 0);20502 if (deleted != 1) {20503 psError(PS_ERR_UNKNOWN, false, "database failed to delete row");20504 psFree(popped);20505 psFree(row);20506 return NULL;20507 }20508 20509 psFree(popped);20510 20511 *det_id = psMetadataLookupS32(&status, row, "det_id");20512 if (!status) {20513 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item det_id");20514 psFree(row);20515 return false;20516 }20517 *iteration = psMetadataLookupS32(&status, row, "iteration");20518 if (!status) {20519 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item iteration");20520 psFree(row);20521 return false;20522 }20523 *bg = psMetadataLookupF64(&status, row, "bg");20524 if (!status) {20525 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg");20526 psFree(row);20527 return false;20528 }20529 *bg_stdev = psMetadataLookupF64(&status, row, "bg_stdev");20530 if (!status) {20531 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_stdev");20532 psFree(row);20533 return false;20534 }20535 *bg_mean_stdev = psMetadataLookupF64(&status, row, "bg_mean_stdev");20536 if (!status) {20537 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item bg_mean_stdev");20538 psFree(row);20539 return false;20540 }20541 *accept = psMetadataLookupBool(&status, row, "accept");20542 if (!status) {20543 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item accept");20544 psFree(row);20545 return false;20546 }20547 20548 psFree(row);20549 20550 return true;20551 }20552 20553 14784 bool detRunSummaryInsertObject(psDB *dbh, detRunSummaryRow *object) 20554 14785 { … … 20565 14796 20566 14797 return true; 20567 }20568 20569 detRunSummaryRow *detRunSummaryPopObject(psDB *dbh)20570 {20571 psS32 det_id;20572 psS32 iteration;20573 psF64 bg;20574 psF64 bg_stdev;20575 psF64 bg_mean_stdev;20576 bool accept;20577 20578 if (!detRunSummaryPop(dbh, &det_id, &iteration, &bg, &bg_stdev, &bg_mean_stdev, &accept)) {20579 psError(PS_ERR_UNKNOWN, false, "failed to pop a database row");20580 return NULL;20581 }20582 20583 return detRunSummaryRowAlloc(det_id, iteration, bg, bg_stdev, bg_mean_stdev, accept);20584 14798 } 20585 14799 … … 20619 14833 } 20620 14834 20621 bool detRunSummaryPopFits(psDB *dbh, psFits *fits, unsigned long long limit)20622 {20623 char query[MAX_STRING_LENGTH];20624 20625 if (!detRunSummarySelectRowsFits(dbh, fits, NULL, limit)) {20626 psError(PS_ERR_UNKNOWN, true, "database error or table is empty");20627 return false;20628 }20629 20630 // remove limit rows from the end of the database20631 if (snprintf(query, MAX_STRING_LENGTH,20632 "DELETE FROM %s ORDER BY %s DESC LIMIT %lld",20633 DETRUNSUMMARY_TABLE_NAME, DETRUNSUMMARY_INDEX_NAME, limit) < 0) {20634 psError(PS_ERR_UNKNOWN, true, "query value attempted to exceed %d bytes", MAX_STRING_LENGTH);20635 return false;20636 }20637 20638 if (!p_psDBRunQuery(dbh, query)) {20639 psError(PS_ERR_UNKNOWN, false, "database query failed");20640 return false;20641 }20642 20643 return true;20644 }20645 20646 14835 bool detRunSummarySelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 20647 14836 { 20648 14837 psArray *rowSet; 20649 psU64 i;20650 14838 20651 14839 rowSet = psDBSelectRows(dbh, DETRUNSUMMARY_TABLE_NAME, where, limit); 20652 14840 if (!rowSet) { 20653 14841 return false; 20654 }20655 20656 // strip index column20657 for (i = 0; i < rowSet->n; i++) {20658 if (!psMetadataRemove((psMetadata *)rowSet->data[i], 0, DETRUNSUMMARY_INDEX_NAME)) {20659 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);20660 psFree(rowSet);20661 return false;20662 }20663 14842 } 20664 14843 … … 20766 14945 if (!rowSet) { 20767 14946 return NULL; 20768 }20769 20770 // strip index column20771 for (i = 0; i < rowSet->n; i++) {20772 if (!psMetadataRemove((psMetadata *)(rowSet->data[i]), 0, DETRUNSUMMARY_INDEX_NAME)) {20773 psError(PS_ERR_UNKNOWN, true, "failed to remove item %s", DETRUNSUMMARY_INDEX_NAME);20774 psFree(rowSet);20775 return false;20776 }20777 14947 } 20778 14948 -
trunk/ippdb/src/ippdb.h
r9307 r9423 1 1 /* 2 * 3 * This file was generated by glueforge 0.25 2 * header.c 3 * 4 * Copyright (C) 2006 Joshua Hoblitt 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License as published by the Free 8 * Software Foundation; version 2 of the License. 9 * 10 * This program is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 * 15 * You should have received a copy of the GNU General Public License along with 16 * program; see the file COPYING. If not, write to the Free Software 17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 18 */ 19 20 /* 21 * 22 * This file was generated by glueforge 0.29 4 23 * 5 24 * Do NOT directly edit this file. … … 29 48 const char *user, ///< Database username 30 49 const char *passwd, ///< Database password 31 const char *dbname ///< Database table.namespace 50 const char *dbname, ///< Database table.namespace 51 unsigned int port ///< Database port 32 52 ); 33 53 … … 182 202 ); 183 203 184 /** Removes the last row from the database and returns it185 *186 * @return true on success187 */188 189 bool weatherPop(190 psDB *dbh, ///< Database handle191 psF32 *temp01,192 psF32 *humi01,193 psF32 *temp02,194 psF32 *humi02,195 psF32 *temp03,196 psF32 *humi03,197 psF32 *pressure198 );199 200 204 /** Insert a single weatherRow object into a table 201 205 * … … 220 224 psDB *dbh, ///< Database handle 221 225 psArray *objects ///< array of weatherRow objects 222 );223 224 /** Removes the last row from the database and returns it225 *226 * @return A new weatherRow on success or NULL on failure.227 */228 229 weatherRow *weatherPopObject(230 psDB *dbh ///< Database handle231 226 ); 232 227 … … 244 239 psDB *dbh, ///< Database handle 245 240 const psFits *fits ///< psFits object 246 );247 248 /** Removes the last limit row from the database and returns them in a binary FITS table.249 *250 * This function assumes an empty psFits object and will create a FITS table as251 * the first extension.252 *253 * @return true on success254 */255 256 bool weatherPopFits(257 psDB *dbh, ///< Database handle258 psFits *fits, ///< psFits object259 unsigned long long limit ///< Maximum number of elements to return260 241 ); 261 242 … … 421 402 ); 422 403 423 /** Removes the last row from the database and returns it424 *425 * @return true on success426 */427 428 bool skyp_transparencyPop(429 psDB *dbh, ///< Database handle430 char **filter,431 psF64 *trans,432 psS32 *nstars,433 psF64 *ra,434 psF64 *decl,435 psF32 *exptime,436 psF64 *sky_bright437 );438 439 404 /** Insert a single skyp_transparencyRow object into a table 440 405 * … … 459 424 psDB *dbh, ///< Database handle 460 425 psArray *objects ///< array of skyp_transparencyRow objects 461 );462 463 /** Removes the last row from the database and returns it464 *465 * @return A new skyp_transparencyRow on success or NULL on failure.466 */467 468 skyp_transparencyRow *skyp_transparencyPopObject(469 psDB *dbh ///< Database handle470 426 ); 471 427 … … 483 439 psDB *dbh, ///< Database handle 484 440 const psFits *fits ///< psFits object 485 );486 487 /** Removes the last limit row from the database and returns them in a binary FITS table.488 *489 * This function assumes an empty psFits object and will create a FITS table as490 * the first extension.491 *492 * @return true on success493 */494 495 bool skyp_transparencyPopFits(496 psDB *dbh, ///< Database handle497 psFits *fits, ///< psFits object498 unsigned long long limit ///< Maximum number of elements to return499 441 ); 500 442 … … 666 608 ); 667 609 668 /** Removes the last row from the database and returns it669 *670 * @return true on success671 */672 673 bool skyp_absorptionPop(674 psDB *dbh, ///< Database handle675 char **disperser_id,676 psF32 *atmcomp1,677 psF32 *atmcomp2,678 psF32 *atmcomp3,679 psS32 *nstars,680 psF64 *ra,681 psF64 *decl,682 psF32 *exptime,683 psF64 *sky_bright684 );685 686 610 /** Insert a single skyp_absorptionRow object into a table 687 611 * … … 706 630 psDB *dbh, ///< Database handle 707 631 psArray *objects ///< array of skyp_absorptionRow objects 708 );709 710 /** Removes the last row from the database and returns it711 *712 * @return A new skyp_absorptionRow on success or NULL on failure.713 */714 715 skyp_absorptionRow *skyp_absorptionPopObject(716 psDB *dbh ///< Database handle717 632 ); 718 633 … … 730 645 psDB *dbh, ///< Database handle 731 646 const psFits *fits ///< psFits object 732 );733 734 /** Removes the last limit row from the database and returns them in a binary FITS table.735 *736 * This function assumes an empty psFits object and will create a FITS table as737 * the first extension.738 *739 * @return true on success740 */741 742 bool skyp_absorptionPopFits(743 psDB *dbh, ///< Database handle744 psFits *fits, ///< psFits object745 unsigned long long limit ///< Maximum number of elements to return746 647 ); 747 648 … … 904 805 ); 905 806 906 /** Removes the last row from the database and returns it907 *908 * @return true on success909 */910 911 bool skyp_emissionPop(912 psDB *dbh, ///< Database handle913 char **disperser_id,914 psF32 *atmcomp1,915 psF32 *atmcomp2,916 psF32 *atmcomp3,917 psF32 *continuum,918 psF32 *exptime919 );920 921 807 /** Insert a single skyp_emissionRow object into a table 922 808 * … … 941 827 psDB *dbh, ///< Database handle 942 828 psArray *objects ///< array of skyp_emissionRow objects 943 );944 945 /** Removes the last row from the database and returns it946 *947 * @return A new skyp_emissionRow on success or NULL on failure.948 */949 950 skyp_emissionRow *skyp_emissionPopObject(951 psDB *dbh ///< Database handle952 829 ); 953 830 … … 965 842 psDB *dbh, ///< Database handle 966 843 const psFits *fits ///< psFits object 967 );968 969 /** Removes the last limit row from the database and returns them in a binary FITS table.970 *971 * This function assumes an empty psFits object and will create a FITS table as972 * the first extension.973 *974 * @return true on success975 */976 977 bool skyp_emissionPopFits(978 psDB *dbh, ///< Database handle979 psFits *fits, ///< psFits object980 unsigned long long limit ///< Maximum number of elements to return981 844 ); 982 845 … … 1142 1005 ); 1143 1006 1144 /** Removes the last row from the database and returns it1145 *1146 * @return true on success1147 */1148 1149 bool dimmPop(1150 psDB *dbh, ///< Database handle1151 psF32 *sigmax,1152 psF32 *sigmay,1153 psF32 *fwhm,1154 psF64 *ra,1155 psF64 *decl,1156 psF32 *expttime,1157 char **telescope_id1158 );1159 1160 1007 /** Insert a single dimmRow object into a table 1161 1008 * … … 1180 1027 psDB *dbh, ///< Database handle 1181 1028 psArray *objects ///< array of dimmRow objects 1182 );1183 1184 /** Removes the last row from the database and returns it1185 *1186 * @return A new dimmRow on success or NULL on failure.1187 */1188 1189 dimmRow *dimmPopObject(1190 psDB *dbh ///< Database handle1191 1029 ); 1192 1030 … … 1204 1042 psDB *dbh, ///< Database handle 1205 1043 const psFits *fits ///< psFits object 1206 );1207 1208 /** Removes the last limit row from the database and returns them in a binary FITS table.1209 *1210 * This function assumes an empty psFits object and will create a FITS table as1211 * the first extension.1212 *1213 * @return true on success1214 */1215 1216 bool dimmPopFits(1217 psDB *dbh, ///< Database handle1218 psFits *fits, ///< psFits object1219 unsigned long long limit ///< Maximum number of elements to return1220 1044 ); 1221 1045 … … 1378 1202 ); 1379 1203 1380 /** Removes the last row from the database and returns it1381 *1382 * @return true on success1383 */1384 1385 bool skyp_irPop(1386 psDB *dbh, ///< Database handle1387 psF64 *sky_bright,1388 psF64 *sky_var,1389 psF64 *ra,1390 psF64 *decl,1391 psF32 *fov_x,1392 psF32 *fov_y1393 );1394 1395 1204 /** Insert a single skyp_irRow object into a table 1396 1205 * … … 1415 1224 psDB *dbh, ///< Database handle 1416 1225 psArray *objects ///< array of skyp_irRow objects 1417 );1418 1419 /** Removes the last row from the database and returns it1420 *1421 * @return A new skyp_irRow on success or NULL on failure.1422 */1423 1424 skyp_irRow *skyp_irPopObject(1425 psDB *dbh ///< Database handle1426 1226 ); 1427 1227 … … 1439 1239 psDB *dbh, ///< Database handle 1440 1240 const psFits *fits ///< psFits object 1441 );1442 1443 /** Removes the last limit row from the database and returns them in a binary FITS table.1444 *1445 * This function assumes an empty psFits object and will create a FITS table as1446 * the first extension.1447 *1448 * @return true on success1449 */1450 1451 bool skyp_irPopFits(1452 psDB *dbh, ///< Database handle1453 psFits *fits, ///< psFits object1454 unsigned long long limit ///< Maximum number of elements to return1455 1241 ); 1456 1242 … … 1607 1393 ); 1608 1394 1609 /** Removes the last row from the database and returns it1610 *1611 * @return true on success1612 */1613 1614 bool domePop(1615 psDB *dbh, ///< Database handle1616 psF32 *az,1617 bool *open,1618 bool *light,1619 bool *track1620 );1621 1622 1395 /** Insert a single domeRow object into a table 1623 1396 * … … 1642 1415 psDB *dbh, ///< Database handle 1643 1416 psArray *objects ///< array of domeRow objects 1644 );1645 1646 /** Removes the last row from the database and returns it1647 *1648 * @return A new domeRow on success or NULL on failure.1649 */1650 1651 domeRow *domePopObject(1652 psDB *dbh ///< Database handle1653 1417 ); 1654 1418 … … 1666 1430 psDB *dbh, ///< Database handle 1667 1431 const psFits *fits ///< psFits object 1668 );1669 1670 /** Removes the last limit row from the database and returns them in a binary FITS table.1671 *1672 * This function assumes an empty psFits object and will create a FITS table as1673 * the first extension.1674 *1675 * @return true on success1676 */1677 1678 bool domePopFits(1679 psDB *dbh, ///< Database handle1680 psFits *fits, ///< psFits object1681 unsigned long long limit ///< Maximum number of elements to return1682 1432 ); 1683 1433 … … 1837 1587 ); 1838 1588 1839 /** Removes the last row from the database and returns it1840 *1841 * @return true on success1842 */1843 1844 bool telescopePop(1845 psDB *dbh, ///< Database handle1846 char **guide,1847 psF32 *alt,1848 psF32 *az,1849 psF64 *ra,1850 psF64 *decl1851 );1852 1853 1589 /** Insert a single telescopeRow object into a table 1854 1590 * … … 1873 1609 psDB *dbh, ///< Database handle 1874 1610 psArray *objects ///< array of telescopeRow objects 1875 );1876 1877 /** Removes the last row from the database and returns it1878 *1879 * @return A new telescopeRow on success or NULL on failure.1880 */1881 1882 telescopeRow *telescopePopObject(1883 psDB *dbh ///< Database handle1884 1611 ); 1885 1612 … … 1897 1624 psDB *dbh, ///< Database handle 1898 1625 const psFits *fits ///< psFits object 1899 );1900 1901 /** Removes the last limit row from the database and returns them in a binary FITS table.1902 *1903 * This function assumes an empty psFits object and will create a FITS table as1904 * the first extension.1905 *1906 * @return true on success1907 */1908 1909 bool telescopePopFits(1910 psDB *dbh, ///< Database handle1911 psFits *fits, ///< psFits object1912 unsigned long long limit ///< Maximum number of elements to return1913 1626 ); 1914 1627 … … 2068 1781 ); 2069 1782 2070 /** Removes the last row from the database and returns it2071 *2072 * @return true on success2073 */2074 2075 bool summitExpPop(2076 psDB *dbh, ///< Database handle2077 char **exp_id,2078 char **camera,2079 char **telescope,2080 char **exp_type,2081 char **uri2082 );2083 2084 1783 /** Insert a single summitExpRow object into a table 2085 1784 * … … 2104 1803 psDB *dbh, ///< Database handle 2105 1804 psArray *objects ///< array of summitExpRow objects 2106 );2107 2108 /** Removes the last row from the database and returns it2109 *2110 * @return A new summitExpRow on success or NULL on failure.2111 */2112 2113 summitExpRow *summitExpPopObject(2114 psDB *dbh ///< Database handle2115 1805 ); 2116 1806 … … 2128 1818 psDB *dbh, ///< Database handle 2129 1819 const psFits *fits ///< psFits object 2130 );2131 2132 /** Removes the last limit row from the database and returns them in a binary FITS table.2133 *2134 * This function assumes an empty psFits object and will create a FITS table as2135 * the first extension.2136 *2137 * @return true on success2138 */2139 2140 bool summitExpPopFits(2141 psDB *dbh, ///< Database handle2142 psFits *fits, ///< psFits object2143 unsigned long long limit ///< Maximum number of elements to return2144 1820 ); 2145 1821 … … 2299 1975 ); 2300 1976 2301 /** Removes the last row from the database and returns it2302 *2303 * @return true on success2304 */2305 2306 bool pzPendingExpPop(2307 psDB *dbh, ///< Database handle2308 char **exp_id,2309 char **camera,2310 char **telescope,2311 char **exp_type,2312 psS32 *imfiles2313 );2314 2315 1977 /** Insert a single pzPendingExpRow object into a table 2316 1978 * … … 2335 1997 psDB *dbh, ///< Database handle 2336 1998 psArray *objects ///< array of pzPendingExpRow objects 2337 );2338 2339 /** Removes the last row from the database and returns it2340 *2341 * @return A new pzPendingExpRow on success or NULL on failure.2342 */2343 2344 pzPendingExpRow *pzPendingExpPopObject(2345 psDB *dbh ///< Database handle2346 1999 ); 2347 2000 … … 2359 2012 psDB *dbh, ///< Database handle 2360 2013 const psFits *fits ///< psFits object 2361 );2362 2363 /** Removes the last limit row from the database and returns them in a binary FITS table.2364 *2365 * This function assumes an empty psFits object and will create a FITS table as2366 * the first extension.2367 *2368 * @return true on success2369 */2370 2371 bool pzPendingExpPopFits(2372 psDB *dbh, ///< Database handle2373 psFits *fits, ///< psFits object2374 unsigned long long limit ///< Maximum number of elements to return2375 2014 ); 2376 2015 … … 2539 2178 ); 2540 2179 2541 /** Removes the last row from the database and returns it2542 *2543 * @return true on success2544 */2545 2546 bool pzPendingImfilePop(2547 psDB *dbh, ///< Database handle2548 char **exp_id,2549 char **camera,2550 char **telescope,2551 psS32 *bytes,2552 char **md5sum,2553 char **class,2554 char **class_id,2555 char **uri2556 );2557 2558 2180 /** Insert a single pzPendingImfileRow object into a table 2559 2181 * … … 2578 2200 psDB *dbh, ///< Database handle 2579 2201 psArray *objects ///< array of pzPendingImfileRow objects 2580 );2581 2582 /** Removes the last row from the database and returns it2583 *2584 * @return A new pzPendingImfileRow on success or NULL on failure.2585 */2586 2587 pzPendingImfileRow *pzPendingImfilePopObject(2588 psDB *dbh ///< Database handle2589 2202 ); 2590 2203 … … 2602 2215 psDB *dbh, ///< Database handle 2603 2216 const psFits *fits ///< psFits object 2604 );2605 2606 /** Removes the last limit row from the database and returns them in a binary FITS table.2607 *2608 * This function assumes an empty psFits object and will create a FITS table as2609 * the first extension.2610 *2611 * @return true on success2612 */2613 2614 bool pzPendingImfilePopFits(2615 psDB *dbh, ///< Database handle2616 psFits *fits, ///< psFits object2617 unsigned long long limit ///< Maximum number of elements to return2618 2217 ); 2619 2218 … … 2776 2375 ); 2777 2376 2778 /** Removes the last row from the database and returns it2779 *2780 * @return true on success2781 */2782 2783 bool newExpPop(2784 psDB *dbh, ///< Database handle2785 char **exp_tag,2786 char **exp_id,2787 char **camera,2788 char **telescope,2789 char **exp_type,2790 psS32 *imfiles2791 );2792 2793 2377 /** Insert a single newExpRow object into a table 2794 2378 * … … 2813 2397 psDB *dbh, ///< Database handle 2814 2398 psArray *objects ///< array of newExpRow objects 2815 );2816 2817 /** Removes the last row from the database and returns it2818 *2819 * @return A new newExpRow on success or NULL on failure.2820 */2821 2822 newExpRow *newExpPopObject(2823 psDB *dbh ///< Database handle2824 2399 ); 2825 2400 … … 2837 2412 psDB *dbh, ///< Database handle 2838 2413 const psFits *fits ///< psFits object 2839 );2840 2841 /** Removes the last limit row from the database and returns them in a binary FITS table.2842 *2843 * This function assumes an empty psFits object and will create a FITS table as2844 * the first extension.2845 *2846 * @return true on success2847 */2848 2849 bool newExpPopFits(2850 psDB *dbh, ///< Database handle2851 psFits *fits, ///< psFits object2852 unsigned long long limit ///< Maximum number of elements to return2853 2414 ); 2854 2415 … … 3005 2566 ); 3006 2567 3007 /** Removes the last row from the database and returns it3008 *3009 * @return true on success3010 */3011 3012 bool newImfilePop(3013 psDB *dbh, ///< Database handle3014 char **exp_tag,3015 char **class,3016 char **class_id,3017 char **uri3018 );3019 3020 2568 /** Insert a single newImfileRow object into a table 3021 2569 * … … 3040 2588 psDB *dbh, ///< Database handle 3041 2589 psArray *objects ///< array of newImfileRow objects 3042 );3043 3044 /** Removes the last row from the database and returns it3045 *3046 * @return A new newImfileRow on success or NULL on failure.3047 */3048 3049 newImfileRow *newImfilePopObject(3050 psDB *dbh ///< Database handle3051 2590 ); 3052 2591 … … 3064 2603 psDB *dbh, ///< Database handle 3065 2604 const psFits *fits ///< psFits object 3066 );3067 3068 /** Removes the last limit row from the database and returns them in a binary FITS table.3069 *3070 * This function assumes an empty psFits object and will create a FITS table as3071 * the first extension.3072 *3073 * @return true on success3074 */3075 3076 bool newImfilePopFits(3077 psDB *dbh, ///< Database handle3078 psFits *fits, ///< psFits object3079 unsigned long long limit ///< Maximum number of elements to return3080 2605 ); 3081 2606 … … 3274 2799 ); 3275 2800 3276 /** Removes the last row from the database and returns it3277 *3278 * @return true on success3279 */3280 3281 bool rawDetrendExpPop(3282 psDB *dbh, ///< Database handle3283 char **exp_tag,3284 char **camera,3285 char **telescope,3286 char **exp_type,3287 psS32 *imfiles,3288 char **filter,3289 psF32 *airmass,3290 psF64 *ra,3291 psF64 *decl,3292 psF32 *exp_time,3293 psF64 *bg,3294 psF64 *bg_stdev,3295 psF64 *bg_mean_stdev,3296 psF64 *alt,3297 psF64 *az,3298 psF32 *ccd_temp,3299 psF64 *posang,3300 char **object3301 );3302 3303 2801 /** Insert a single rawDetrendExpRow object into a table 3304 2802 * … … 3323 2821 psDB *dbh, ///< Database handle 3324 2822 psArray *objects ///< array of rawDetrendExpRow objects 3325 );3326 3327 /** Removes the last row from the database and returns it3328 *3329 * @return A new rawDetrendExpRow on success or NULL on failure.3330 */3331 3332 rawDetrendExpRow *rawDetrendExpPopObject(3333 psDB *dbh ///< Database handle3334 2823 ); 3335 2824 … … 3347 2836 psDB *dbh, ///< Database handle 3348 2837 const psFits *fits ///< psFits object 3349 );3350 3351 /** Removes the last limit row from the database and returns them in a binary FITS table.3352 *3353 * This function assumes an empty psFits object and will create a FITS table as3354 * the first extension.3355 *3356 * @return true on success3357 */3358 3359 bool rawDetrendExpPopFits(3360 psDB *dbh, ///< Database handle3361 psFits *fits, ///< psFits object3362 unsigned long long limit ///< Maximum number of elements to return3363 2838 ); 3364 2839 … … 3557 3032 ); 3558 3033 3559 /** Removes the last row from the database and returns it3560 *3561 * @return true on success3562 */3563 3564 bool rawScienceExpPop(3565 psDB *dbh, ///< Database handle3566 char **exp_tag,3567 char **camera,3568 char **telescope,3569 char **exp_type,3570 psS32 *imfiles,3571 char **filter,3572 psF32 *airmass,3573 psF64 *ra,3574 psF64 *decl,3575 psF32 *exp_time,3576 psF64 *bg,3577 psF64 *bg_stdev,3578 psF64 *bg_mean_stdev,3579 psF64 *alt,3580 psF64 *az,3581 psF32 *ccd_temp,3582 psF64 *posang,3583 char **object3584 );3585 3586 3034 /** Insert a single rawScienceExpRow object into a table 3587 3035 * … … 3606 3054 psDB *dbh, ///< Database handle 3607 3055 psArray *objects ///< array of rawScienceExpRow objects 3608 );3609 3610 /** Removes the last row from the database and returns it3611 *3612 * @return A new rawScienceExpRow on success or NULL on failure.3613 */3614 3615 rawScienceExpRow *rawScienceExpPopObject(3616 psDB *dbh ///< Database handle3617 3056 ); 3618 3057 … … 3630 3069 psDB *dbh, ///< Database handle 3631 3070 const psFits *fits ///< psFits object 3632 );3633 3634 /** Removes the last limit row from the database and returns them in a binary FITS table.3635 *3636 * This function assumes an empty psFits object and will create a FITS table as3637 * the first extension.3638 *3639 * @return true on success3640 */3641 3642 bool rawScienceExpPopFits(3643 psDB *dbh, ///< Database handle3644 psFits *fits, ///< psFits object3645 unsigned long long limit ///< Maximum number of elements to return3646 3071 ); 3647 3072 … … 3840 3265 ); 3841 3266 3842 /** Removes the last row from the database and returns it3843 *3844 * @return true on success3845 */3846 3847 bool rawImfilePop(3848 psDB *dbh, ///< Database handle3849 char **exp_tag,3850 char **class,3851 char **class_id,3852 char **uri,3853 char **exp_type,3854 char **filter,3855 psF32 *airmass,3856 psF64 *ra,3857 psF64 *decl,3858 psF32 *exp_time,3859 psF64 *bg,3860 psF64 *bg_stdev,3861 psF64 *bg_mean_stdev,3862 psF64 *alt,3863 psF64 *az,3864 psF32 *ccd_temp,3865 psF64 *posang,3866 char **object3867 );3868 3869 3267 /** Insert a single rawImfileRow object into a table 3870 3268 * … … 3889 3287 psDB *dbh, ///< Database handle 3890 3288 psArray *objects ///< array of rawImfileRow objects 3891 );3892 3893 /** Removes the last row from the database and returns it3894 *3895 * @return A new rawImfileRow on success or NULL on failure.3896 */3897 3898 rawImfileRow *rawImfilePopObject(3899 psDB *dbh ///< Database handle3900 3289 ); 3901 3290 … … 3913 3302 psDB *dbh, ///< Database handle 3914 3303 const psFits *fits ///< psFits object 3915 );3916 3917 /** Removes the last limit row from the database and returns them in a binary FITS table.3918 *3919 * This function assumes an empty psFits object and will create a FITS table as3920 * the first extension.3921 *3922 * @return true on success3923 */3924 3925 bool rawImfilePopFits(3926 psDB *dbh, ///< Database handle3927 psFits *fits, ///< psFits object3928 unsigned long long limit ///< Maximum number of elements to return3929 3304 ); 3930 3305 … … 4078 3453 ); 4079 3454 4080 /** Removes the last row from the database and returns it4081 *4082 * @return true on success4083 */4084 4085 bool p1PendingExpPop(4086 psDB *dbh, ///< Database handle4087 char **exp_tag,4088 char **recipe,4089 psS32 *p1_version4090 );4091 4092 3455 /** Insert a single p1PendingExpRow object into a table 4093 3456 * … … 4112 3475 psDB *dbh, ///< Database handle 4113 3476 psArray *objects ///< array of p1PendingExpRow objects 4114 );4115 4116 /** Removes the last row from the database and returns it4117 *4118 * @return A new p1PendingExpRow on success or NULL on failure.4119 */4120 4121 p1PendingExpRow *p1PendingExpPopObject(4122 psDB *dbh ///< Database handle4123 3477 ); 4124 3478 … … 4136 3490 psDB *dbh, ///< Database handle 4137 3491 const psFits *fits ///< psFits object 4138 );4139 4140 /** Removes the last limit row from the database and returns them in a binary FITS table.4141 *4142 * This function assumes an empty psFits object and will create a FITS table as4143 * the first extension.4144 *4145 * @return true on success4146 */4147 4148 bool p1PendingExpPopFits(4149 psDB *dbh, ///< Database handle4150 psFits *fits, ///< psFits object4151 unsigned long long limit ///< Maximum number of elements to return4152 3492 ); 4153 3493 … … 4304 3644 ); 4305 3645 4306 /** Removes the last row from the database and returns it4307 *4308 * @return true on success4309 */4310 4311 bool p2PendingExpPop(4312 psDB *dbh, ///< Database handle4313 char **exp_tag,4314 char **recipe,4315 psS32 *p1_version,4316 psS32 *p2_version4317 );4318 4319 3646 /** Insert a single p2PendingExpRow object into a table 4320 3647 * … … 4339 3666 psDB *dbh, ///< Database handle 4340 3667 psArray *objects ///< array of p2PendingExpRow objects 4341 );4342 4343 /** Removes the last row from the database and returns it4344 *4345 * @return A new p2PendingExpRow on success or NULL on failure.4346 */4347 4348 p2PendingExpRow *p2PendingExpPopObject(4349 psDB *dbh ///< Database handle4350 3668 ); 4351 3669 … … 4363 3681 psDB *dbh, ///< Database handle 4364 3682 const psFits *fits ///< psFits object 4365 );4366 4367 /** Removes the last limit row from the database and returns them in a binary FITS table.4368 *4369 * This function assumes an empty psFits object and will create a FITS table as4370 * the first extension.4371 *4372 * @return true on success4373 */4374 4375 bool p2PendingExpPopFits(4376 psDB *dbh, ///< Database handle4377 psFits *fits, ///< psFits object4378 unsigned long long limit ///< Maximum number of elements to return4379 3683 ); 4380 3684 … … 4537 3841 ); 4538 3842 4539 /** Removes the last row from the database and returns it4540 *4541 * @return true on success4542 */4543 4544 bool p2PendingImfilePop(4545 psDB *dbh, ///< Database handle4546 char **exp_tag,4547 char **class_id,4548 char **uri,4549 char **recipe,4550 psS32 *p1_version,4551 psS32 *p2_version4552 );4553 4554 3843 /** Insert a single p2PendingImfileRow object into a table 4555 3844 * … … 4574 3863 psDB *dbh, ///< Database handle 4575 3864 psArray *objects ///< array of p2PendingImfileRow objects 4576 );4577 4578 /** Removes the last row from the database and returns it4579 *4580 * @return A new p2PendingImfileRow on success or NULL on failure.4581 */4582 4583 p2PendingImfileRow *p2PendingImfilePopObject(4584 psDB *dbh ///< Database handle4585 3865 ); 4586 3866 … … 4598 3878 psDB *dbh, ///< Database handle 4599 3879 const psFits *fits ///< psFits object 4600 );4601 4602 /** Removes the last limit row from the database and returns them in a binary FITS table.4603 *4604 * This function assumes an empty psFits object and will create a FITS table as4605 * the first extension.4606 *4607 * @return true on success4608 */4609 4610 bool p2PendingImfilePopFits(4611 psDB *dbh, ///< Database handle4612 psFits *fits, ///< psFits object4613 unsigned long long limit ///< Maximum number of elements to return4614 3880 ); 4615 3881 … … 4763 4029 ); 4764 4030 4765 /** Removes the last row from the database and returns it4766 *4767 * @return true on success4768 */4769 4770 bool p2ProcessedExpPop(4771 psDB *dbh, ///< Database handle4772 char **exp_tag,4773 psS32 *p1_version,4774 psS32 *p2_version4775 );4776 4777 4031 /** Insert a single p2ProcessedExpRow object into a table 4778 4032 * … … 4797 4051 psDB *dbh, ///< Database handle 4798 4052 psArray *objects ///< array of p2ProcessedExpRow objects 4799 );4800 4801 /** Removes the last row from the database and returns it4802 *4803 * @return A new p2ProcessedExpRow on success or NULL on failure.4804 */4805 4806 p2ProcessedExpRow *p2ProcessedExpPopObject(4807 psDB *dbh ///< Database handle4808 4053 ); 4809 4054 … … 4821 4066 psDB *dbh, ///< Database handle 4822 4067 const psFits *fits ///< psFits object 4823 );4824 4825 /** Removes the last limit row from the database and returns them in a binary FITS table.4826 *4827 * This function assumes an empty psFits object and will create a FITS table as4828 * the first extension.4829 *4830 * @return true on success4831 */4832 4833 bool p2ProcessedExpPopFits(4834 psDB *dbh, ///< Database handle4835 psFits *fits, ///< psFits object4836 unsigned long long limit ///< Maximum number of elements to return4837 4068 ); 4838 4069 … … 5010 4241 ); 5011 4242 5012 /** Removes the last row from the database and returns it5013 *5014 * @return true on success5015 */5016 5017 bool p2ProcessedImfilePop(5018 psDB *dbh, ///< Database handle5019 char **exp_tag,5020 char **class_id,5021 char **uri,5022 char **recipe,5023 psF64 *bg,5024 psF64 *bg_stdev,5025 psF64 *bg_mean_stdev,5026 char **b1_uri,5027 char **b2_uri,5028 psS32 *p1_version,5029 psS32 *p2_version5030 );5031 5032 4243 /** Insert a single p2ProcessedImfileRow object into a table 5033 4244 * … … 5052 4263 psDB *dbh, ///< Database handle 5053 4264 psArray *objects ///< array of p2ProcessedImfileRow objects 5054 );5055 5056 /** Removes the last row from the database and returns it5057 *5058 * @return A new p2ProcessedImfileRow on success or NULL on failure.5059 */5060 5061 p2ProcessedImfileRow *p2ProcessedImfilePopObject(5062 psDB *dbh ///< Database handle5063 4265 ); 5064 4266 … … 5076 4278 psDB *dbh, ///< Database handle 5077 4279 const psFits *fits ///< psFits object 5078 );5079 5080 /** Removes the last limit row from the database and returns them in a binary FITS table.5081 *5082 * This function assumes an empty psFits object and will create a FITS table as5083 * the first extension.5084 *5085 * @return true on success5086 */5087 5088 bool p2ProcessedImfilePopFits(5089 psDB *dbh, ///< Database handle5090 psFits *fits, ///< psFits object5091 unsigned long long limit ///< Maximum number of elements to return5092 4280 ); 5093 4281 … … 5241 4429 ); 5242 4430 5243 /** Removes the last row from the database and returns it5244 *5245 * @return true on success5246 */5247 5248 bool p3PendingExpPop(5249 psDB *dbh, ///< Database handle5250 char **exp_tag,5251 psS32 *p2_version,5252 psS32 *p3_version5253 );5254 5255 4431 /** Insert a single p3PendingExpRow object into a table 5256 4432 * … … 5275 4451 psDB *dbh, ///< Database handle 5276 4452 psArray *objects ///< array of p3PendingExpRow objects 5277 );5278 5279 /** Removes the last row from the database and returns it5280 *5281 * @return A new p3PendingExpRow on success or NULL on failure.5282 */5283 5284 p3PendingExpRow *p3PendingExpPopObject(5285 psDB *dbh ///< Database handle5286 4453 ); 5287 4454 … … 5299 4466 psDB *dbh, ///< Database handle 5300 4467 const psFits *fits ///< psFits object 5301 );5302 5303 /** Removes the last limit row from the database and returns them in a binary FITS table.5304 *5305 * This function assumes an empty psFits object and will create a FITS table as5306 * the first extension.5307 *5308 * @return true on success5309 */5310 5311 bool p3PendingExpPopFits(5312 psDB *dbh, ///< Database handle5313 psFits *fits, ///< psFits object5314 unsigned long long limit ///< Maximum number of elements to return5315 4468 ); 5316 4469 … … 5500 4653 ); 5501 4654 5502 /** Removes the last row from the database and returns it5503 *5504 * @return true on success5505 */5506 5507 bool p3ProcessedExpPop(5508 psDB *dbh, ///< Database handle5509 char **exp_tag,5510 char **uri,5511 char **recipe,5512 psF64 *bg,5513 psF64 *bg_stdev,5514 psF64 *bg_mean_stdev,5515 psF32 *sigma_ra,5516 psF32 *sigma_dec,5517 psS32 *nastro,5518 char **b1_uri,5519 char **b2_uri,5520 psF32 *zp_mean,5521 psF32 *zp_stdev,5522 psS32 *p2_version,5523 psS32 *p3_version5524 );5525 5526 4655 /** Insert a single p3ProcessedExpRow object into a table 5527 4656 * … … 5546 4675 psDB *dbh, ///< Database handle 5547 4676 psArray *objects ///< array of p3ProcessedExpRow objects 5548 );5549 5550 /** Removes the last row from the database and returns it5551 *5552 * @return A new p3ProcessedExpRow on success or NULL on failure.5553 */5554 5555 p3ProcessedExpRow *p3ProcessedExpPopObject(5556 psDB *dbh ///< Database handle5557 4677 ); 5558 4678 … … 5572 4692 ); 5573 4693 5574 /** Removes the last limit row from the database and returns them in a binary FITS table.5575 *5576 * This function assumes an empty psFits object and will create a FITS table as5577 * the first extension.5578 *5579 * @return true on success5580 */5581 5582 bool p3ProcessedExpPopFits(5583 psDB *dbh, ///< Database handle5584 psFits *fits, ///< psFits object5585 unsigned long long limit ///< Maximum number of elements to return5586 );5587 5588 4694 /** Selects up to limit from the database and returns them in a binary FITS table 5589 4695 * … … 5676 4782 5677 4783 typedef struct { 4784 psS32 det_id; 5678 4785 psS32 iteration; 5679 4786 char *det_type; … … 5687 4794 5688 4795 detRunRow *detRunRowAlloc( 4796 psS32 det_id, 5689 4797 psS32 iteration, 5690 4798 const char *det_type, … … 5719 4827 bool detRunInsert( 5720 4828 psDB *dbh, ///< Database handle 4829 psS32 det_id, 5721 4830 psS32 iteration, 5722 4831 const char *det_type, … … 5735 4844 ); 5736 4845 5737 /** Removes the last row from the database and returns it5738 *5739 * @return true on success5740 */5741 5742 bool detRunPop(5743 psDB *dbh, ///< Database handle5744 psS32 *iteration,5745 char **det_type,5746 char **state5747 );5748 5749 4846 /** Insert a single detRunRow object into a table 5750 4847 * … … 5769 4866 psDB *dbh, ///< Database handle 5770 4867 psArray *objects ///< array of detRunRow objects 5771 );5772 5773 /** Removes the last row from the database and returns it5774 *5775 * @return A new detRunRow on success or NULL on failure.5776 */5777 5778 detRunRow *detRunPopObject(5779 psDB *dbh ///< Database handle5780 4868 ); 5781 4869 … … 5793 4881 psDB *dbh, ///< Database handle 5794 4882 const psFits *fits ///< psFits object 5795 );5796 5797 /** Removes the last limit row from the database and returns them in a binary FITS table.5798 *5799 * This function assumes an empty psFits object and will create a FITS table as5800 * the first extension.5801 *5802 * @return true on success5803 */5804 5805 bool detRunPopFits(5806 psDB *dbh, ///< Database handle5807 psFits *fits, ///< psFits object5808 unsigned long long limit ///< Maximum number of elements to return5809 4883 ); 5810 4884 … … 5961 5035 ); 5962 5036 5963 /** Removes the last row from the database and returns it5964 *5965 * @return true on success5966 */5967 5968 bool detInputExpPop(5969 psDB *dbh, ///< Database handle5970 psS32 *det_id,5971 psS32 *iteration,5972 char **exp_tag,5973 bool *include5974 );5975 5976 5037 /** Insert a single detInputExpRow object into a table 5977 5038 * … … 5996 5057 psDB *dbh, ///< Database handle 5997 5058 psArray *objects ///< array of detInputExpRow objects 5998 );5999 6000 /** Removes the last row from the database and returns it6001 *6002 * @return A new detInputExpRow on success or NULL on failure.6003 */6004 6005 detInputExpRow *detInputExpPopObject(6006 psDB *dbh ///< Database handle6007 5059 ); 6008 5060 … … 6020 5072 psDB *dbh, ///< Database handle 6021 5073 const psFits *fits ///< psFits object 6022 );6023 6024 /** Removes the last limit row from the database and returns them in a binary FITS table.6025 *6026 * This function assumes an empty psFits object and will create a FITS table as6027 * the first extension.6028 *6029 * @return true on success6030 */6031 6032 bool detInputExpPopFits(6033 psDB *dbh, ///< Database handle6034 psFits *fits, ///< psFits object6035 unsigned long long limit ///< Maximum number of elements to return6036 5074 ); 6037 5075 … … 6206 5244 ); 6207 5245 6208 /** Removes the last row from the database and returns it6209 *6210 * @return true on success6211 */6212 6213 bool detProcessedImfilePop(6214 psDB *dbh, ///< Database handle6215 psS32 *det_id,6216 char **exp_tag,6217 char **class_id,6218 char **uri,6219 char **recipe,6220 psF64 *bg,6221 psF64 *bg_stdev,6222 psF64 *bg_mean_stdev,6223 char **b1_uri,6224 char **b2_uri6225 );6226 6227 5246 /** Insert a single detProcessedImfileRow object into a table 6228 5247 * … … 6247 5266 psDB *dbh, ///< Database handle 6248 5267 psArray *objects ///< array of detProcessedImfileRow objects 6249 );6250 6251 /** Removes the last row from the database and returns it6252 *6253 * @return A new detProcessedImfileRow on success or NULL on failure.6254 */6255 6256 detProcessedImfileRow *detProcessedImfilePopObject(6257 psDB *dbh ///< Database handle6258 5268 ); 6259 5269 … … 6271 5281 psDB *dbh, ///< Database handle 6272 5282 const psFits *fits ///< psFits object 6273 );6274 6275 /** Removes the last limit row from the database and returns them in a binary FITS table.6276 *6277 * This function assumes an empty psFits object and will create a FITS table as6278 * the first extension.6279 *6280 * @return true on success6281 */6282 6283 bool detProcessedImfilePopFits(6284 psDB *dbh, ///< Database handle6285 psFits *fits, ///< psFits object6286 unsigned long long limit ///< Maximum number of elements to return6287 5283 ); 6288 5284 … … 6451 5447 ); 6452 5448 6453 /** Removes the last row from the database and returns it6454 *6455 * @return true on success6456 */6457 6458 bool detProcessedExpPop(6459 psDB *dbh, ///< Database handle6460 psS32 *det_id,6461 char **exp_tag,6462 char **recipe,6463 psF64 *bg,6464 psF64 *bg_stdev,6465 psF64 *bg_mean_stdev,6466 char **b1_uri,6467 char **b2_uri6468 );6469 6470 5449 /** Insert a single detProcessedExpRow object into a table 6471 5450 * … … 6490 5469 psDB *dbh, ///< Database handle 6491 5470 psArray *objects ///< array of detProcessedExpRow objects 6492 );6493 6494 /** Removes the last row from the database and returns it6495 *6496 * @return A new detProcessedExpRow on success or NULL on failure.6497 */6498 6499 detProcessedExpRow *detProcessedExpPopObject(6500 psDB *dbh ///< Database handle6501 5471 ); 6502 5472 … … 6514 5484 psDB *dbh, ///< Database handle 6515 5485 const psFits *fits ///< psFits object 6516 );6517 6518 /** Removes the last limit row from the database and returns them in a binary FITS table.6519 *6520 * This function assumes an empty psFits object and will create a FITS table as6521 * the first extension.6522 *6523 * @return true on success6524 */6525 6526 bool detProcessedExpPopFits(6527 psDB *dbh, ///< Database handle6528 psFits *fits, ///< psFits object6529 unsigned long long limit ///< Maximum number of elements to return6530 5486 ); 6531 5487 … … 6694 5650 ); 6695 5651 6696 /** Removes the last row from the database and returns it6697 *6698 * @return true on success6699 */6700 6701 bool detStackedImfilePop(6702 psDB *dbh, ///< Database handle6703 psS32 *det_id,6704 psS32 *iteration,6705 char **class_id,6706 char **uri,6707 char **recipe,6708 psF64 *bg,6709 psF64 *bg_stdev,6710 psF64 *bg_mean_stdev6711 );6712 6713 5652 /** Insert a single detStackedImfileRow object into a table 6714 5653 * … … 6733 5672 psDB *dbh, ///< Database handle 6734 5673 psArray *objects ///< array of detStackedImfileRow objects 6735 );6736 6737 /** Removes the last row from the database and returns it6738 *6739 * @return A new detStackedImfileRow on success or NULL on failure.6740 */6741 6742 detStackedImfileRow *detStackedImfilePopObject(6743 psDB *dbh ///< Database handle6744 5674 ); 6745 5675 … … 6757 5687 psDB *dbh, ///< Database handle 6758 5688 const psFits *fits ///< psFits object 6759 );6760 6761 /** Removes the last limit row from the database and returns them in a binary FITS table.6762 *6763 * This function assumes an empty psFits object and will create a FITS table as6764 * the first extension.6765 *6766 * @return true on success6767 */6768 6769 bool detStackedImfilePopFits(6770 psDB *dbh, ///< Database handle6771 psFits *fits, ///< psFits object6772 unsigned long long limit ///< Maximum number of elements to return6773 5689 ); 6774 5690 … … 6925 5841 ); 6926 5842 6927 /** Removes the last row from the database and returns it6928 *6929 * @return true on success6930 */6931 6932 bool detNormalizedStatImfilePop(6933 psDB *dbh, ///< Database handle6934 psS32 *det_id,6935 psS32 *iteration,6936 char **class_id,6937 psF32 *norm6938 );6939 6940 5843 /** Insert a single detNormalizedStatImfileRow object into a table 6941 5844 * … … 6960 5863 psDB *dbh, ///< Database handle 6961 5864 psArray *objects ///< array of detNormalizedStatImfileRow objects 6962 );6963 6964 /** Removes the last row from the database and returns it6965 *6966 * @return A new detNormalizedStatImfileRow on success or NULL on failure.6967 */6968 6969 detNormalizedStatImfileRow *detNormalizedStatImfilePopObject(6970 psDB *dbh ///< Database handle6971 5865 ); 6972 5866 … … 6984 5878 psDB *dbh, ///< Database handle 6985 5879 const psFits *fits ///< psFits object 6986 );6987 6988 /** Removes the last limit row from the database and returns them in a binary FITS table.6989 *6990 * This function assumes an empty psFits object and will create a FITS table as6991 * the first extension.6992 *6993 * @return true on success6994 */6995 6996 bool detNormalizedStatImfilePopFits(6997 psDB *dbh, ///< Database handle6998 psFits *fits, ///< psFits object6999 unsigned long long limit ///< Maximum number of elements to return7000 5880 ); 7001 5881 … … 7167 6047 ); 7168 6048 7169 /** Removes the last row from the database and returns it7170 *7171 * @return true on success7172 */7173 7174 bool detNormalizedImfilePop(7175 psDB *dbh, ///< Database handle7176 psS32 *det_id,7177 psS32 *iteration,7178 char **class_id,7179 char **uri,7180 psF64 *bg,7181 psF64 *bg_stdev,7182 psF64 *bg_mean_stdev,7183 char **b1_uri,7184 char **b2_uri7185 );7186 7187 6049 /** Insert a single detNormalizedImfileRow object into a table 7188 6050 * … … 7207 6069 psDB *dbh, ///< Database handle 7208 6070 psArray *objects ///< array of detNormalizedImfileRow objects 7209 );7210 7211 /** Removes the last row from the database and returns it7212 *7213 * @return A new detNormalizedImfileRow on success or NULL on failure.7214 */7215 7216 detNormalizedImfileRow *detNormalizedImfilePopObject(7217 psDB *dbh ///< Database handle7218 6071 ); 7219 6072 … … 7231 6084 psDB *dbh, ///< Database handle 7232 6085 const psFits *fits ///< psFits object 7233 );7234 7235 /** Removes the last limit row from the database and returns them in a binary FITS table.7236 *7237 * This function assumes an empty psFits object and will create a FITS table as7238 * the first extension.7239 *7240 * @return true on success7241 */7242 7243 bool detNormalizedImfilePopFits(7244 psDB *dbh, ///< Database handle7245 psFits *fits, ///< psFits object7246 unsigned long long limit ///< Maximum number of elements to return7247 6086 ); 7248 6087 … … 7411 6250 ); 7412 6251 7413 /** Removes the last row from the database and returns it7414 *7415 * @return true on success7416 */7417 7418 bool detNormalizedExpPop(7419 psDB *dbh, ///< Database handle7420 psS32 *det_id,7421 psS32 *iteration,7422 char **recipe,7423 psF64 *bg,7424 psF64 *bg_stdev,7425 psF64 *bg_mean_stdev,7426 char **b1_uri,7427 char **b2_uri7428 );7429 7430 6252 /** Insert a single detNormalizedExpRow object into a table 7431 6253 * … … 7450 6272 psDB *dbh, ///< Database handle 7451 6273 psArray *objects ///< array of detNormalizedExpRow objects 7452 );7453 7454 /** Removes the last row from the database and returns it7455 *7456 * @return A new detNormalizedExpRow on success or NULL on failure.7457 */7458 7459 detNormalizedExpRow *detNormalizedExpPopObject(7460 psDB *dbh ///< Database handle7461 6274 ); 7462 6275 … … 7474 6287 psDB *dbh, ///< Database handle 7475 6288 const psFits *fits ///< psFits object 7476 );7477 7478 /** Removes the last limit row from the database and returns them in a binary FITS table.7479 *7480 * This function assumes an empty psFits object and will create a FITS table as7481 * the first extension.7482 *7483 * @return true on success7484 */7485 7486 bool detNormalizedExpPopFits(7487 psDB *dbh, ///< Database handle7488 psFits *fits, ///< psFits object7489 unsigned long long limit ///< Maximum number of elements to return7490 6289 ); 7491 6290 … … 7639 6438 ); 7640 6439 7641 /** Removes the last row from the database and returns it7642 *7643 * @return true on success7644 */7645 7646 bool detMasterFramePop(7647 psDB *dbh, ///< Database handle7648 psS32 *det_id,7649 psS32 *iteration,7650 char **comment7651 );7652 7653 6440 /** Insert a single detMasterFrameRow object into a table 7654 6441 * … … 7673 6460 psDB *dbh, ///< Database handle 7674 6461 psArray *objects ///< array of detMasterFrameRow objects 7675 );7676 7677 /** Removes the last row from the database and returns it7678 *7679 * @return A new detMasterFrameRow on success or NULL on failure.7680 */7681 7682 detMasterFrameRow *detMasterFramePopObject(7683 psDB *dbh ///< Database handle7684 6462 ); 7685 6463 … … 7697 6475 psDB *dbh, ///< Database handle 7698 6476 const psFits *fits ///< psFits object 7699 );7700 7701 /** Removes the last limit row from the database and returns them in a binary FITS table.7702 *7703 * This function assumes an empty psFits object and will create a FITS table as7704 * the first extension.7705 *7706 * @return true on success7707 */7708 7709 bool detMasterFramePopFits(7710 psDB *dbh, ///< Database handle7711 psFits *fits, ///< psFits object7712 unsigned long long limit ///< Maximum number of elements to return7713 6477 ); 7714 6478 … … 7865 6629 ); 7866 6630 7867 /** Removes the last row from the database and returns it7868 *7869 * @return true on success7870 */7871 7872 bool detMasterImfilePop(7873 psDB *dbh, ///< Database handle7874 psS32 *det_id,7875 char **class_id,7876 char **uri,7877 char **recipe7878 );7879 7880 6631 /** Insert a single detMasterImfileRow object into a table 7881 6632 * … … 7900 6651 psDB *dbh, ///< Database handle 7901 6652 psArray *objects ///< array of detMasterImfileRow objects 7902 );7903 7904 /** Removes the last row from the database and returns it7905 *7906 * @return A new detMasterImfileRow on success or NULL on failure.7907 */7908 7909 detMasterImfileRow *detMasterImfilePopObject(7910 psDB *dbh ///< Database handle7911 6653 ); 7912 6654 … … 7924 6666 psDB *dbh, ///< Database handle 7925 6667 const psFits *fits ///< psFits object 7926 );7927 7928 /** Removes the last limit row from the database and returns them in a binary FITS table.7929 *7930 * This function assumes an empty psFits object and will create a FITS table as7931 * the first extension.7932 *7933 * @return true on success7934 */7935 7936 bool detMasterImfilePopFits(7937 psDB *dbh, ///< Database handle7938 psFits *fits, ///< psFits object7939 unsigned long long limit ///< Maximum number of elements to return7940 6668 ); 7941 6669 … … 8113 6841 ); 8114 6842 8115 /** Removes the last row from the database and returns it8116 *8117 * @return true on success8118 */8119 8120 bool detResidImfilePop(8121 psDB *dbh, ///< Database handle8122 psS32 *det_id,8123 psS32 *iteration,8124 char **exp_tag,8125 char **class_id,8126 char **uri,8127 char **recipe,8128 psF64 *bg,8129 psF64 *bg_stdev,8130 psF64 *bg_mean_stdev,8131 char **b1_uri,8132 char **b2_uri8133 );8134 8135 6843 /** Insert a single detResidImfileRow object into a table 8136 6844 * … … 8155 6863 psDB *dbh, ///< Database handle 8156 6864 psArray *objects ///< array of detResidImfileRow objects 8157 );8158 8159 /** Removes the last row from the database and returns it8160 *8161 * @return A new detResidImfileRow on success or NULL on failure.8162 */8163 8164 detResidImfileRow *detResidImfilePopObject(8165 psDB *dbh ///< Database handle8166 6865 ); 8167 6866 … … 8179 6878 psDB *dbh, ///< Database handle 8180 6879 const psFits *fits ///< psFits object 8181 );8182 8183 /** Removes the last limit row from the database and returns them in a binary FITS table.8184 *8185 * This function assumes an empty psFits object and will create a FITS table as8186 * the first extension.8187 *8188 * @return true on success8189 */8190 8191 bool detResidImfilePopFits(8192 psDB *dbh, ///< Database handle8193 psFits *fits, ///< psFits object8194 unsigned long long limit ///< Maximum number of elements to return8195 6880 ); 8196 6881 … … 8365 7050 ); 8366 7051 8367 /** Removes the last row from the database and returns it8368 *8369 * @return true on success8370 */8371 8372 bool detResidExpPop(8373 psDB *dbh, ///< Database handle8374 psS32 *det_id,8375 psS32 *iteration,8376 char **exp_tag,8377 char **recipe,8378 psF64 *bg,8379 psF64 *bg_stdev,8380 psF64 *bg_mean_stdev,8381 char **b1_uri,8382 char **b2_uri,8383 bool *accept8384 );8385 8386 7052 /** Insert a single detResidExpRow object into a table 8387 7053 * … … 8406 7072 psDB *dbh, ///< Database handle 8407 7073 psArray *objects ///< array of detResidExpRow objects 8408 );8409 8410 /** Removes the last row from the database and returns it8411 *8412 * @return A new detResidExpRow on success or NULL on failure.8413 */8414 8415 detResidExpRow *detResidExpPopObject(8416 psDB *dbh ///< Database handle8417 7074 ); 8418 7075 … … 8430 7087 psDB *dbh, ///< Database handle 8431 7088 const psFits *fits ///< psFits object 8432 );8433 8434 /** Removes the last limit row from the database and returns them in a binary FITS table.8435 *8436 * This function assumes an empty psFits object and will create a FITS table as8437 * the first extension.8438 *8439 * @return true on success8440 */8441 8442 bool detResidExpPopFits(8443 psDB *dbh, ///< Database handle8444 psFits *fits, ///< psFits object8445 unsigned long long limit ///< Maximum number of elements to return8446 7089 ); 8447 7090 … … 8604 7247 ); 8605 7248 8606 /** Removes the last row from the database and returns it8607 *8608 * @return true on success8609 */8610 8611 bool detRunSummaryPop(8612 psDB *dbh, ///< Database handle8613 psS32 *det_id,8614 psS32 *iteration,8615 psF64 *bg,8616 psF64 *bg_stdev,8617 psF64 *bg_mean_stdev,8618 bool *accept8619 );8620 8621 7249 /** Insert a single detRunSummaryRow object into a table 8622 7250 * … … 8641 7269 psDB *dbh, ///< Database handle 8642 7270 psArray *objects ///< array of detRunSummaryRow objects 8643 );8644 8645 /** Removes the last row from the database and returns it8646 *8647 * @return A new detRunSummaryRow on success or NULL on failure.8648 */8649 8650 detRunSummaryRow *detRunSummaryPopObject(8651 psDB *dbh ///< Database handle8652 7271 ); 8653 7272 … … 8667 7286 ); 8668 7287 8669 /** Removes the last limit row from the database and returns them in a binary FITS table.8670 *8671 * This function assumes an empty psFits object and will create a FITS table as8672 * the first extension.8673 *8674 * @return true on success8675 */8676 8677 bool detRunSummaryPopFits(8678 psDB *dbh, ///< Database handle8679 psFits *fits, ///< psFits object8680 unsigned long long limit ///< Maximum number of elements to return8681 );8682 8683 7288 /** Selects up to limit from the database and returns them in a binary FITS table 8684 7289 * -
trunk/ippdb/tests/Makefile.am
r7461 r9423 51 51 droptable \ 52 52 insert \ 53 pop \54 53 insertobject \ 55 popobject \56 54 insertfits \ 57 popfits \58 55 selectrowsfits \ 59 56 metadatafromobject \ -
trunk/ippdb/tests/alloc.c
r9307 r9423 1022 1022 detRunRow *object; 1023 1023 1024 object = detRunRowAlloc(-32, "a string", "a string" ); 1025 1026 if (!object) { 1027 exit(EXIT_FAILURE); 1028 } 1029 1024 object = detRunRowAlloc(-32, -32, "a string", "a string" ); 1025 1026 if (!object) { 1027 exit(EXIT_FAILURE); 1028 } 1029 1030 if (!object->det_id == -32) { 1031 psFree(object); 1032 exit(EXIT_FAILURE); 1033 } 1030 1034 if (!object->iteration == -32) { 1031 1035 psFree(object); -
trunk/ippdb/tests/insert.c
r9307 r9423 358 358 } 359 359 360 if (!detRunInsert(dbh, -32, "a string", "a string")) {360 if (!detRunInsert(dbh, -32, -32, "a string", "a string")) { 361 361 exit(EXIT_FAILURE); 362 362 } -
trunk/ippdb/tests/insertobject.c
r9307 r9423 520 520 } 521 521 522 object = detRunRowAlloc(-32, "a string", "a string");522 object = detRunRowAlloc(-32, -32, "a string", "a string"); 523 523 if (!object) { 524 524 exit(EXIT_FAILURE); -
trunk/ippdb/tests/metadatafromobject.c
r9307 r9423 1208 1208 bool status; 1209 1209 1210 object = detRunRowAlloc(-32, "a string", "a string");1210 object = detRunRowAlloc(-32, -32, "a string", "a string"); 1211 1211 if (!object) { 1212 1212 exit(EXIT_FAILURE); … … 1220 1220 psFree(object); 1221 1221 1222 if (!psMetadataLookupS32(&status, md, "det_id") == -32) { 1223 psFree(md); 1224 exit(EXIT_FAILURE); 1225 } 1222 1226 if (!psMetadataLookupS32(&status, md, "iteration") == -32) { 1223 1227 psFree(md); -
trunk/ippdb/tests/objectfrommetadata.c
r9307 r9423 1851 1851 1852 1852 md = psMetadataAlloc(); 1853 if (!psMetadataAddS32(md, PS_LIST_TAIL, "det_id", 0, NULL, -32)) { 1854 psFree(md); 1855 exit(EXIT_FAILURE); 1856 } 1853 1857 if (!psMetadataAddS32(md, PS_LIST_TAIL, "iteration", 0, NULL, -32)) { 1854 1858 psFree(md); … … 1872 1876 psFree(md); 1873 1877 1878 if (!object->det_id == -32) { 1879 psFree(object); 1880 exit(EXIT_FAILURE); 1881 } 1874 1882 if (!object->iteration == -32) { 1875 1883 psFree(object); -
trunk/ippdb/tests/testsuite.at
r7461 r9423 60 60 61 61 ### 62 AT_SETUP([Pop()])63 AT_KEYWORDS([Pop])64 65 AT_CHECK([dbsetup])66 # run insert so there is a row in the table67 AT_CHECK([insert])68 AT_CHECK([pop])69 AT_CHECK([dbcleanup])70 71 AT_CLEANUP72 73 ###74 62 AT_SETUP([InsertObject()]) 75 63 AT_KEYWORDS([InsertObject]) … … 77 65 AT_CHECK([dbsetup]) 78 66 AT_CHECK([insertobject]) 79 AT_CHECK([dbcleanup])80 81 AT_CLEANUP82 83 ###84 AT_SETUP([PopObject()])85 AT_KEYWORDS([PopObject])86 87 AT_CHECK([dbsetup])88 # run insert so there is a row in the table89 AT_CHECK([insert])90 AT_CHECK([popobject])91 67 AT_CHECK([dbcleanup]) 92 68 … … 101 77 AT_CHECK([insert]) 102 78 # run popfis so there is afits file to read 103 AT_CHECK([ popfits])79 AT_CHECK([selectrowsfits]) 104 80 AT_CHECK([insertfits]) 105 AT_CHECK([dbcleanup])106 if [ test -f "blargh" ] ; then107 rm -f "blargh"108 fi109 110 AT_CLEANUP111 112 ###113 AT_SETUP([PopFits()])114 AT_KEYWORDS([PopFits])115 116 AT_CHECK([dbsetup])117 # run insert so there is a row in the table118 AT_CHECK([insert])119 AT_CHECK([popfits])120 81 AT_CHECK([dbcleanup]) 121 82 if [ test -f "blargh" ] ; then
Note:
See TracChangeset
for help on using the changeset viewer.
