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

Function gen_create_database

src/gpre/obj_cxx.cpp:1246–1327  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1244//
1245
1246static void gen_create_database( const act* action, int column)
1247{
1248 const TEXT* pattern1 =
1249 "%DH = fbProvider->createDatabase (%V1, \"%DF\", %IF%S1, %S2%EL0, NULL%EN);";
1250 TEXT s1[32], s2[32], trname[32];
1251
1252 const gpre_req* request = ((const mdbb*) action->act_object)->mdbb_dpb_request;
1253 const gpre_dbb* db = request->req_database;
1254
1255 sprintf(s1, "fb_%dl", request->req_ident);
1256 sprintf(trname, "fb_%dt", request->req_ident);
1257
1258 if (request->req_flags & REQ_extend_dpb)
1259 {
1260 sprintf(s2, "fb_%dp", request->req_ident);
1261 if (request->req_length)
1262 printa(column, "%s = fb_%d;", s2, request->req_ident);
1263 else
1264 printa(column, "%s = (char*) 0;", s2);
1265
1266 printa(column,
1267 "isc_expand_dpb (&%s, &%s, isc_dpb_user_name, %s, isc_dpb_password, %s, isc_dpb_sql_role_name, %s, isc_dpb_lc_messages, %s, isc_dpb_lc_ctype, %s, 0);",
1268 s2, s1,
1269 db->dbb_r_user ? db->dbb_r_user : "(char*) 0",
1270 db->dbb_r_password ? db->dbb_r_password : "(char*) 0",
1271 db->dbb_r_sql_role ? db->dbb_r_sql_role : "(char*) 0",
1272 db->dbb_r_lc_messages ? db->dbb_r_lc_messages : "(char*) 0",
1273 db->dbb_r_lc_ctype ? db->dbb_r_lc_ctype : "(char*) 0");
1274 }
1275 else
1276 sprintf(s2, "fb_%d", request->req_ident);
1277
1278 PAT args;
1279 args.pat_vector1 = status_vector(action);
1280 args.pat_request = request;
1281 args.pat_database = db;
1282 args.pat_value1 = static_cast<int>(strlen(db->dbb_filename));
1283 args.pat_condition = (request->req_length || (request->req_flags & REQ_extend_dpb));
1284 args.pat_string1 = s1;
1285 args.pat_string2 = s2;
1286
1287 PATTERN_expand((USHORT) column, pattern1, &args);
1288
1289 // if the dpb was extended, free it here
1290
1291 if (request->req_flags & REQ_extend_dpb)
1292 {
1293 if (request->req_length)
1294 printa(column, "if (%s != fb_%d)", s2, request->req_ident);
1295 printa(column + (request->req_length ? INDENT : 0), "isc_free ((char*) %s);", s2);
1296
1297 // reset the length of the dpb
1298
1299 printa(column, "%s = %d;", s1, request->req_length);
1300 }
1301
1302 request = action->act_request;
1303 success(column, true, global_status_name);

Callers 1

OBJ_CXX_actionFunction · 0.70

Calls 8

PATTERN_expandFunction · 0.85
successFunction · 0.85
printaFunction · 0.70
status_vectorFunction · 0.70
beginFunction · 0.70
alignFunction · 0.70
set_sqlcodeFunction · 0.70
endpFunction · 0.70

Tested by

no test coverage detected