MCPcopy Create free account
hub / github.com/f0rr0/oliphaunt / query_internal

Method query_internal

src/pglite/client.rs:303–384  ·  view source on GitHub ↗
(
        &mut self,
        sql: &str,
        params: &[Value],
        options: Option<&QueryOptions>,
    )

Source from the content-addressed store, hash-verified

301 }
302
303 fn query_internal(
304 &mut self,
305 sql: &str,
306 params: &[Value],
307 options: Option<&QueryOptions>,
308 ) -> Result<Results> {
309 let default_options = QueryOptions::default();
310 let query_opts = options.unwrap_or(&default_options);
311
312 self.handle_blob_input(query_opts.blob.as_ref())?;
313
314 let params_snapshot: Vec<Value> = params.to_vec();
315 let options_snapshot = options.cloned();
316 let mut collected_messages: Vec<BackendMessage> = Vec::new();
317
318 let mut exec_opts = ExecProtocolOptions::no_sync();
319 exec_opts.on_notice = query_opts.on_notice.clone();
320 exec_opts.data_transfer_container = query_opts.data_transfer_container;
321
322 let result: Result<()> = (|| {
323 let param_types = if query_opts.param_types.is_empty() {
324 &[] as &[i32]
325 } else {
326 &query_opts.param_types
327 };
328
329 let mut messages = {
330 let _phase = timing::phase("client.query.parse_describe");
331 self.parse_and_describe(sql, param_types, exec_opts.clone())?
332 };
333 let mut data_type_ids = parse_describe_statement_results(&messages);
334 if self.ensure_array_types_for_bind_values(params, &data_type_ids, query_opts)? {
335 messages = {
336 let _phase = timing::phase("client.query.parse_describe_after_array_register");
337 self.parse_and_describe(sql, param_types, exec_opts.clone())?
338 };
339 data_type_ids = parse_describe_statement_results(&messages);
340 }
341 collected_messages.extend(messages);
342 let bind_values = {
343 let _phase = timing::phase("client.query.prepare_bind_values");
344 self.prepare_bind_values(params, &data_type_ids, query_opts)?
345 };
346 let bind_config = BindConfig {
347 values: bind_values,
348 ..Default::default()
349 };
350 let execute_batch = {
351 let _phase = timing::phase("client.query.serialize_execute");
352 let mut execute_batch = Vec::new();
353 execute_batch.extend(Serialize::bind(&bind_config));
354 execute_batch.extend(Serialize::describe(&PortalTarget::new('P', None)));
355 execute_batch.extend(Serialize::execute(None));
356 execute_batch.extend(Serialize::sync());
357 execute_batch
358 };
359 let ExecProtocolResult { messages, .. } = {
360 let _phase = timing::phase("client.query.execute_roundtrip");

Callers 1

queryMethod · 0.80

Calls 9

phaseFunction · 0.85
syncFunction · 0.85
handle_blob_inputMethod · 0.80
parse_and_describeMethod · 0.80
prepare_bind_valuesMethod · 0.80
exec_protocolMethod · 0.80
finish_queryMethod · 0.80

Tested by

no test coverage detected