Changeset 7293
- Timestamp:
- Jun 1, 2006, 5:55:20 PM (20 years ago)
- Location:
- trunk/ippTools/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ippTools/src/dettool.c
r7248 r7293 99 99 static bool defineMode(pxConfig *config) 100 100 { 101 bool status = false; 101 102 psString str = NULL; 102 bool status = false;103 103 104 104 PS_ASSERT_PTR_NON_NULL(config, false); 105 105 106 // start a transaction so we don't end up with orphaned det_ids 106 107 if (!psDBTransaction(config->dbh)) { 107 108 psError(PS_ERR_UNKNOWN, false, "database error"); 108 109 return false; 109 110 } 110 111 111 112 // what type of detRun is this? 112 113 // XXX make this flag required 113 str = psMetadataLookupStr(&status, config->args, "-det_type"); 114 115 // XXX the value being inserted is junk as we can't yet have an 'empty 116 // table' 117 detRunInsert(config->dbh, str); 114 psString det_type = psMetadataLookupStr(&status, config->args, "-det_type"); 115 detRunInsert(config->dbh, det_type); 118 116 long det_id = psDBLastInsertID(config->dbh); 119 117 120 // XXX this needs to fixed to support multipe exp_ids 118 // we have to support multipe exp_ids 119 psMetadataItem *item = psMetadataLookup(config->args, "-exp_id"); 121 120 psMetadata *where = psMetadataAlloc(); 122 if ((str = psMetadataLookupStr(&status, config->args, "-exp_id"))) { 121 122 // was more then one exp_id specified? 123 if (item->type == PS_DATA_METADATA_MULTI) { 124 // yes 125 psListIterator *iter = psListIteratorAlloc(item->data.list, 0, false); 126 psMetadataItem *mItem = NULL; 127 while ((mItem = psListGetAndIncrement(iter))) { 128 psString exp_id = mItem->data.V; 129 if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 130 PS_META_DUPLICATE_OK, "==", exp_id)) { 131 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); 132 // rollback 133 if (!psDBRollback(config->dbh)) { 134 psError(PS_ERR_UNKNOWN, false, "database error"); 135 } 136 psFree(iter); 137 psFree(where); 138 return false; 139 } 140 } 141 } else if ((str = psMetadataLookupStr(&status, config->args, "-exp_id"))) { 142 // no 123 143 if (!psMetadataAddStr(where, PS_LIST_TAIL, "exp_id", 0, "==", str)) { 124 144 psError(PS_ERR_UNKNOWN, false, "failed to add item exp_id"); … … 137 157 } 138 158 159 // check that the specified exp_ids actually exist 139 160 psArray *rawExps = rawDetrendExpSelectRowObjects(config->dbh, where, 0); 140 161 psFree(where); … … 148 169 } 149 170 150 detInputExpRow *detInputExp = rawDetrenTodetInputExpRow( 151 rawExps->data[0], 152 det_id 153 ); 154 155 if (!detInputExpInsertObject(config->dbh, detInputExp)) { 156 psError(PS_ERR_UNKNOWN, false, "database error"); 157 // rollback 158 if (!psDBRollback(config->dbh)) { 171 if (item->type == PS_DATA_METADATA_MULTI) { 172 // we should have one rawExp row be exp_id specified 173 if (psListLength(item->data.list) != psArrayLength(rawExps)) { 174 // rollback 175 if (!psDBRollback(config->dbh)) { 176 psError(PS_ERR_UNKNOWN, false, "database error"); 177 } 178 psAbort(config->argv[0], 179 "an -exp_id matched more then one rawExp (this should not happen"); 180 181 } 182 } else { 183 // we should have matched only one exp_id 184 if (psArrayLength(rawExps) != 1) { 185 // rollback 186 if (!psDBRollback(config->dbh)) { 187 psError(PS_ERR_UNKNOWN, false, "database error"); 188 } 189 psAbort(config->argv[0], 190 "an -exp_id matched more then one rawExp (this should not happen"); 191 } 192 } 193 194 // create new detInputExp row(s) from the rawExp row(s) 195 psArray *inputExps = psArrayAlloc(psArrayLength(rawExps)); 196 for (long i = 0; i < psArrayLength(rawExps); i++) { 197 detInputExpRow *inputExp = rawDetrenTodetInputExpRow( 198 rawExps->data[i], 199 det_id 200 ); 201 psArrayAdd(inputExps, 0, inputExp); 202 psFree(inputExp); 203 } 204 205 for (long i = 0; i < psArrayLength(inputExps); i++) { 206 if (!detInputExpInsertObject(config->dbh, inputExps->data[i])) { 159 207 psError(PS_ERR_UNKNOWN, false, "database error"); 160 } 161 return false; 208 // rollback 209 if (!psDBRollback(config->dbh)) { 210 psError(PS_ERR_UNKNOWN, false, "database error"); 211 } 212 return false; 213 } 162 214 } 163 215 -
trunk/ippTools/src/dettoolConfig.c
r7273 r7293 23 23 // -define 24 24 psMetadata *defineArgs = psMetadataAlloc(); 25 psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id", 0,25 psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-exp_id", PS_META_DUPLICATE_OK, 26 26 "include this exposure (XXX more then one)", NULL); 27 27 psMetadataAddStr(defineArgs, PS_LIST_TAIL, "-det_type", 0, … … 313 313 } 314 314 315 // save argv/argc 316 config->argv = argv; 317 config->argc = argc; 318 315 319 return config; 316 320 } -
trunk/ippTools/src/pxtools.h
r7053 r7293 49 49 psMetadata *args; 50 50 psMetadata *where; 51 int argc; 52 char **argv; 51 53 } pxConfig; 52 54
Note:
See TracChangeset
for help on using the changeset viewer.
