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

Function DSQL_execute_immediate

src/dsql/dsql.cpp:327–380  ·  view source on GitHub ↗

Common part of prepare and execute a statement.

Source from the content-addressed store, hash-verified

325
326// Common part of prepare and execute a statement.
327void DSQL_execute_immediate(thread_db* tdbb, Jrd::Attachment* attachment, jrd_tra** tra_handle,
328 ULONG length, const TEXT* string, USHORT dialect,
329 IMessageMetadata* in_meta, const UCHAR* in_msg,
330 IMessageMetadata* out_meta, UCHAR* out_msg,
331 bool isInternalRequest)
332{
333 SET_TDBB(tdbb);
334
335 dsql_dbb* const database = init(tdbb, attachment);
336 DsqlRequest* dsqlRequest = NULL;
337
338 try
339 {
340 dsqlRequest = safePrepareRequest(tdbb, database, *tra_handle, length, string, dialect,
341 isInternalRequest);
342
343 const auto dsqlStatement = dsqlRequest->getDsqlStatement();
344
345 // Only allow NULL trans_handle if we're starting a transaction or set session properties
346
347 if (!*tra_handle &&
348 dsqlStatement->getType() != DsqlStatement::TYPE_START_TRANS &&
349 dsqlStatement->getType() != DsqlStatement::TYPE_SESSION_MANAGEMENT)
350 {
351 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
352 Arg::Gds(isc_bad_trans_handle));
353 }
354
355 Jrd::ContextPoolHolder context(tdbb, &dsqlRequest->getPool());
356
357 // A select having cursor is a singleton select when executed immediate
358 const bool singleton = dsqlStatement->isCursorBased();
359 if (singleton && !(out_msg && out_meta))
360 {
361 ERRD_post(Arg::Gds(isc_dsql_sqlda_err) <<
362 Arg::Gds(isc_dsql_no_output_sqlda));
363 }
364
365 dsqlRequest->req_transaction = *tra_handle;
366
367 dsqlRequest->execute(tdbb, tra_handle, in_meta, in_msg, out_meta, out_msg, singleton);
368
369 DsqlRequest::destroy(tdbb, dsqlRequest);
370 }
371 catch (const Exception&)
372 {
373 if (dsqlRequest)
374 {
375 Jrd::ContextPoolHolder context(tdbb, &dsqlRequest->getPool());
376 DsqlRequest::destroy(tdbb, dsqlRequest);
377 }
378 throw;
379 }
380}
381
382
383/**

Callers 2

executeMethod · 0.85
executeSqlMethod · 0.85

Calls 11

SET_TDBBFunction · 0.85
safePrepareRequestFunction · 0.85
ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
isCursorBasedMethod · 0.80
initFunction · 0.70
destroyFunction · 0.50
getDsqlStatementMethod · 0.45
getTypeMethod · 0.45
executeMethod · 0.45

Tested by

no test coverage detected