xitca_postgres/execute/
sync_impl.rs1use crate::{
2 client::ClientBorrow,
3 driver::codec::AsParams,
4 error::Error,
5 query::{RowAffected, RowSimpleStream, RowStream, RowStreamGuarded, RowStreamOwned},
6 statement::{
7 Statement, StatementCreateBlocking, StatementGuarded, StatementNamed, StatementPreparedQuery,
8 StatementPreparedQueryOwned, StatementQuery, StatementSingleRTTQuery,
9 },
10};
11
12use super::ExecuteBlocking;
13
14impl<'s, C> ExecuteBlocking<&C> for &'s Statement
15where
16 C: ClientBorrow,
17{
18 type ExecuteOutput = Result<u64, Error>;
19 type QueryOutput = Result<RowStream<'s>, Error>;
20
21 #[inline]
22 fn execute_blocking(self, cli: &C) -> Self::ExecuteOutput {
23 let stream = self.query_blocking(cli)?;
24 RowAffected::from(stream).wait()
25 }
26
27 #[inline]
28 fn query_blocking(self, cli: &C) -> Self::QueryOutput {
29 self.bind_none().query_blocking(cli)
30 }
31}
32
33impl<C> ExecuteBlocking<&C> for &str
34where
35 C: ClientBorrow,
36{
37 type ExecuteOutput = Result<u64, Error>;
38 type QueryOutput = Result<RowSimpleStream, Error>;
39
40 #[inline]
41 fn execute_blocking(self, cli: &C) -> Self::ExecuteOutput {
42 let stream = self.query_blocking(cli)?;
43 RowAffected::from(stream).wait()
44 }
45
46 #[inline]
47 fn query_blocking(self, cli: &C) -> Self::QueryOutput {
48 cli.borrow_cli_ref().query(self)
49 }
50}
51
52impl<'c, C> ExecuteBlocking<&'c C> for StatementNamed<'_>
53where
54 C: ClientBorrow,
55{
56 type ExecuteOutput = Result<StatementGuarded<'c, C>, Error>;
57 type QueryOutput = Self::ExecuteOutput;
58
59 #[inline]
60 fn execute_blocking(self, cli: &'c C) -> Self::ExecuteOutput {
61 let stmt = cli
62 .borrow_cli_ref()
63 .query(StatementCreateBlocking::from((self, cli)))??;
64 Ok(stmt.into_guarded(cli))
65 }
66
67 #[inline]
68 fn query_blocking(self, cli: &'c C) -> Self::QueryOutput {
69 self.execute_blocking(cli)
70 }
71}
72
73impl<'s, C, P> ExecuteBlocking<&C> for StatementPreparedQuery<'s, P>
74where
75 C: ClientBorrow,
76 P: AsParams,
77{
78 type ExecuteOutput = Result<u64, Error>;
79 type QueryOutput = Result<RowStream<'s>, Error>;
80
81 #[inline]
82 fn execute_blocking(self, cli: &C) -> Result<u64, Error> {
83 let stream = self.query_blocking(cli)?;
84 RowAffected::from(stream).wait()
85 }
86
87 #[inline]
88 fn query_blocking(self, cli: &C) -> Self::QueryOutput {
89 cli.borrow_cli_ref().query(self)
90 }
91}
92
93impl<'s, C, P> ExecuteBlocking<&C> for StatementPreparedQueryOwned<'s, P>
94where
95 C: ClientBorrow,
96 P: AsParams,
97{
98 type ExecuteOutput = Result<u64, Error>;
99 type QueryOutput = Result<RowStreamOwned, Error>;
100
101 #[inline]
102 fn execute_blocking(self, cli: &C) -> Result<u64, Error> {
103 let stream = self.query_blocking(cli)?;
104 RowAffected::from(stream).wait()
105 }
106
107 #[inline]
108 fn query_blocking(self, cli: &C) -> Self::QueryOutput {
109 cli.borrow_cli_ref().query(self)
110 }
111}
112
113impl<'c, C, P> ExecuteBlocking<&'c C> for StatementQuery<'_, P>
114where
115 C: ClientBorrow,
116 P: AsParams,
117{
118 type ExecuteOutput = Result<u64, Error>;
119 type QueryOutput = Result<RowStreamGuarded<'c, C>, Error>;
120
121 #[inline]
122 fn execute_blocking(self, cli: &C) -> Result<u64, Error> {
123 self.into_single_rtt().execute_blocking(cli)
124 }
125
126 #[inline]
127 fn query_blocking(self, cli: &'c C) -> Self::QueryOutput {
128 self.into_single_rtt().query_blocking(cli)
129 }
130}
131
132impl<'c, C, P> ExecuteBlocking<&'c C> for StatementSingleRTTQuery<'_, P>
133where
134 C: ClientBorrow,
135 P: AsParams,
136{
137 type ExecuteOutput = Result<u64, Error>;
138 type QueryOutput = Result<RowStreamGuarded<'c, C>, Error>;
139
140 #[inline]
141 fn execute_blocking(self, cli: &C) -> Self::ExecuteOutput {
142 let stream = self.query_blocking(cli)?;
143 RowAffected::from(stream).wait()
144 }
145
146 #[inline]
147 fn query_blocking(self, cli: &'c C) -> Self::QueryOutput {
148 cli.borrow_cli_ref().query(self.into_with_cli(cli))
149 }
150}
151
152impl<C> ExecuteBlocking<&C> for &std::path::Path
153where
154 C: ClientBorrow,
155{
156 type ExecuteOutput = Result<u64, Error>;
157 type QueryOutput = Result<RowSimpleStream, Error>;
158
159 #[inline]
160 fn execute_blocking(self, cli: &C) -> Self::ExecuteOutput {
161 std::fs::read_to_string(self)?.execute_blocking(cli)
162 }
163
164 #[inline]
165 fn query_blocking(self, cli: &C) -> Self::QueryOutput {
166 std::fs::read_to_string(self)?.query_blocking(cli)
167 }
168}