cdrs/query/
exec_executor.rs1use r2d2;
2use std::cell::RefCell;
3
4use crate::cluster::{GetCompressor, GetConnection};
5use crate::error;
6use crate::frame::{Frame, IntoBytes};
7use crate::query::{QueryParams, QueryParamsBuilder, QueryValues};
8use crate::transport::CDRSTransport;
9use crate::types::CBytesShort;
10
11use super::utils::{prepare_flags, send_frame};
12
13pub type PreparedQuery = CBytesShort;
14
15pub trait ExecExecutor<
16 T: CDRSTransport + 'static,
17 M: r2d2::ManageConnection<Connection = RefCell<T>, Error = error::Error> + Sized,
18>: GetConnection<T, M> + GetCompressor<'static>
19{
20 fn exec_with_params_tw(
21 &self,
22 prepared: &PreparedQuery,
23 query_parameters: QueryParams,
24 with_tracing: bool,
25 with_warnings: bool,
26 ) -> error::Result<Frame>
27 where
28 Self: Sized,
29 {
30 let flags = prepare_flags(with_tracing, with_warnings);
31 let options_frame = Frame::new_req_execute(prepared, query_parameters, flags).into_cbytes();
32
33 send_frame(self, options_frame)
34 }
35
36 fn exec_with_params(
37 &self,
38 prepared: &PreparedQuery,
39 query_parameters: QueryParams,
40 ) -> error::Result<Frame>
41 where
42 Self: Sized,
43 {
44 self.exec_with_params_tw(prepared, query_parameters, false, false)
45 }
46
47 fn exec_with_values_tw<V: Into<QueryValues>>(
48 &self,
49 prepared: &PreparedQuery,
50 values: V,
51 with_tracing: bool,
52 with_warnings: bool,
53 ) -> error::Result<Frame>
54 where
55 Self: Sized,
56 {
57 let query_params_builder = QueryParamsBuilder::new();
58 let query_params = query_params_builder.values(values.into()).finalize();
59 self.exec_with_params_tw(prepared, query_params, with_tracing, with_warnings)
60 }
61
62 fn exec_with_values<V: Into<QueryValues>>(
63 &self,
64 prepared: &PreparedQuery,
65 values: V,
66 ) -> error::Result<Frame>
67 where
68 Self: Sized,
69 {
70 self.exec_with_values_tw(prepared, values, false, false)
71 }
72
73 fn exec_tw(
74 &self,
75 prepared: &PreparedQuery,
76 with_tracing: bool,
77 with_warnings: bool,
78 ) -> error::Result<Frame>
79 where
80 Self: Sized,
81 {
82 let query_params = QueryParamsBuilder::new().finalize();
83 self.exec_with_params_tw(prepared, query_params, with_tracing, with_warnings)
84 }
85
86 fn exec(&mut self, prepared: &PreparedQuery) -> error::Result<Frame>
87 where
88 Self: Sized,
89 {
90 self.exec_tw(prepared, false, false)
91 }
92}