wick_sql/sqlx/
postgres.rs1mod serialize;
2pub(crate) use serialize::*;
3use sqlx::postgres::PgPoolOptions;
4use sqlx::{PgPool, Postgres};
5use url::Url;
6use wick_config::config::components::SqlComponentConfig;
7
8use crate::common::sql_wrapper::ConvertedType;
9use crate::Error;
10
11pub(crate) async fn connect(_config: &SqlComponentConfig, addr: &Url) -> Result<PgPool, Error> {
12 debug!(%addr, "connecting to postgres");
13
14 let pool = PgPoolOptions::new()
15 .max_connections(5)
16 .connect(addr.as_ref())
17 .await
18 .map_err(|e| Error::PostgresConnect(e.to_string()))?;
19 Ok(pool)
20}
21
22#[allow(clippy::cast_lossless)]
23pub(crate) fn make_query(
24 sql: &str,
25 args: Vec<ConvertedType>,
26) -> sqlx::query::Query<'_, Postgres, <Postgres as sqlx::database::HasArguments>::Arguments> {
27 let mut query = sqlx::query(sql);
28 for arg in args {
29 trace!(?arg, "binding arg");
30 query = match arg {
31 ConvertedType::I8(v) => query.bind(v),
32 ConvertedType::I16(v) => query.bind(v),
33 ConvertedType::I32(v) => query.bind(v),
34 ConvertedType::I64(v) => query.bind(v),
35 ConvertedType::U8(v) => query.bind(v.map(|v| v as i16)),
36 ConvertedType::U16(v) => query.bind(v),
37 ConvertedType::U32(v) => query.bind(v),
38 ConvertedType::U64(v) => query.bind(v),
39 ConvertedType::F32(v) => query.bind(v),
40 ConvertedType::F64(v) => query.bind(v),
41 ConvertedType::Bool(v) => query.bind(v),
42 ConvertedType::String(v) => query.bind(v),
43 ConvertedType::Datetime(v) => query.bind(v),
44 };
45 }
46 query
47}