1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
use error; use query::{QueryParams, QueryParamsBuilder, QueryValues}; use frame::{Flag, Frame, IntoBytes}; use frame::parser::parse_frame; use types::CBytesShort; use cluster::{GetCompressor, GetTransport}; use transport::CDRSTransport; pub type PreparedQuery = CBytesShort; pub trait ExecExecutor<'a, T: CDRSTransport + 'a> : GetTransport<'a, T> + GetCompressor<'a> { fn exec_with_params_tw(&mut self, prepared: &PreparedQuery, query_parameters: QueryParams, with_tracing: bool, with_warnings: bool) -> error::Result<Frame> { let mut flags = vec![]; if with_tracing { flags.push(Flag::Tracing); } if with_warnings { flags.push(Flag::Warning); } let options_frame = Frame::new_req_execute(prepared, query_parameters, flags).into_cbytes(); let ref compression = self.get_compressor(); let transport = self.get_transport().ok_or("Unable to get transport")?; (transport.write(options_frame.as_slice()))?; parse_frame(transport, compression) } fn exec_with_params(&mut self, prepared: &PreparedQuery, query_parameters: QueryParams) -> error::Result<Frame> { self.exec_with_params_tw(prepared, query_parameters, false, false) } fn exec_with_values_tw<V: Into<QueryValues>>(&mut self, prepared: &PreparedQuery, values: V, with_tracing: bool, with_warnings: bool) -> error::Result<Frame> { let query_params_builder = QueryParamsBuilder::new(); let query_params = query_params_builder.values(values.into()).finalize(); self.exec_with_params_tw(prepared, query_params, with_tracing, with_warnings) } fn exec_with_values<V: Into<QueryValues>>(&mut self, prepared: &PreparedQuery, values: V) -> error::Result<Frame> { self.exec_with_values_tw(prepared, values, false, false) } fn exec_tw(&mut self, prepared: &PreparedQuery, with_tracing: bool, with_warnings: bool) -> error::Result<Frame> { let query_params = QueryParamsBuilder::new().finalize(); self.exec_with_params_tw(prepared, query_params, with_tracing, with_warnings) } fn exec(&'a mut self, prepared: &PreparedQuery) -> error::Result<Frame> { self.exec_tw(prepared, false, false) } }