Changeset 9423 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Oct 9, 2006, 1:43:03 PM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (191 diffs)
Legend:
- Unmodified
- Added
- Removed
-
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
Note:
See TracChangeset
for help on using the changeset viewer.
