Changeset 9788 for trunk/ippdb/src
- Timestamp:
- Oct 30, 2006, 11:55:36 AM (20 years ago)
- Location:
- trunk/ippdb/src
- Files:
-
- 2 edited
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 -
trunk/ippdb/src/ippdb.h
r9783 r9788 2985 2985 psS32 p2_version; 2986 2986 psS32 p3_version; 2987 char *label; 2987 2988 } p3PendingExpRow; 2988 2989 … … 2995 2996 const char *exp_tag, 2996 2997 psS32 p2_version, 2997 psS32 p3_version 2998 psS32 p3_version, 2999 const char *label 2998 3000 ); 2999 3001 … … 3027 3029 const char *exp_tag, 3028 3030 psS32 p2_version, 3029 psS32 p3_version 3031 psS32 p3_version, 3032 const char *label 3030 3033 ); 3031 3034 … … 3185 3188 psS32 p2_version; 3186 3189 psS32 p3_version; 3190 char *label; 3187 3191 } p3ProcessedExpRow; 3188 3192 … … 3207 3211 psF32 zp_stdev, 3208 3212 psS32 p2_version, 3209 psS32 p3_version 3213 psS32 p3_version, 3214 const char *label 3210 3215 ); 3211 3216 … … 3251 3256 psF32 zp_stdev, 3252 3257 psS32 p2_version, 3253 psS32 p3_version 3258 psS32 p3_version, 3259 const char *label 3254 3260 ); 3255 3261 … … 3386 3392 FILE *stream, ///< a stream 3387 3393 psArray *objects, ///< An array of p3ProcessedExpRow objects 3394 bool mdcf ///< format as mdconfig or simple 3395 ); 3396 /** p3MaskRow data structure 3397 * 3398 * Structure for representing a single row of p3Mask table data. 3399 */ 3400 3401 typedef struct { 3402 char *label; 3403 } p3MaskRow; 3404 3405 /** Creates a new p3MaskRow object 3406 * 3407 * @return A new p3MaskRow object or NULL on failure. 3408 */ 3409 3410 p3MaskRow *p3MaskRowAlloc( 3411 const char *label 3412 ); 3413 3414 /** Creates a new p3Mask table 3415 * 3416 * @return true on success 3417 */ 3418 3419 bool p3MaskCreateTable( 3420 psDB *dbh ///< Database handle 3421 ); 3422 3423 /** Deletes a p3Mask table 3424 * 3425 * @return true on success 3426 */ 3427 3428 bool p3MaskDropTable( 3429 psDB *dbh ///< Database handle 3430 ); 3431 3432 /** Insert a single row into a table 3433 * 3434 * This function constructs and inserts a single row based on it's parameters. 3435 * 3436 * @return true on success 3437 */ 3438 3439 bool p3MaskInsert( 3440 psDB *dbh, ///< Database handle 3441 const char *label 3442 ); 3443 3444 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 3445 * 3446 * @return A The number of rows removed or a negative value on error 3447 */ 3448 3449 long long p3MaskDelete( 3450 psDB *dbh, ///< Database handle 3451 const psMetadata *where, ///< Row match criteria 3452 unsigned long long limit ///< Maximum number of elements to delete 3453 ); 3454 3455 /** Insert a single p3MaskRow object into a table 3456 * 3457 * This function constructs and inserts a single row based on it's parameters. 3458 * 3459 * @return true on success 3460 */ 3461 3462 bool p3MaskInsertObject( 3463 psDB *dbh, ///< Database handle 3464 p3MaskRow *object ///< p3MaskRow object 3465 ); 3466 3467 /** Insert an array of p3MaskRow object into a table 3468 * 3469 * This function constructs and inserts multiple rows based on it's parameters. 3470 * 3471 * @return true on success 3472 */ 3473 3474 bool p3MaskInsertObjects( 3475 psDB *dbh, ///< Database handle 3476 psArray *objects ///< array of p3MaskRow objects 3477 ); 3478 3479 /** Insert data from a binary FITS table p3MaskRow into the database 3480 * 3481 * This function expects a psFits object with a FITS table as the first 3482 * extension. The table must have at least one row of data in it, that is of 3483 * the appropriate format (number of columns and their type). All other 3484 * extensions are ignored. 3485 * 3486 * @return true on success 3487 */ 3488 3489 bool p3MaskInsertFits( 3490 psDB *dbh, ///< Database handle 3491 const psFits *fits ///< psFits object 3492 ); 3493 3494 /** Selects up to limit from the database and returns them in a binary FITS table 3495 * 3496 * This function assumes an empty psFits object and will create a FITS table 3497 * as the first extension. 3498 * 3499 * See psDBSelectRows() for documentation on the format of where. 3500 * 3501 * @return true on success 3502 */ 3503 3504 bool p3MaskSelectRowsFits( 3505 psDB *dbh, ///< Database handle 3506 psFits *fits, ///< psFits object 3507 const psMetadata *where, ///< Row match criteria 3508 unsigned long long limit ///< Maximum number of elements to return 3509 ); 3510 3511 /** Convert a p3MaskRow into an equivalent psMetadata 3512 * 3513 * @return A psMetadata pointer or NULL on error 3514 */ 3515 3516 psMetadata *p3MaskMetadataFromObject( 3517 const p3MaskRow *object ///< fooRow to convert into a psMetadata 3518 ); 3519 3520 /** Convert a psMetadata into an equivalent fooRow 3521 * 3522 * @return A p3MaskRow pointer or NULL on error 3523 */ 3524 3525 p3MaskRow *p3MaskObjectFromMetadata( 3526 psMetadata *md ///< psMetadata to convert into a fooRow 3527 ); 3528 /** Selects up to limit rows from the database and returns as p3MaskRow objects in a psArray 3529 * 3530 * See psDBSelectRows() for documentation on the format of where. 3531 * 3532 * @return A psArray pointer or NULL on error 3533 */ 3534 3535 psArray *p3MaskSelectRowObjects( 3536 psDB *dbh, ///< Database handle 3537 const psMetadata *where, ///< Row match criteria 3538 unsigned long long limit ///< Maximum number of elements to return 3539 ); 3540 /** Deletes a row from the database coresponding to an p3Mask 3541 * 3542 * Note that a 'where' search psMetadata is constructed from each object and 3543 * used to find rows to delete. 3544 * 3545 * @return A The number of rows removed or a negative value on error 3546 */ 3547 3548 bool p3MaskDeleteObject( 3549 psDB *dbh, ///< Database handle 3550 const p3MaskRow *object ///< Object to delete 3551 ); 3552 /** Deletes up to limit rows from the database and returns the number of rows actually deleted. 3553 * 3554 * Note that a 'where' search psMetadata is constructed from each object and 3555 * used to find rows to delete. 3556 * 3557 * @return A The number of rows removed or a negative value on error 3558 */ 3559 3560 long long p3MaskDeleteRowObjects( 3561 psDB *dbh, ///< Database handle 3562 const psArray *objects, ///< Array of objects to delete 3563 unsigned long long limit ///< Maximum number of elements to delete 3564 ); 3565 /** Formats and prints an array of p3MaskRow objects 3566 * 3567 * When mdcf is set the formated output is in psMetadataConfig 3568 * format, otherwise it is in a simple tabular format. 3569 * 3570 * @return true on success 3571 */ 3572 3573 bool p3MaskPrintObjects( 3574 FILE *stream, ///< a stream 3575 psArray *objects, ///< An array of p3MaskRow objects 3388 3576 bool mdcf ///< format as mdconfig or simple 3389 3577 );
Note:
See TracChangeset
for help on using the changeset viewer.
