| 2234 | // |
| 2235 | |
| 2236 | static void gen_finish( const act* action, int column) |
| 2237 | { |
| 2238 | PAT args; |
| 2239 | const TEXT* pattern1 = "if (%S2)\n %S2->%S1(%V1);"; |
| 2240 | |
| 2241 | args.pat_vector1 = status_vector(action); |
| 2242 | args.pat_string2 = gpreGlob.transaction_name; |
| 2243 | |
| 2244 | if (gpreGlob.sw_auto || ((action->act_flags & ACT_sql) && action->act_type != ACT_disconnect)) |
| 2245 | { |
| 2246 | args.pat_string1 = ((action->act_type != ACT_rfinish) ? "commit" : "rollback"); |
| 2247 | PATTERN_expand((USHORT) column, pattern1, &args); |
| 2248 | } |
| 2249 | |
| 2250 | const gpre_dbb* db = NULL; |
| 2251 | |
| 2252 | // the user supplied one or more db_handles |
| 2253 | |
| 2254 | for (const rdy* ready = (rdy*) action->act_object; ready; ready = ready->rdy_next) |
| 2255 | { |
| 2256 | db = ready->rdy_database; |
| 2257 | printa(column, "%s->detach(%s);", |
| 2258 | db->dbb_name->sym_string, status_vector(action)); |
| 2259 | success(column, true, status_vector(action)); |
| 2260 | printa(column + INDENT, "%s = 0;", db->dbb_name->sym_string); |
| 2261 | } |
| 2262 | // no hanbdles, so we finish all known databases |
| 2263 | |
| 2264 | if (!db) |
| 2265 | { |
| 2266 | for (db = gpreGlob.isc_databases; db; db = db->dbb_next) |
| 2267 | { |
| 2268 | if ((action->act_error || (action->act_flags & ACT_sql)) && db != gpreGlob.isc_databases) |
| 2269 | { |
| 2270 | printa(column, "if (%s && !(%s->getState() & Firebird::IStatus::STATE_ERRORS)) ", db->dbb_name->sym_string, global_status_name); |
| 2271 | } |
| 2272 | else |
| 2273 | printa(column, "if (%s)", db->dbb_name->sym_string); |
| 2274 | printa(column + INDENT, "%s->detach(%s);", |
| 2275 | db->dbb_name->sym_string, status_vector(action)); |
| 2276 | success(column, true, status_vector(action)); |
| 2277 | printa(column + INDENT, "%s = 0;", db->dbb_name->sym_string); |
| 2278 | } |
| 2279 | } |
| 2280 | |
| 2281 | set_sqlcode(action, column); |
| 2282 | } |
| 2283 | |
| 2284 | |
| 2285 | //____________________________________________________________ |
no test coverage detected