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

Method open

src/dsql/DsqlBatch.cpp:191–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

189}
190
191DsqlBatch* DsqlBatch::open(thread_db* tdbb, DsqlDmlRequest* req, IMessageMetadata* inMetadata,
192 unsigned parLength, const UCHAR* par)
193{
194 SET_TDBB(tdbb);
195 Jrd::ContextPoolHolder context(tdbb, &req->getPool());
196
197 // Validate cursor or batch being not already open
198
199 if (req->req_cursor)
200 {
201 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-502) <<
202 Arg::Gds(isc_dsql_cursor_open_err));
203 }
204
205 if (req->req_batch)
206 {
207 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-502) <<
208 Arg::Gds(isc_batch_open));
209 }
210
211 // Sanity checks before creating batch
212
213 if (!req->getRequest())
214 {
215 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-504) <<
216 Arg::Gds(isc_unprepared_stmt));
217 }
218
219 const auto statement = req->getDsqlStatement();
220
221 if (statement->getFlags() & DsqlStatement::FLAG_ORPHAN)
222 {
223 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
224 Arg::Gds(isc_bad_req_handle));
225 }
226
227 switch (statement->getType())
228 {
229 case DsqlStatement::TYPE_INSERT:
230 case DsqlStatement::TYPE_DELETE:
231 case DsqlStatement::TYPE_UPDATE:
232 case DsqlStatement::TYPE_EXEC_PROCEDURE:
233 case DsqlStatement::TYPE_EXEC_BLOCK:
234 break;
235
236 default:
237 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
238 Arg::Gds(isc_batch_type));
239 }
240
241 const dsql_msg* message = statement->getSendMsg();
242 if (! (inMetadata && message && req->parseMetadata(inMetadata, message->msg_parameters)))
243 {
244 ERRD_post(Arg::Gds(isc_sqlerr) << Arg::Num(-901) <<
245 Arg::Gds(isc_batch_param));
246 }
247
248 // Open reader for parameters block

Callers 3

executeMethod · 0.45
executeMethod · 0.45
executeMethod · 0.45

Calls 13

SET_TDBBFunction · 0.85
ERRD_postFunction · 0.85
GdsClass · 0.85
NumClass · 0.85
getSendMsgMethod · 0.80
getBufferTagMethod · 0.80
DsqlBatchClass · 0.70
getRequestMethod · 0.45
getDsqlStatementMethod · 0.45
getFlagsMethod · 0.45
getTypeMethod · 0.45
parseMetadataMethod · 0.45

Tested by

no test coverage detected