Changeset 9783 for trunk/ippdb/src/ippdb.c
- Timestamp:
- Oct 30, 2006, 11:25:59 AM (20 years ago)
- File:
-
- 1 edited
-
trunk/ippdb/src/ippdb.c (modified) (21 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippdb/src/ippdb.c
r9742 r9783 20 20 /* 21 21 * 22 * This file was generated by glueforge 0. 2922 * This file was generated by glueforge 0.30 23 23 * 24 24 * Do NOT directly edit this file. … … 43 43 #define P2PENDINGIMFILE_TABLE_NAME "p2PendingImfile" 44 44 #define P2PROCESSEDEXP_TABLE_NAME "p2ProcessedExp" 45 #define P2MASK_TABLE_NAME "p2Mask" 45 46 #define P2PROCESSEDIMFILE_TABLE_NAME "p2ProcessedImfile" 46 47 #define P3PENDINGEXP_TABLE_NAME "p3PendingExp" … … 4261 4262 static void p2PendingExpRowFree(p2PendingExpRow *object); 4262 4263 4263 p2PendingExpRow *p2PendingExpRowAlloc(const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version )4264 p2PendingExpRow *p2PendingExpRowAlloc(const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version, const char *label) 4264 4265 { 4265 4266 p2PendingExpRow *_object; … … 4272 4273 _object->p1_version = p1_version; 4273 4274 _object->p2_version = p2_version; 4275 _object->label = psStringCopy(label); 4274 4276 4275 4277 return _object; … … 4280 4282 psFree(object->exp_tag); 4281 4283 psFree(object->recipe); 4284 psFree(object->label); 4282 4285 } 4283 4286 … … 4305 4308 return false; 4306 4309 } 4310 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) { 4311 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 4312 psFree(md); 4313 return false; 4314 } 4307 4315 4308 4316 bool status = psDBCreateTable(dbh, P2PENDINGEXP_TABLE_NAME, md); … … 4318 4326 } 4319 4327 4320 bool p2PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version )4328 bool p2PendingExpInsert(psDB * dbh, const char *exp_tag, const char *recipe, psS32 p1_version, psS32 p2_version, const char *label) 4321 4329 { 4322 4330 psMetadata *md = psMetadataAlloc(); … … 4338 4346 if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) { 4339 4347 psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version"); 4348 psFree(md); 4349 return false; 4350 } 4351 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 4352 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 4340 4353 psFree(md); 4341 4354 return false; … … 4364 4377 bool p2PendingExpInsertObject(psDB *dbh, p2PendingExpRow *object) 4365 4378 { 4366 return p2PendingExpInsert(dbh, object->exp_tag, object->recipe, object->p1_version, object->p2_version );4379 return p2PendingExpInsert(dbh, object->exp_tag, object->recipe, object->p1_version, object->p2_version, object->label); 4367 4380 } 4368 4381 … … 4457 4470 return false; 4458 4471 } 4472 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 4473 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 4474 psFree(md); 4475 return false; 4476 } 4459 4477 4460 4478 … … 4486 4504 return false; 4487 4505 } 4488 4489 return p2PendingExpRowAlloc(exp_tag, recipe, p1_version, p2_version); 4506 char* label = psMetadataLookupPtr(&status, md, "label"); 4507 if (!status) { 4508 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 4509 return false; 4510 } 4511 4512 return p2PendingExpRowAlloc(exp_tag, recipe, p1_version, p2_version, label); 4490 4513 } 4491 4514 psArray *p2PendingExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 4951 4974 static void p2ProcessedExpRowFree(p2ProcessedExpRow *object); 4952 4975 4953 p2ProcessedExpRow *p2ProcessedExpRowAlloc(const char *exp_tag, psS32 p1_version, psS32 p2_version )4976 p2ProcessedExpRow *p2ProcessedExpRowAlloc(const char *exp_tag, psS32 p1_version, psS32 p2_version, const char *label) 4954 4977 { 4955 4978 p2ProcessedExpRow *_object; … … 4961 4984 _object->p1_version = p1_version; 4962 4985 _object->p2_version = p2_version; 4986 _object->label = psStringCopy(label); 4963 4987 4964 4988 return _object; … … 4968 4992 { 4969 4993 psFree(object->exp_tag); 4994 psFree(object->label); 4970 4995 } 4971 4996 … … 4988 5013 return false; 4989 5014 } 5015 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "key", "64")) { 5016 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5017 psFree(md); 5018 return false; 5019 } 4990 5020 4991 5021 bool status = psDBCreateTable(dbh, P2PROCESSEDEXP_TABLE_NAME, md); … … 5001 5031 } 5002 5032 5003 bool p2ProcessedExpInsert(psDB * dbh, const char *exp_tag, psS32 p1_version, psS32 p2_version )5033 bool p2ProcessedExpInsert(psDB * dbh, const char *exp_tag, psS32 p1_version, psS32 p2_version, const char *label) 5004 5034 { 5005 5035 psMetadata *md = psMetadataAlloc(); … … 5016 5046 if (!psMetadataAdd(md, PS_LIST_TAIL, "p2_version", PS_DATA_S32, NULL, p2_version)) { 5017 5047 psError(PS_ERR_UNKNOWN, false, "failed to add item p2_version"); 5048 psFree(md); 5049 return false; 5050 } 5051 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 5052 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5018 5053 psFree(md); 5019 5054 return false; … … 5042 5077 bool p2ProcessedExpInsertObject(psDB *dbh, p2ProcessedExpRow *object) 5043 5078 { 5044 return p2ProcessedExpInsert(dbh, object->exp_tag, object->p1_version, object->p2_version );5079 return p2ProcessedExpInsert(dbh, object->exp_tag, object->p1_version, object->p2_version, object->label); 5045 5080 } 5046 5081 … … 5130 5165 return false; 5131 5166 } 5167 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 5168 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5169 psFree(md); 5170 return false; 5171 } 5132 5172 5133 5173 … … 5154 5194 return false; 5155 5195 } 5156 5157 return p2ProcessedExpRowAlloc(exp_tag, p1_version, p2_version); 5196 char* label = psMetadataLookupPtr(&status, md, "label"); 5197 if (!status) { 5198 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 5199 return false; 5200 } 5201 5202 return p2ProcessedExpRowAlloc(exp_tag, p1_version, p2_version, label); 5158 5203 } 5159 5204 psArray *p2ProcessedExpSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) … … 5250 5295 return true; 5251 5296 } 5297 static void p2MaskRowFree(p2MaskRow *object); 5298 5299 p2MaskRow *p2MaskRowAlloc(const char *label) 5300 { 5301 p2MaskRow *_object; 5302 5303 _object = psAlloc(sizeof(p2MaskRow)); 5304 psMemSetDeallocator(_object, (psFreeFunc)p2MaskRowFree); 5305 5306 _object->label = psStringCopy(label); 5307 5308 return _object; 5309 } 5310 5311 static void p2MaskRowFree(p2MaskRow *object) 5312 { 5313 psFree(object->label); 5314 } 5315 5316 bool p2MaskCreateTable(psDB *dbh) 5317 { 5318 psMetadata *md = psMetadataAlloc(); 5319 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, "Primary Key", "64")) { 5320 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5321 psFree(md); 5322 return false; 5323 } 5324 5325 bool status = psDBCreateTable(dbh, P2MASK_TABLE_NAME, md); 5326 5327 psFree(md); 5328 5329 return status; 5330 } 5331 5332 bool p2MaskDropTable(psDB *dbh) 5333 { 5334 return psDBDropTable(dbh, P2MASK_TABLE_NAME); 5335 } 5336 5337 bool p2MaskInsert(psDB * dbh, const char *label) 5338 { 5339 psMetadata *md = psMetadataAlloc(); 5340 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, label)) { 5341 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5342 psFree(md); 5343 return false; 5344 } 5345 5346 bool status = psDBInsertOneRow(dbh, P2MASK_TABLE_NAME, md); 5347 psFree(md); 5348 5349 return status; 5350 } 5351 5352 long long p2MaskDelete(psDB *dbh, const psMetadata *where, unsigned long long limit) 5353 { 5354 long long deleted = 0; 5355 5356 long long count = psDBDeleteRows(dbh, P2MASK_TABLE_NAME, where, limit); 5357 if (count < 0) { 5358 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p2Mask"); 5359 return count; 5360 5361 deleted += count; 5362 } 5363 5364 return deleted; 5365 } 5366 bool p2MaskInsertObject(psDB *dbh, p2MaskRow *object) 5367 { 5368 return p2MaskInsert(dbh, object->label); 5369 } 5370 5371 bool p2MaskInsertObjects(psDB *dbh, psArray *objects) 5372 { 5373 for (long i = 0; i < psArrayLength(objects); i++) { 5374 if (!p2MaskInsertObject(dbh, objects->data[i])) { 5375 return false; 5376 } 5377 } 5378 5379 return true; 5380 } 5381 5382 bool p2MaskInsertFits(psDB *dbh, const psFits *fits) 5383 { 5384 psArray *rowSet; 5385 5386 // move to (the first?) extension named P2MASK_TABLE_NAME 5387 if (!psFitsMoveExtName(fits, P2MASK_TABLE_NAME)) { 5388 psError(PS_ERR_UNKNOWN, true, "failed to find FITS extension %s", P2MASK_TABLE_NAME); 5389 return false; 5390 } 5391 5392 // check HDU type 5393 if (psFitsGetExtType(fits) != PS_FITS_TYPE_BINARY_TABLE) { 5394 psError(PS_ERR_UNKNOWN, true, "FITS HDU type is not PS_FITS_TYPE_BINARY_TABLE"); 5395 return false; 5396 } 5397 5398 // read fits table 5399 rowSet = psFitsReadTable(fits); 5400 if (!rowSet) { 5401 psError(PS_ERR_UNKNOWN, true, "FITS read error or FITS table is empty"); 5402 psFree(rowSet); 5403 return false; 5404 } 5405 5406 if (!psDBInsertRows(dbh, P2MASK_TABLE_NAME, rowSet)) { 5407 psError(PS_ERR_UNKNOWN, false, "databse insert failed"); 5408 psFree(rowSet); 5409 return false; 5410 } 5411 5412 psFree(rowSet); 5413 5414 return true; 5415 } 5416 5417 bool p2MaskSelectRowsFits(psDB *dbh, psFits *fits, const psMetadata *where, unsigned long long limit) 5418 { 5419 psArray *rowSet; 5420 5421 rowSet = psDBSelectRows(dbh, P2MASK_TABLE_NAME, where, limit); 5422 if (!rowSet) { 5423 return false; 5424 } 5425 5426 // output to fits 5427 if (!psFitsWriteTable(fits, NULL, rowSet, P2MASK_TABLE_NAME)) { 5428 psError(PS_ERR_UNKNOWN, false, "FITS table write failed"); 5429 psFree(rowSet); 5430 return false; 5431 } 5432 5433 psFree(rowSet); 5434 5435 return true; 5436 } 5437 5438 psMetadata *p2MaskMetadataFromObject(const p2MaskRow *object) 5439 { 5440 psMetadata *md = psMetadataAlloc(); 5441 if (!psMetadataAdd(md, PS_LIST_TAIL, "label", PS_DATA_STRING, NULL, object->label)) { 5442 psError(PS_ERR_UNKNOWN, false, "failed to add item label"); 5443 psFree(md); 5444 return false; 5445 } 5446 5447 5448 return md; 5449 } 5450 5451 p2MaskRow *p2MaskObjectFromMetadata(psMetadata *md) 5452 { 5453 5454 bool status = false; 5455 char* label = psMetadataLookupPtr(&status, md, "label"); 5456 if (!status) { 5457 psError(PS_ERR_UNKNOWN, true, "failed to lookup value for item label"); 5458 return false; 5459 } 5460 5461 return p2MaskRowAlloc(label); 5462 } 5463 psArray *p2MaskSelectRowObjects(psDB *dbh, const psMetadata *where, unsigned long long limit) 5464 { 5465 psArray *rowSet; 5466 psArray *returnSet; 5467 psU64 i; 5468 5469 rowSet = psDBSelectRows(dbh, P2MASK_TABLE_NAME, where, limit); 5470 if (!rowSet) { 5471 return NULL; 5472 } 5473 5474 // convert psMetadata rows to row objects 5475 5476 returnSet = psArrayAllocEmpty(rowSet->n); 5477 5478 for (i = 0; i < rowSet->n; i++) { 5479 p2MaskRow *object = p2MaskObjectFromMetadata(rowSet->data[i]); 5480 psArrayAdd(returnSet, 0, object); 5481 psFree(object); 5482 } 5483 5484 psFree(rowSet); 5485 5486 return returnSet; 5487 } 5488 bool p2MaskDeleteObject(psDB *dbh, const p2MaskRow *object) 5489 { 5490 psMetadata *where = p2MaskMetadataFromObject(object); 5491 long long count = psDBDeleteRows(dbh, P2MASK_TABLE_NAME, where, 0); 5492 psFree(where) 5493 if (count < 0) { 5494 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p2Mask"); 5495 return false; 5496 } 5497 if (count > 1) { 5498 // XXX should this be a psAbort() instead? It is possible that 5499 // having an object match multiple rows was by design. 5500 psError(PS_ERR_UNKNOWN, true, "p2MaskRow object matched more then one row. Check your database schema"); 5501 return false; 5502 } 5503 5504 return true; 5505 } 5506 long long p2MaskDeleteRowObjects(psDB *dbh, const psArray *objects, unsigned long long limit) 5507 { 5508 long long deleted = 0; 5509 5510 for (long long i = 0; i < objects->n; i++) { 5511 p2MaskRow *object = objects->data[i]; 5512 psMetadata *where = p2MaskMetadataFromObject(object); 5513 long long count = psDBDeleteRows(dbh, P2MASK_TABLE_NAME, where, limit); 5514 psFree(where) 5515 if (count < 0) { 5516 psError(PS_ERR_UNKNOWN, true, "failed to delete row from p2Mask"); 5517 return count; 5518 } 5519 5520 deleted += count; 5521 } 5522 5523 return deleted; 5524 } 5525 bool p2MaskPrintObjects(FILE *stream, psArray *objects, bool mdcf) 5526 { 5527 PS_ASSERT_PTR_NON_NULL(objects, false); 5528 5529 psMetadata *output = psMetadataAlloc(); 5530 for (long i = 0; i < psArrayLength(objects); i++) { 5531 psMetadata *md = p2MaskMetadataFromObject(objects->data[i]); 5532 if (!psMetadataAddMetadata( 5533 output, 5534 PS_LIST_TAIL, 5535 P2MASK_TABLE_NAME, 5536 PS_META_DUPLICATE_OK, 5537 NULL, 5538 md 5539 )) { 5540 psError(PS_ERR_UNKNOWN, false, "failed to add metadata"); 5541 psFree(md); 5542 psFree(output); 5543 return false; 5544 } 5545 psFree(md); 5546 } 5547 5548 if (!ippdbPrintMetadataRaw(stream, output, mdcf)) { 5549 psError(PS_ERR_UNKNOWN, false, "failed to print metadata"); 5550 psFree(output); 5551 } 5552 psFree(output); 5553 5554 return true; 5555 } 5252 5556 static void p2ProcessedImfileRowFree(p2ProcessedImfileRow *object); 5253 5557
Note:
See TracChangeset
for help on using the changeset viewer.
