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

Function DSQL_prepare

src/dsql/dsql.cpp:250–295  ·  view source on GitHub ↗

DSQL_prepare @brief Prepare a statement for execution. @param user_status @param trans_handle @param req_handle @param length @param string @param dialect @param item_length @param items @param buffer_length @param buffer **/

Source from the content-addressed store, hash-verified

248
249 **/
250DsqlRequest* DSQL_prepare(thread_db* tdbb,
251 Attachment* attachment, jrd_tra* transaction,
252 ULONG length, const TEXT* string, USHORT dialect, unsigned prepareFlags,
253 Array<UCHAR>* items, Array<UCHAR>* buffer,
254 bool isInternalRequest)
255{
256 SET_TDBB(tdbb);
257
258 dsql_dbb* database = init(tdbb, attachment);
259 DsqlRequest* dsqlRequest = NULL;
260
261 try
262 {
263 // Allocate a new request block and then prepare the request.
264
265 dsqlRequest = safePrepareRequest(tdbb, database, transaction, length, string, dialect,
266 isInternalRequest);
267
268 // Can not prepare a CREATE DATABASE/SCHEMA statement
269
270 const auto statement = dsqlRequest->getDsqlStatement();
271 if (statement->getType() == DsqlStatement::TYPE_CREATE_DB)
272 {
273 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-530) <<
274 Arg::Gds(isc_dsql_crdb_prepare_err));
275 }
276
277 if (items && buffer)
278 {
279 Jrd::ContextPoolHolder context(tdbb, &dsqlRequest->getPool());
280 sql_info(tdbb, dsqlRequest, items->getCount(), items->begin(),
281 buffer->getCount(), buffer->begin());
282 }
283
284 return dsqlRequest;
285 }
286 catch (const Exception&)
287 {
288 if (dsqlRequest)
289 {
290 Jrd::ContextPoolHolder context(tdbb, &dsqlRequest->getPool());
291 DsqlRequest::destroy(tdbb, dsqlRequest);
292 }
293 throw;
294 }
295}
296
297
298/**

Callers 2

prepareMethod · 0.85
initMethod · 0.85

Calls 12

SET_TDBBFunction · 0.85
safePrepareRequestFunction · 0.85
ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
sql_infoFunction · 0.85
initFunction · 0.70
destroyFunction · 0.50
getDsqlStatementMethod · 0.45
getTypeMethod · 0.45
getCountMethod · 0.45
beginMethod · 0.45

Tested by

no test coverage detected