MCPcopy Create free account
hub / github.com/SOCI/soci / rewriteQuery

Method rewriteQuery

src/backends/firebird/statement.cpp:179–287  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179void firebird_statement_backend::rewriteQuery(
180 std::string const &query, std::vector<char> &buffer)
181{
182 // buffer for temporary query
183 std::vector<char> tmpQuery;
184 std::vector<char>::iterator qItr;
185
186 // buffer for query with named parameters changed to standard ones
187 std::vector<char> rewQuery(query.size() + 1);
188
189 // take care of named parameters in original query
190 rewriteParameters(query, rewQuery);
191
192 std::string const prefix("execute procedure ");
193 std::string const prefix2("select * from ");
194
195 // for procedures, we are preparing statement to determine
196 // type of procedure.
197 if (procedure_)
198 {
199 tmpQuery.resize(prefix.size() + rewQuery.size());
200 qItr = tmpQuery.begin();
201 std::copy(prefix.begin(), prefix.end(), qItr);
202 qItr += prefix.size();
203 }
204 else
205 {
206 tmpQuery.resize(rewQuery.size());
207 qItr = tmpQuery.begin();
208 }
209
210 // prepare temporary query
211 std::copy(rewQuery.begin(), rewQuery.end(), qItr);
212
213 // preparing buffers for output parameters
214 if (sqldap_ == nullptr)
215 {
216 prepareSQLDA(&sqldap_);
217 }
218
219 ISC_STATUS stat[ISC_STATUS_LENGTH];
220 isc_stmt_handle tmpStmtp = 0;
221
222 // allocate temporary statement to determine its type
223 if (isc_dsql_allocate_statement(stat, &session_.dbhp_, &tmpStmtp))
224 {
225 throw_iscerror(stat);
226 }
227
228 // prepare temporary statement
229 if (isc_dsql_prepare(stat, session_.current_transaction(), &tmpStmtp, 0,
230 &tmpQuery[0], SQL_DIALECT_V6, sqldap_))
231 {
232 throw_iscerror(stat);
233 }
234
235 // get statement type
236 int stType = statementType(tmpStmtp);

Callers

nothing calls this directly

Calls 7

throw_iscerrorFunction · 0.85
statementTypeFunction · 0.85
current_transactionMethod · 0.80
sizeMethod · 0.45
resizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected