Changeset 16731 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Feb 28, 2008, 3:04:07 PM (18 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (25 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r16616 r16731 48 48 #define CAMMASK_TABLE_NAME "camMask" 49 49 #define WARPRUN_TABLE_NAME "warpRun" 50 #define WARPINPUTEXP_TABLE_NAME "warpInputExp"51 50 #define WARPSKYCELLMAP_TABLE_NAME "warpSkyCellMap" 52 51 #define WARPSKYFILE_TABLE_NAME "warpSkyfile" … … 9504 9503 static void warpRunRowFree(warpRunRow *object); 9505 9504 9506 warpRunRow *warpRunRowAlloc(psS64 warp_id, const char *mode, const char *state, const char *workdir, const char *workdir_state, const char *dvodb, const char *tess_id, const char *end_stage, psTime* registered)9505 warpRunRow *warpRunRowAlloc(psS64 warp_id, psS64 cam_id, const char *mode, const char *state, const char *workdir, const char *workdir_state, const char *dvodb, const char *tess_id, const char *end_stage, psTime* registered, bool magiced) 9507 9506 { 9508 9507 warpRunRow *_object; … … 9512 9511 9513 9512 _object->warp_id = warp_id; 9513 _object->cam_id = cam_id; 9514 9514 _object->mode = psStringCopy(mode); 9515 9515 _object->state = psStringCopy(state); … … 9520 9520 _object->end_stage = psStringCopy(end_stage); 9521 9521 _object->registered = psTimeCopy(registered); 9522 _object->magiced = magiced; 9522 9523 9523 9524 return _object; … … 9544 9545 return false; 9545 9546 } 9547 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, "Key INDEX(warp_id, cam_id) fkey(cam_id) ref camProcessedExp(cam_id)", 0)) { 9548 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id"); 9549 psFree(md); 9550 return false; 9551 } 9546 9552 if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, "Key", "64")) { 9547 9553 psError(PS_ERR_UNKNOWN, false, "failed to add item mode"); … … 9584 9590 return false; 9585 9591 } 9592 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, "Key", 0)) { 9593 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced"); 9594 psFree(md); 9595 return false; 9596 } 9586 9597 9587 9598 bool status = psDBCreateTable(dbh, WARPRUN_TABLE_NAME, md); … … 9597 9608 } 9598 9609 9599 bool warpRunInsert(psDB * dbh, psS64 warp_id, const char *mode, const char *state, const char *workdir, const char *workdir_state, const char *dvodb, const char *tess_id, const char *end_stage, psTime* registered)9610 bool warpRunInsert(psDB * dbh, psS64 warp_id, psS64 cam_id, const char *mode, const char *state, const char *workdir, const char *workdir_state, const char *dvodb, const char *tess_id, const char *end_stage, psTime* registered, bool magiced) 9600 9611 { 9601 9612 psMetadata *md = psMetadataAlloc(); … … 9605 9616 return false; 9606 9617 } 9618 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, NULL, cam_id)) { 9619 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id"); 9620 psFree(md); 9621 return false; 9622 } 9607 9623 if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, NULL, mode)) { 9608 9624 psError(PS_ERR_UNKNOWN, false, "failed to add item mode"); … … 9642 9658 if (!psMetadataAdd(md, PS_LIST_TAIL, "registered", PS_DATA_TIME, NULL, registered)) { 9643 9659 psError(PS_ERR_UNKNOWN, false, "failed to add item registered"); 9660 psFree(md); 9661 return false; 9662 } 9663 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, magiced)) { 9664 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced"); 9644 9665 psFree(md); 9645 9666 return false; … … 9668 9689 bool warpRunInsertObject(psDB *dbh, warpRunRow *object) 9669 9690 { 9670 return warpRunInsert(dbh, object->warp_id, object-> mode, object->state, object->workdir, object->workdir_state, object->dvodb, object->tess_id, object->end_stage, object->registered);9691 return warpRunInsert(dbh, object->warp_id, object->cam_id, object->mode, object->state, object->workdir, object->workdir_state, object->dvodb, object->tess_id, object->end_stage, object->registered, object->magiced); 9671 9692 } 9672 9693 … … 9746 9767 return false; 9747 9768 } 9769 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, NULL, object->cam_id)) { 9770 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id"); 9771 psFree(md); 9772 return false; 9773 } 9748 9774 if (!psMetadataAdd(md, PS_LIST_TAIL, "mode", PS_DATA_STRING, NULL, object->mode)) { 9749 9775 psError(PS_ERR_UNKNOWN, false, "failed to add item mode"); … … 9786 9812 return false; 9787 9813 } 9814 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, object->magiced)) { 9815 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced"); 9816 psFree(md); 9817 return false; 9818 } 9788 9819 9789 9820 … … 9800 9831 return false; 9801 9832 } 9833 psS64 cam_id = psMetadataLookupS64(&status, md, "cam_id"); 9834 if (!status) { 9835 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item cam_id"); 9836 return false; 9837 } 9802 9838 char* mode = psMetadataLookupPtr(&status, md, "mode"); 9803 9839 if (!status) { … … 9840 9876 return false; 9841 9877 } 9842 9843 return warpRunRowAlloc(warp_id, mode, state, workdir, workdir_state, dvodb, tess_id, end_stage, registered); 9878 bool magiced = psMetadataLookupBool(&status, md, "magiced"); 9879 if (!status) { 9880 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magiced"); 9881 return false; 9882 } 9883 9884 return warpRunRowAlloc(warp_id, cam_id, mode, state, workdir, workdir_state, dvodb, tess_id, end_stage, registered, magiced); 9844 9885 } 9845 9886 psArray *warpRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 9957 9998 return true; 9958 9999 } 9959 static void warpInputExpRowFree(warpInputExpRow *object);9960 9961 warpInputExpRow *warpInputExpRowAlloc(psS64 warp_id, psS64 cam_id, bool magiced)9962 {9963 warpInputExpRow *_object;9964 9965 _object = psAlloc(sizeof(warpInputExpRow));9966 psMemSetDeallocator(_object, (psFreeFunc)warpInputExpRowFree);9967 9968 _object->warp_id = warp_id;9969 _object->cam_id = cam_id;9970 _object->magiced = magiced;9971 9972 return _object;9973 }9974 9975 static void warpInputExpRowFree(warpInputExpRow *object)9976 {9977 }9978 9979 bool warpInputExpCreateTable(psDB *dbh)9980 {9981 psMetadata *md = psMetadataAlloc();9982 if (!psMetadataAdd(md, PS_LIST_TAIL, "warp_id", PS_DATA_S64, "Primary Key fkey(warp_id) ref warpRun(warp_id)", 0)) {9983 psError(PS_ERR_UNKNOWN, false, "failed to add item warp_id");9984 psFree(md);9985 return false;9986 }9987 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, "Primary Key fkey(cam_id) ref camProcessedExp(cam_id)", 0)) {9988 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id");9989 psFree(md);9990 return false;9991 }9992 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, "Key", 0)) {9993 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");9994 psFree(md);9995 return false;9996 }9997 9998 bool status = psDBCreateTable(dbh, WARPINPUTEXP_TABLE_NAME, md);9999 10000 psFree(md);10001 10002 return status;10003 }10004 10005 bool warpInputExpDropTable(psDB *dbh)10006 {10007 return psDBDropTable(dbh, WARPINPUTEXP_TABLE_NAME);10008 }10009 10010 bool warpInputExpInsert(psDB * dbh, psS64 warp_id, psS64 cam_id, bool magiced)10011 {10012 psMetadata *md = psMetadataAlloc();10013 if (!psMetadataAdd(md, PS_LIST_TAIL, "warp_id", PS_DATA_S64, NULL, warp_id)) {10014 psError(PS_ERR_UNKNOWN, false, "failed to add item warp_id");10015 psFree(md);10016 return false;10017 }10018 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, NULL, cam_id)) {10019 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id");10020 psFree(md);10021 return false;10022 }10023 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, magiced)) {10024 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");10025 psFree(md);10026 return false;10027 }10028 10029 bool status = psDBInsertOneRow(dbh, WARPINPUTEXP_TABLE_NAME, md);10030 psFree(md);10031 10032 return status;10033 }10034 10035 long long warpInputExpDelete(psDB *dbh, const psMetadata *where, unsigned long long limit)10036 {10037 long long deleted = 0;10038 10039 long long count = psDBDeleteRows(dbh, WARPINPUTEXP_TABLE_NAME, where, limit);10040 if (count < 0) {10041 psError(PS_ERR_UNKNOWN, true, "failed to delete row from warpInputExp");10042 return count;10043 10044 deleted += count;10045 }10046 10047 return deleted;10048 }10049 bool warpInputExpInsertObject(psDB *dbh, warpInputExpRow *object)10050 {10051 return warpInputExpInsert(dbh, object->warp_id, object->cam_id, object->magiced);10052 }10053 10054 bool warpInputExpInsertObjects(psDB *dbh, psArray *objects)10055 {10056 for (long i = 0; i < psArrayLength(objects); i++) {10057 if (!warpInputExpInsertObject(dbh, objects->data[i])) {10058 return false;10059 }10060 }10061 10062 return true;10063 }10064 10065 bool warpInputExpInsertFits(psDB *dbh, const psFits *fits)10066 {10067 psArray *rowSet;10068 10069 // move to (the first?) extension named WARPINPUTEXP_TABLE_NAME10070 if (!psFitsMoveExtName(fits, WARPINPUTEXP_TABLE_NAME)) {10071 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", WARPINPUTEXP_TABLE_NAME);10072 return false;10073 }10074 10075 // check HDU type10076 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) {10077 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE");10078 return false;10079 }10080 10081 // read fits table10082 rowSet = psFitsReadTable(fits);10083 if (!rowSet) {10084 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty");10085 psFree(rowSet);10086 return false;10087 }10088 10089 if (!psDBInsertRows(dbh, WARPINPUTEXP_TABLE_NAME, rowSet)) {10090 psError(PS_ERR_UNKNOWN, false, "databse insert failed");10091 psFree(rowSet);10092 return false;10093 }10094 10095 psFree(rowSet);10096 10097 return true;10098 }10099 10100 bool warpInputExpSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit)10101 {10102 psArray *rowSet;10103 10104 rowSet = psDBSelectRows(dbh, WARPINPUTEXP_TABLE_NAME, where, limit);10105 if (!rowSet) {10106 return false;10107 }10108 10109 // output to fits10110 if (!psFitsWriteTable(fits, NULL, rowSet, WARPINPUTEXP_TABLE_NAME)) {10111 psError(PS_ERR_UNKNOWN, false, "FITS table write failed");10112 psFree(rowSet);10113 return false;10114 }10115 10116 psFree(rowSet);10117 10118 return true;10119 }10120 10121 psMetadata *warpInputExpMetadataFromObject(const warpInputExpRow *object)10122 {10123 psMetadata *md = psMetadataAlloc();10124 if (!psMetadataAdd(md, PS_LIST_TAIL, "warp_id", PS_DATA_S64, NULL, object->warp_id)) {10125 psError(PS_ERR_UNKNOWN, false, "failed to add item warp_id");10126 psFree(md);10127 return false;10128 }10129 if (!psMetadataAdd(md, PS_LIST_TAIL, "cam_id", PS_DATA_S64, NULL, object->cam_id)) {10130 psError(PS_ERR_UNKNOWN, false, "failed to add item cam_id");10131 psFree(md);10132 return false;10133 }10134 if (!psMetadataAdd(md, PS_LIST_TAIL, "magiced", PS_DATA_BOOL, NULL, object->magiced)) {10135 psError(PS_ERR_UNKNOWN, false, "failed to add item magiced");10136 psFree(md);10137 return false;10138 }10139 10140 10141 return md;10142 }10143 10144 warpInputExpRow *warpInputExpObjectFromMetadata(psMetadata *md)10145 {10146 10147 bool status = false;10148 psS64 warp_id = psMetadataLookupS64(&status, md, "warp_id");10149 if (!status) {10150 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item warp_id");10151 return false;10152 }10153 psS64 cam_id = psMetadataLookupS64(&status, md, "cam_id");10154 if (!status) {10155 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item cam_id");10156 return false;10157 }10158 bool magiced = psMetadataLookupBool(&status, md, "magiced");10159 if (!status) {10160 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item magiced");10161 return false;10162 }10163 10164 return warpInputExpRowAlloc(warp_id, cam_id, magiced);10165 }10166 psArray *warpInputExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)10167 {10168 psArray *rowSet;10169 psArray *returnSet;10170 psU64 i;10171 10172 rowSet = psDBSelectRows(dbh, WARPINPUTEXP_TABLE_NAME, where, limit);10173 if (!rowSet) {10174 return NULL;10175 }10176 10177 // convert psMetadata rows to row objects10178 10179 returnSet = psArrayAllocEmpty(rowSet->n);10180 10181 for (i = 0; i < rowSet->n; i++) {10182 warpInputExpRow *object = warpInputExpObjectFromMetadata(rowSet->data[i]);10183 if (!object) {10184 psFree(object);10185 psFree(returnSet);10186 psError(PS_ERR_UNKNOWN, false, "database error");10187 return NULL;10188 }10189 psArrayAdd(returnSet, 0, object);10190 psFree(object);10191 }10192 10193 psFree(rowSet);10194 10195 return returnSet;10196 }10197 bool warpInputExpDeleteObject(psDB *dbh, const warpInputExpRow *object)10198 {10199 psMetadata *where = warpInputExpMetadataFromObject(object);10200 long long count = psDBDeleteRows(dbh, WARPINPUTEXP_TABLE_NAME, where, 0);10201 psFree(where);10202 if (count < 0) {10203 psError(PS_ERR_UNKNOWN, true, "failed to delete row from warpInputExp");10204 return false;10205 }10206 if (count > 1) {10207 // XXX should this be a psAbort() instead? It is possible that10208 // having an object match multiple rows was by design.10209 psError(PS_ERR_UNKNOWN, true, "warpInputExpRow object matched more then one row. Check your database schema");10210 return false;10211 }10212 10213 return true;10214 }10215 long long warpInputExpDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit)10216 {10217 long long deleted = 0;10218 10219 for (long long i = 0; i < objects->n; i++) {10220 warpInputExpRow *object = objects->data[i];10221 psMetadata *where = warpInputExpMetadataFromObject(object);10222 long long count = psDBDeleteRows(dbh, WARPINPUTEXP_TABLE_NAME, where, limit);10223 psFree(where);10224 if (count < 0) {10225 psError(PS_ERR_UNKNOWN, true, "failed to delete row from warpInputExp");10226 return count;10227 }10228 10229 deleted += count;10230 }10231 10232 return deleted;10233 }10234 bool warpInputExpPrintObjects(FILE *stream, psArray *objects, bool mdcf)10235 {10236 PS_ASSERT_PTR_NON_NULL(objects, false);10237 10238 psMetadata *output = psMetadataAlloc();10239 for (long i = 0; i < psArrayLength(objects); i++) {10240 psMetadata *md = warpInputExpMetadataFromObject(objects->data[i]);10241 if (!psMetadataAddMetadata(10242 output,10243 PS_LIST_TAIL,10244 WARPINPUTEXP_TABLE_NAME,10245 PS_META_DUPLICATE_OK,10246 NULL,10247 md10248 )) {10249 psError(PS_ERR_UNKNOWN, false, "failed to add metadata");10250 psFree(md);10251 psFree(output);10252 return false;10253 }10254 psFree(md);10255 }10256 10257 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) {10258 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");10259 psFree(output);10260 }10261 psFree(output);10262 10263 return true;10264 }10265 bool warpInputExpPrintObject(FILE *stream, warpInputExpRow *object, bool mdcf)10266 {10267 PS_ASSERT_PTR_NON_NULL(object, false);10268 10269 psMetadata *md = warpInputExpMetadataFromObject(object);10270 10271 if (!ippdbPrintMetadataRaw(stream, md, mdcf)) {10272 psError(PS_ERR_UNKNOWN, false, "failed to print metadata");10273 psFree(md);10274 }10275 10276 psFree(md);10277 10278 return true;10279 }10280 10000 static void warpSkyCellMapRowFree(warpSkyCellMapRow *object); 10281 10001 … … 10307 10027 { 10308 10028 psMetadata *md = psMetadataAlloc(); 10309 if (!psMetadataAdd(md, PS_LIST_TAIL, "warp_id", PS_DATA_S64, "Primary Key fkey(warp_id, cam_id) ref warp InputExp(warp_id, cam_id)", 0)) {10029 if (!psMetadataAdd(md, PS_LIST_TAIL, "warp_id", PS_DATA_S64, "Primary Key fkey(warp_id, cam_id) ref warpRun(warp_id, cam_id)", 0)) { 10310 10030 psError(PS_ERR_UNKNOWN, false, "failed to add item warp_id"); 10311 10031 psFree(md); … … 24078 23798 static void flatcorrRunRowFree(flatcorrRunRow *object); 24079 23799 24080 flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats )23800 flatcorrRunRow *flatcorrRunRowAlloc(psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats, const char *region) 24081 23801 { 24082 23802 flatcorrRunRow *_object; … … 24092 23812 _object->label = psStringCopy(label); 24093 23813 _object->stats = psStringCopy(stats); 23814 _object->region = psStringCopy(region); 24094 23815 24095 23816 return _object; … … 24104 23825 psFree(object->label); 24105 23826 psFree(object->stats); 23827 psFree(object->region); 24106 23828 } 24107 23829 … … 24144 23866 return false; 24145 23867 } 23868 if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, NULL, "255")) { 23869 psError(PS_ERR_UNKNOWN, false, "failed to add item region"); 23870 psFree(md); 23871 return false; 23872 } 24146 23873 24147 23874 bool status = psDBCreateTable(dbh, FLATCORRRUN_TABLE_NAME, md); … … 24157 23884 } 24158 23885 24159 bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats )23886 bool flatcorrRunInsert(psDB * dbh, psS64 corr_id, const char *dvodb, const char *filter, const char *state, const char *workdir, const char *label, const char *stats, const char *region) 24160 23887 { 24161 23888 psMetadata *md = psMetadataAlloc(); … … 24192 23919 if (!psMetadataAdd(md, PS_LIST_TAIL, "stats", PS_DATA_STRING, NULL, stats)) { 24193 23920 psError(PS_ERR_UNKNOWN, false, "failed to add item stats"); 23921 psFree(md); 23922 return false; 23923 } 23924 if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, NULL, region)) { 23925 psError(PS_ERR_UNKNOWN, false, "failed to add item region"); 24194 23926 psFree(md); 24195 23927 return false; … … 24218 23950 bool flatcorrRunInsertObject(psDB *dbh, flatcorrRunRow *object) 24219 23951 { 24220 return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object->filter, object->state, object->workdir, object->label, object->stats );23952 return flatcorrRunInsert(dbh, object->corr_id, object->dvodb, object->filter, object->state, object->workdir, object->label, object->stats, object->region); 24221 23953 } 24222 23954 … … 24326 24058 return false; 24327 24059 } 24060 if (!psMetadataAdd(md, PS_LIST_TAIL, "region", PS_DATA_STRING, NULL, object->region)) { 24061 psError(PS_ERR_UNKNOWN, false, "failed to add item region"); 24062 psFree(md); 24063 return false; 24064 } 24328 24065 24329 24066 … … 24370 24107 return false; 24371 24108 } 24372 24373 return flatcorrRunRowAlloc(corr_id, dvodb, filter, state, workdir, label, stats); 24109 char* region = psMetadataLookupPtr(&status, md, "region"); 24110 if (!status) { 24111 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item region"); 24112 return false; 24113 } 24114 24115 return flatcorrRunRowAlloc(corr_id, dvodb, filter, state, workdir, label, stats, region); 24374 24116 } 24375 24117 psArray *flatcorrRunSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit)
Note:
See TracChangeset
for help on using the changeset viewer.
