MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / gen_finish

Function gen_finish

src/gpre/obj_cxx.cpp:2236–2282  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2234//
2235
2236static 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//____________________________________________________________

Callers 1

OBJ_CXX_actionFunction · 0.70

Calls 5

PATTERN_expandFunction · 0.85
successFunction · 0.85
status_vectorFunction · 0.70
printaFunction · 0.70
set_sqlcodeFunction · 0.70

Tested by

no test coverage detected