sea_query_sqlx/
sqlx_postgres.rs1#[cfg(feature = "with-bigdecimal")]
2use sea_query::prelude::BigDecimal;
3#[cfg(feature = "with-rust_decimal")]
4use sea_query::prelude::Decimal;
5#[cfg(feature = "with-ipnetwork")]
6use sea_query::prelude::IpNetwork;
7#[cfg(feature = "with-json")]
8use sea_query::prelude::Json;
9#[cfg(feature = "with-mac_address")]
10use sea_query::prelude::MacAddress;
11#[cfg(feature = "with-uuid")]
12use sea_query::prelude::Uuid;
13#[cfg(feature = "with-time")]
14use sea_query::prelude::time;
15#[cfg(feature = "with-chrono")]
16use sea_query::prelude::{DateTime, FixedOffset, Local, NaiveDate, NaiveDateTime, NaiveTime, Utc};
17
18use sea_query::{ArrayType, Value};
19
20use crate::SqlxValues;
21
22impl sqlx::IntoArguments<'_, sqlx::postgres::Postgres> for SqlxValues {
23 fn into_arguments(self) -> sqlx::postgres::PgArguments {
24 let mut args = sqlx::postgres::PgArguments::default();
25 for arg in self.0.into_iter() {
26 use sqlx::Arguments;
27 match arg {
28 Value::Bool(b) => {
29 let _ = args.add(b);
30 }
31 Value::TinyInt(i) => {
32 let _ = args.add(i);
33 }
34 Value::SmallInt(i) => {
35 let _ = args.add(i);
36 }
37 Value::Int(i) => {
38 let _ = args.add(i);
39 }
40 Value::BigInt(i) => {
41 let _ = args.add(i);
42 }
43 Value::TinyUnsigned(i) => {
44 let _ = args.add(i.map(|i| i as i16));
45 }
46 Value::SmallUnsigned(i) => {
47 let _ = args.add(i.map(|i| i as i32));
48 }
49 Value::Unsigned(i) => {
50 let _ = args.add(i.map(|i| i as i64));
51 }
52 Value::BigUnsigned(i) => {
53 let _ = args.add(i.map(|i| <i64 as TryFrom<u64>>::try_from(i).unwrap()));
54 }
55 Value::Float(f) => {
56 let _ = args.add(f);
57 }
58 Value::Double(d) => {
59 let _ = args.add(d);
60 }
61 Value::String(s) => {
62 let _ = args.add(s.as_deref());
63 }
64 Value::Char(c) => {
65 let _ = args.add(c.map(|c| c.to_string()));
66 }
67 Value::Bytes(b) => {
68 let _ = args.add(b.as_deref());
69 }
70 #[cfg(feature = "with-chrono")]
71 Value::ChronoDate(d) => {
72 let _ = args.add(d);
73 }
74 #[cfg(feature = "with-chrono")]
75 Value::ChronoTime(t) => {
76 let _ = args.add(t);
77 }
78 #[cfg(feature = "with-chrono")]
79 Value::ChronoDateTime(t) => {
80 let _ = args.add(t);
81 }
82 #[cfg(feature = "with-chrono")]
83 Value::ChronoDateTimeUtc(t) => {
84 let _ = args.add(t);
85 }
86 #[cfg(feature = "with-chrono")]
87 Value::ChronoDateTimeLocal(t) => {
88 let _ = args.add(t);
89 }
90 #[cfg(feature = "with-chrono")]
91 Value::ChronoDateTimeWithTimeZone(t) => {
92 let _ = args.add(t);
93 }
94 #[cfg(feature = "with-time")]
95 Value::TimeDate(t) => {
96 let _ = args.add(t);
97 }
98 #[cfg(feature = "with-time")]
99 Value::TimeTime(t) => {
100 let _ = args.add(t);
101 }
102 #[cfg(feature = "with-time")]
103 Value::TimeDateTime(t) => {
104 let _ = args.add(t);
105 }
106 #[cfg(feature = "with-time")]
107 Value::TimeDateTimeWithTimeZone(t) => {
108 let _ = args.add(t);
109 }
110 #[cfg(feature = "with-uuid")]
111 Value::Uuid(uuid) => {
112 let _ = args.add(uuid);
113 }
114 #[cfg(feature = "with-rust_decimal")]
115 Value::Decimal(d) => {
116 let _ = args.add(d);
117 }
118 #[cfg(feature = "with-bigdecimal")]
119 Value::BigDecimal(d) => {
120 let _ = args.add(d.as_deref());
121 }
122 #[cfg(feature = "with-json")]
123 Value::Json(j) => {
124 let _ = args.add(j.as_deref());
125 }
126 #[cfg(feature = "with-ipnetwork")]
127 Value::IpNetwork(ip) => {
128 let _ = args.add(ip);
129 }
130 #[cfg(feature = "with-mac_address")]
131 Value::MacAddress(mac) => {
132 let _ = args.add(mac);
133 }
134 #[cfg(feature = "postgres-array")]
135 Value::Array(ty, v) => match ty {
136 ArrayType::Bool => {
137 let value: Option<Vec<bool>> = Value::Array(ty, v)
138 .expect("This Value::Array should consist of Value::Bool");
139 let _ = args.add(value);
140 }
141 ArrayType::TinyInt => {
142 let value: Option<Vec<i8>> = Value::Array(ty, v)
143 .expect("This Value::Array should consist of Value::TinyInt");
144 let _ = args.add(value);
145 }
146 ArrayType::SmallInt => {
147 let value: Option<Vec<i16>> = Value::Array(ty, v)
148 .expect("This Value::Array should consist of Value::SmallInt");
149 let _ = args.add(value);
150 }
151 ArrayType::Int => {
152 let value: Option<Vec<i32>> = Value::Array(ty, v)
153 .expect("This Value::Array should consist of Value::Int");
154 let _ = args.add(value);
155 }
156 ArrayType::BigInt => {
157 let value: Option<Vec<i64>> = Value::Array(ty, v)
158 .expect("This Value::Array should consist of Value::BigInt");
159 let _ = args.add(value);
160 }
161 ArrayType::TinyUnsigned => {
162 let value: Option<Vec<u8>> = Value::Array(ty, v)
163 .expect("This Value::Array should consist of Value::TinyUnsigned");
164 let value: Option<Vec<i16>> =
165 value.map(|vec| vec.into_iter().map(|i| i as i16).collect());
166 let _ = args.add(value);
167 }
168 ArrayType::SmallUnsigned => {
169 let value: Option<Vec<u16>> = Value::Array(ty, v)
170 .expect("This Value::Array should consist of Value::SmallUnsigned");
171 let value: Option<Vec<i32>> =
172 value.map(|vec| vec.into_iter().map(|i| i as i32).collect());
173 let _ = args.add(value);
174 }
175 ArrayType::Unsigned => {
176 let value: Option<Vec<u32>> = Value::Array(ty, v)
177 .expect("This Value::Array should consist of Value::Unsigned");
178 let value: Option<Vec<i64>> =
179 value.map(|vec| vec.into_iter().map(|i| i as i64).collect());
180 let _ = args.add(value);
181 }
182 ArrayType::BigUnsigned => {
183 let value: Option<Vec<u64>> = Value::Array(ty, v)
184 .expect("This Value::Array should consist of Value::BigUnsigned");
185 let value: Option<Vec<i64>> = value.map(|vec| {
186 vec.into_iter()
187 .map(|i| <i64 as TryFrom<u64>>::try_from(i).unwrap())
188 .collect()
189 });
190 let _ = args.add(value);
191 }
192 ArrayType::Float => {
193 let value: Option<Vec<f32>> = Value::Array(ty, v)
194 .expect("This Value::Array should consist of Value::Float");
195 let _ = args.add(value);
196 }
197 ArrayType::Double => {
198 let value: Option<Vec<f64>> = Value::Array(ty, v)
199 .expect("This Value::Array should consist of Value::Double");
200 let _ = args.add(value);
201 }
202 ArrayType::String => {
203 let value: Option<Vec<String>> = Value::Array(ty, v)
204 .expect("This Value::Array should consist of Value::String");
205 let _ = args.add(value);
206 }
207 ArrayType::Char => {
208 let value: Option<Vec<char>> = Value::Array(ty, v)
209 .expect("This Value::Array should consist of Value::Char");
210 let value: Option<Vec<String>> =
211 value.map(|vec| vec.into_iter().map(|c| c.to_string()).collect());
212 let _ = args.add(value);
213 }
214 ArrayType::Bytes => {
215 let value: Option<Vec<Vec<u8>>> = Value::Array(ty, v)
216 .expect("This Value::Array should consist of Value::Bytes");
217 let _ = args.add(value);
218 }
219 #[cfg(feature = "with-chrono")]
220 ArrayType::ChronoDate => {
221 let value: Option<Vec<NaiveDate>> = Value::Array(ty, v)
222 .expect("This Value::Array should consist of Value::ChronoDate");
223 let _ = args.add(value);
224 }
225 #[cfg(feature = "with-chrono")]
226 ArrayType::ChronoTime => {
227 let value: Option<Vec<NaiveTime>> = Value::Array(ty, v)
228 .expect("This Value::Array should consist of Value::ChronoTime");
229 let _ = args.add(value);
230 }
231 #[cfg(feature = "with-chrono")]
232 ArrayType::ChronoDateTime => {
233 let value: Option<Vec<NaiveDateTime>> = Value::Array(ty, v)
234 .expect("This Value::Array should consist of Value::ChronoDateTime");
235 let _ = args.add(value);
236 }
237 #[cfg(feature = "with-chrono")]
238 ArrayType::ChronoDateTimeUtc => {
239 let value: Option<Vec<DateTime<Utc>>> = Value::Array(ty, v)
240 .expect("This Value::Array should consist of Value::ChronoDateTimeUtc");
241 let _ = args.add(value);
242 }
243 #[cfg(feature = "with-chrono")]
244 ArrayType::ChronoDateTimeLocal => {
245 let value: Option<Vec<DateTime<Local>>> = Value::Array(ty, v).expect(
246 "This Value::Array should consist of Value::ChronoDateTimeLocal",
247 );
248 let _ = args.add(value);
249 }
250 #[cfg(feature = "with-chrono")]
251 ArrayType::ChronoDateTimeWithTimeZone => {
252 let value: Option<Vec<DateTime<FixedOffset>>> = Value::Array(ty, v).expect(
253 "This Value::Array should consist of Value::ChronoDateTimeWithTimeZone",
254 );
255 let _ = args.add(value);
256 }
257 #[cfg(feature = "with-time")]
258 ArrayType::TimeDate => {
259 let value: Option<Vec<time::Date>> = Value::Array(ty, v)
260 .expect("This Value::Array should consist of Value::TimeDate");
261 let _ = args.add(value);
262 }
263 #[cfg(feature = "with-time")]
264 ArrayType::TimeTime => {
265 let value: Option<Vec<time::Time>> = Value::Array(ty, v)
266 .expect("This Value::Array should consist of Value::TimeTime");
267 let _ = args.add(value);
268 }
269 #[cfg(feature = "with-time")]
270 ArrayType::TimeDateTime => {
271 let value: Option<Vec<time::PrimitiveDateTime>> = Value::Array(ty, v)
272 .expect("This Value::Array should consist of Value::TimeDateTime");
273 let _ = args.add(value);
274 }
275 #[cfg(feature = "with-time")]
276 ArrayType::TimeDateTimeWithTimeZone => {
277 let value: Option<Vec<time::OffsetDateTime>> = Value::Array(ty, v).expect(
278 "This Value::Array should consist of Value::TimeDateTimeWithTimeZone",
279 );
280 let _ = args.add(value);
281 }
282 #[cfg(feature = "with-uuid")]
283 ArrayType::Uuid => {
284 let value: Option<Vec<Uuid>> = Value::Array(ty, v)
285 .expect("This Value::Array should consist of Value::Uuid");
286 let _ = args.add(value);
287 }
288 #[cfg(feature = "with-rust_decimal")]
289 ArrayType::Decimal => {
290 let value: Option<Vec<Decimal>> = Value::Array(ty, v)
291 .expect("This Value::Array should consist of Value::Decimal");
292 let _ = args.add(value);
293 }
294 #[cfg(feature = "with-bigdecimal")]
295 ArrayType::BigDecimal => {
296 let value: Option<Vec<BigDecimal>> = Value::Array(ty, v)
297 .expect("This Value::Array should consist of Value::BigDecimal");
298 let _ = args.add(value);
299 }
300 #[cfg(feature = "with-json")]
301 ArrayType::Json => {
302 let value: Option<Vec<Json>> = Value::Array(ty, v)
303 .expect("This Value::Array should consist of Value::Json");
304 let _ = args.add(value);
305 }
306 #[cfg(feature = "with-ipnetwork")]
307 ArrayType::IpNetwork => {
308 let value: Option<Vec<IpNetwork>> = Value::Array(ty, v)
309 .expect("This Value::Array should consist of Value::IpNetwork");
310 let _ = args.add(value);
311 }
312 #[cfg(feature = "with-mac_address")]
313 ArrayType::MacAddress => {
314 let value: Option<Vec<MacAddress>> = Value::Array(ty, v)
315 .expect("This Value::Array should consist of Value::MacAddress");
316 let _ = args.add(value);
317 }
318 },
319 #[cfg(feature = "postgres-vector")]
320 Value::Vector(v) => {
321 let _ = args.add(v);
322 } }
327 }
328 args
329 }
330}