Changeset 9788 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Oct 30, 2006, 11:55:36 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (20 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r9783 r9788 47 47 #define P3PENDINGEXP_TABLE_NAME "p3PendingExp" 48 48 #define P3PROCESSEDEXP_TABLE_NAME "p3ProcessedExp" 49 #define P3MASK_TABLE_NAME "p3Mask" 49 50 #define DETRUN_TABLE_NAME "detRun" 50 51 #define DETINPUTEXP_TABLE_NAME "detInputExp" … … 6030 6031 static void p3PendingExpRowFree(p3PendingExpRow *object); 6031 6032 6032 p3PendingExpRow *p3PendingExpRowAlloc(const char *exp_tag, psS32 p2_version, psS32 p3_version )6033 p3PendingExpRow *p3PendingExpRowAlloc(const char *exp_tag, psS32 p2_version, psS32 p3_version, const char *label) 6033 6034 { 6034 6035 p3PendingExpRow *_object; … … 6040 6041 _object->p2_version = p2_version; 6041 6042 _object->p3_version = p3_version; 6043 _object->label = psStringCopy(label); 6042 6044 6043 6045 return _object; … … 6047 6049 { 6048 6050 psFree(object->exp_tag); 6051 psFree(object->label); 6049 6052 } 6050 6053 … … 6067 6070 return false; 6068 6071 } 6072 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) { 6073 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6074 psFree(md); 6075 return false; 6076 } 6069 6077 6070 6078 bool status = psDBCreateTable(dbh, P3PENDINGEXP_TABLE_NAME, md); … … 6080 6088 } 6081 6089 6082 bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version )6090 bool p3PendingExpInsert(psDB * dbh, const char *exp_tag, psS32 p2_version, psS32 p3_version, const char *label) 6083 6091 { 6084 6092 psMetadata *md = psMetadataAlloc(); … … 6095 6103 if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) { 6096 6104 psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version"); 6105 psFree(md); 6106 return false; 6107 } 6108 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 6109 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6097 6110 psFree(md); 6098 6111 return false; … … 6121 6134 bool p3PendingExpInsertObject(psDB *dbh, p3PendingExpRow *object) 6122 6135 { 6123 return p3PendingExpInsert(dbh, object->exp_tag, object->p2_version, object->p3_version );6136 return p3PendingExpInsert(dbh, object->exp_tag, object->p2_version, object->p3_version, object->label); 6124 6137 } 6125 6138 … … 6209 6222 return false; 6210 6223 } 6224 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 6225 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6226 psFree(md); 6227 return false; 6228 } 6211 6229 6212 6230 … … 6233 6251 return false; 6234 6252 } 6235 6236 return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version); 6253 char* label = psMetadataLookupPtr(&status, md, "label"); 6254 if (!status) { 6255 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 6256 return false; 6257 } 6258 6259 return p3PendingExpRowAlloc(exp_tag, p2_version, p3_version, label); 6237 6260 } 6238 6261 psArray *p3PendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 6331 6354 static void p3ProcessedExpRowFree(p3ProcessedExpRow *object); 6332 6355 6333 p3ProcessedExpRow *p3ProcessedExpRowAlloc(const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version )6356 p3ProcessedExpRow *p3ProcessedExpRowAlloc(const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version, const char *label) 6334 6357 { 6335 6358 p3ProcessedExpRow *_object; … … 6353 6376 _object->p2_version = p2_version; 6354 6377 _object->p3_version = p3_version; 6378 _object->label = psStringCopy(label); 6355 6379 6356 6380 return _object; … … 6364 6388 psFree(object->b1_uri); 6365 6389 psFree(object->b2_uri); 6390 psFree(object->label); 6366 6391 } 6367 6392 … … 6444 6469 return false; 6445 6470 } 6471 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) { 6472 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6473 psFree(md); 6474 return false; 6475 } 6446 6476 6447 6477 bool status = psDBCreateTable(dbh, P3PROCESSEDEXP_TABLE_NAME, md); … … 6457 6487 } 6458 6488 6459 bool p3ProcessedExpInsert(psDB * dbh, const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version )6489 bool p3ProcessedExpInsert(psDB * dbh, const char *exp_tag, const char *uri, const char *recipe, psF64 bg, psF64 bg_stdev, psF64 bg_mean_stdev, psF32 sigma_ra, psF32 sigma_dec, psS32 nastro, const char *b1_uri, const char *b2_uri, psF32 zp_mean, psF32 zp_stdev, psS32 p2_version, psS32 p3_version, const char *label) 6460 6490 { 6461 6491 psMetadata *md = psMetadataAlloc(); … … 6532 6562 if (!psMetadataAdd(md, PS_LIST_TAIL, "p3_version", PS_DATA_S32, NULL, p3_version)) { 6533 6563 psError(PS_ERR_UNKNOWN, false, "failed to add item p3_version"); 6564 psFree(md); 6565 return false; 6566 } 6567 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 6568 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6534 6569 psFree(md); 6535 6570 return false; … … 6558 6593 bool p3ProcessedExpInsertObject(psDB *dbh, p3ProcessedExpRow *object) 6559 6594 { 6560 return p3ProcessedExpInsert(dbh, object->exp_tag, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->b1_uri, object->b2_uri, object->zp_mean, object->zp_stdev, object->p2_version, object->p3_version );6595 return p3ProcessedExpInsert(dbh, object->exp_tag, object->uri, object->recipe, object->bg, object->bg_stdev, object->bg_mean_stdev, object->sigma_ra, object->sigma_dec, object->nastro, object->b1_uri, object->b2_uri, object->zp_mean, object->zp_stdev, object->p2_version, object->p3_version, object->label); 6561 6596 } 6562 6597 … … 6706 6741 return false; 6707 6742 } 6743 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 6744 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6745 psFree(md); 6746 return false; 6747 } 6708 6748 6709 6749 … … 6790 6830 return false; 6791 6831 } 6792 6793 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); 6832 char* label = psMetadataLookupPtr(&status, md, "label"); 6833 if (!status) { 6834 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 6835 return false; 6836 } 6837 6838 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, label); 6794 6839 } 6795 6840 psArray *p3ProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 6886 6931 return true; 6887 6932 } 6933 static void p3MaskRowFree(p3MaskRow *object); 6934 6935 p3MaskRow *p3MaskRowAlloc(const char *label) 6936 { 6937 p3MaskRow *_object; 6938 6939 _object = psAlloc(sizeof(p3MaskRow)); 6940 psMemSetDeallocator(_object, (psFreeFunc)p3MaskRowFree); 6941 6942 _object->label = psStringCopy(label); 6943 6944 return _object; 6945 } 6946 6947 static void p3MaskRowFree(p3MaskRow *object) 6948 { 6949 psFree(object->label); 6950 } 6951 6952 bool p3MaskCreateTable(psDB *dbh) 6953 { 6954 psMetadata *md = psMetadataAlloc(); 6955 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "Primary Key", "64")) { 6956 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6957 psFree(md); 6958 return false; 6959 } 6960 6961 bool status = psDBCreateTable(dbh, P3MASK_TABLE_NAME, md); 6962 6963 psFree(md); 6964 6965 return status; 6966 } 6967 6968 bool p3MaskDropTable(psDB *dbh) 6969 { 6970 return psDBDropTable(dbh, P3MASK_TABLE_NAME); 6971 } 6972 6973 bool p3MaskInsert(psDB * dbh, const char *label) 6974 { 6975 psMetadata *md = psMetadataAlloc(); 6976 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 6977 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 6978 psFree(md); 6979 return false; 6980 } 6981 6982 bool status = psDBInsertOneRow(dbh, P3MASK_TABLE_NAME, md); 6983 psFree(md); 6984 6985 return status; 6986 } 6987 6988 long long p3MaskDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 6989 { 6990 long long deleted = 0; 6991 6992 long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, limit); 6993 if (count < 0) { 6994 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask"); 6995 return count; 6996 6997 deleted += count; 6998 } 6999 7000 return deleted; 7001 } 7002 bool p3MaskInsertObject(psDB *dbh, p3MaskRow *object) 7003 { 7004 return p3MaskInsert(dbh, object->label); 7005 } 7006 7007 bool p3MaskInsertObjects(psDB *dbh, psArray *objects) 7008 { 7009 for (long i = 0; i < psArrayLength(objects); i++) { 7010 if (!p3MaskInsertObject(dbh, objects->data[i])) { 7011 return false; 7012 } 7013 } 7014 7015 return true; 7016 } 7017 7018 bool p3MaskInsertFits(psDB *dbh, const psFits *fits) 7019 { 7020 psArray *rowSet; 7021 7022 // move to (the first?) extension named P3MASK_TABLE_NAME 7023 if (!psFitsMoveExtName(fits, P3MASK_TABLE_NAME)) { 7024 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P3MASK_TABLE_NAME); 7025 return false; 7026 } 7027 7028 // check HDU type 7029 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 7030 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 7031 return false; 7032 } 7033 7034 // read fits table 7035 rowSet = psFitsReadTable(fits); 7036 if (!rowSet) { 7037 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 7038 psFree(rowSet); 7039 return false; 7040 } 7041 7042 if (!psDBInsertRows(dbh, P3MASK_TABLE_NAME, rowSet)) { 7043 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 7044 psFree(rowSet); 7045 return false; 7046 } 7047 7048 psFree(rowSet); 7049 7050 return true; 7051 } 7052 7053 bool p3MaskSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 7054 { 7055 psArray *rowSet; 7056 7057 rowSet = psDBSelectRows(dbh, P3MASK_TABLE_NAME, where, limit); 7058 if (!rowSet) { 7059 return false; 7060 } 7061 7062 // output to fits 7063 if (!psFitsWriteTable(fits, NULL, rowSet, P3MASK_TABLE_NAME)) { 7064 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 7065 psFree(rowSet); 7066 return false; 7067 } 7068 7069 psFree(rowSet); 7070 7071 return true; 7072 } 7073 7074 psMetadata *p3MaskMetadataFromObject(const p3MaskRow *object) 7075 { 7076 psMetadata *md = psMetadataAlloc(); 7077 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 7078 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 7079 psFree(md); 7080 return false; 7081 } 7082 7083 7084 return md; 7085 } 7086 7087 p3MaskRow *p3MaskObjectFromMetadata(psMetadata *md) 7088 { 7089 7090 bool status = false; 7091 char* label = psMetadataLookupPtr(&status, md, "label"); 7092 if (!status) { 7093 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 7094 return false; 7095 } 7096 7097 return p3MaskRowAlloc(label); 7098 } 7099 psArray *p3MaskSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 7100 { 7101 psArray *rowSet; 7102 psArray *returnSet; 7103 psU64 i; 7104 7105 rowSet = psDBSelectRows(dbh, P3MASK_TABLE_NAME, where, limit); 7106 if (!rowSet) { 7107 return NULL; 7108 } 7109 7110 // convert psMetadata rows to row objects 7111 7112 returnSet = psArrayAllocEmpty(rowSet->n); 7113 7114 for (i = 0; i < rowSet->n; i++) { 7115 p3MaskRow *object = p3MaskObjectFromMetadata(rowSet->data[i]); 7116 psArrayAdd(returnSet, 0, object); 7117 psFree(object); 7118 } 7119 7120 psFree(rowSet); 7121 7122 return returnSet; 7123 } 7124 bool p3MaskDeleteObject(psDB *dbh, const p3MaskRow *object) 7125 { 7126 psMetadata *where = p3MaskMetadataFromObject(object); 7127 long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, 0); 7128 psFree(where) 7129 if (count < 0) { 7130 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask"); 7131 return false; 7132 } 7133 if (count > 1) { 7134 // XXX should this be a psAbort() instead? It is possible that 7135 // having an object match multiple rows was by design. 7136 psError(PS_ERR_UNKNOWN, true, "p3MaskRow object matched more then one row. Check your database schema"); 7137 return false; 7138 } 7139 7140 return true; 7141 } 7142 long long p3MaskDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 7143 { 7144 long long deleted = 0; 7145 7146 for (long long i = 0; i < objects->n; i++) { 7147 p3MaskRow *object = objects->data[i]; 7148 psMetadata *where = p3MaskMetadataFromObject(object); 7149 long long count = psDBDeleteRows(dbh, P3MASK_TABLE_NAME, where, limit); 7150 psFree(where) 7151 if (count < 0) { 7152 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p3Mask"); 7153 return count; 7154 } 7155 7156 deleted += count; 7157 } 7158 7159 return deleted; 7160 } 7161 bool p3MaskPrintObjects(FILE *stream, psArray *objects, bool mdcf) 7162 { 7163 PS_ASSERT_PTR_NON_NULL(objects, false); 7164 7165 psMetadata *output = psMetadataAlloc(); 7166 for (long i = 0; i < psArrayLength(objects); i++) { 7167 psMetadata *md = p3MaskMetadataFromObject(objects->data[i]); 7168 if (!psMetadataAddMetadata( 7169 output, 7170 PS_LIST_TAIL, 7171 P3MASK_TABLE_NAME, 7172 PS_META_DUPLICATE_OK, 7173 NULL, 7174 md 7175 )) { 7176 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 7177 psFree(md); 7178 psFree(output); 7179 return false; 7180 } 7181 psFree(md); 7182 } 7183 7184 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 7185 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 7186 psFree(output); 7187 } 7188 psFree(output); 7189 7190 return true; 7191 } 6888 7192 static void detRunRowFree(detRunRow *object); 6889 7193
Note:
See TracChangeset
for help on using the changeset viewer.
