boson_backend_sql_common/
macros.rs1#![allow(missing_docs)]
2
3#[macro_export]
4macro_rules! sql_execute {
5 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
6 match &$backend.pool {
7 $crate::SqlPool::Sqlite(pool) => {
8 let $q = sqlx::query($sql);
9 let $q = $body;
10 $q.execute(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
11 }
12 $crate::SqlPool::Postgres(pool) => {
13 let $q = sqlx::query($sql);
14 let $q = $body;
15 $q.execute(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
16 }
17 }
18 Ok::<(), boson_core::BosonError>(())
19 }};
20}
21
22#[macro_export]
23macro_rules! sql_fetch_optional_map {
24 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
25 match &$backend.pool {
26 $crate::SqlPool::Sqlite(pool) => {
27 let $q = sqlx::query($sql);
28 let $q = $bind;
29 match $q.fetch_optional(pool).await.map_err(|e| $crate::error_map::map_err(&e))? {
30 Some($row) => Ok(Some($map?)),
31 None => Ok(None),
32 }
33 }
34 $crate::SqlPool::Postgres(pool) => {
35 let $q = sqlx::query($sql);
36 let $q = $bind;
37 match $q.fetch_optional(pool).await.map_err(|e| $crate::error_map::map_err(&e))? {
38 Some($row) => Ok(Some($map?)),
39 None => Ok(None),
40 }
41 }
42 }
43 }};
44}
45
46#[macro_export]
47macro_rules! sql_fetch_one_map {
48 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
49 match &$backend.pool {
50 $crate::SqlPool::Sqlite(pool) => {
51 let $q = sqlx::query($sql);
52 let $q = $bind;
53 let $row = $q.fetch_one(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
54 $map
55 }
56 $crate::SqlPool::Postgres(pool) => {
57 let $q = sqlx::query($sql);
58 let $q = $bind;
59 let $row = $q.fetch_one(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
60 $map
61 }
62 }
63 }};
64}
65
66#[macro_export]
67macro_rules! sql_fetch_all_map {
68 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
69 match &$backend.pool {
70 $crate::SqlPool::Sqlite(pool) => {
71 let $q = sqlx::query($sql);
72 let $q = $bind;
73 let rows = $q.fetch_all(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
74 rows.iter().map(|$row| $map).collect::<boson_core::Result<Vec<_>>>()
75 }
76 $crate::SqlPool::Postgres(pool) => {
77 let $q = sqlx::query($sql);
78 let $q = $bind;
79 let rows = $q.fetch_all(pool).await.map_err(|e| $crate::error_map::map_err(&e))?;
80 rows.iter().map(|$row| $map).collect::<boson_core::Result<Vec<_>>>()
81 }
82 }
83 }};
84}
85
86#[macro_export]
87macro_rules! sql_fetch_optional {
88 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
89 match &$backend.pool {
90 $crate::SqlPool::Sqlite(pool) => {
91 let $q = sqlx::query($sql);
92 let $q = $body;
93 $q.fetch_optional(pool)
94 .await
95 .map_err(|e| $crate::error_map::map_err(&e))
96 }
97 $crate::SqlPool::Postgres(pool) => {
98 let $q = sqlx::query($sql);
99 let $q = $body;
100 $q.fetch_optional(pool)
101 .await
102 .map_err(|e| $crate::error_map::map_err(&e))
103 }
104 }
105 }};
106}
107
108#[macro_export]
109macro_rules! sql_fetch_one {
110 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
111 match &$backend.pool {
112 $crate::SqlPool::Sqlite(pool) => {
113 let $q = sqlx::query($sql);
114 let $q = $body;
115 $q.fetch_one(pool).await.map_err(|e| $crate::error_map::map_err(&e))
116 }
117 $crate::SqlPool::Postgres(pool) => {
118 let $q = sqlx::query($sql);
119 let $q = $body;
120 $q.fetch_one(pool).await.map_err(|e| $crate::error_map::map_err(&e))
121 }
122 }
123 }};
124}
125
126#[macro_export]
127macro_rules! sql_fetch_all {
128 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
129 match &$backend.pool {
130 $crate::SqlPool::Sqlite(pool) => {
131 let $q = sqlx::query($sql);
132 let $q = $body;
133 $q.fetch_all(pool).await.map_err(|e| $crate::error_map::map_err(&e))
134 }
135 $crate::SqlPool::Postgres(pool) => {
136 let $q = sqlx::query($sql);
137 let $q = $body;
138 $q.fetch_all(pool).await.map_err(|e| $crate::error_map::map_err(&e))
139 }
140 }
141 }};
142}