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)
11 .await
12 .map_err(|e| $crate::error_map::map_err(&e))?;
13 }
14 $crate::SqlPool::Postgres(pool) => {
15 let $q = sqlx::query($sql);
16 let $q = $body;
17 $q.execute(pool)
18 .await
19 .map_err(|e| $crate::error_map::map_err(&e))?;
20 }
21 }
22 Ok::<(), boson_core::BosonError>(())
23 }};
24}
25
26#[macro_export]
27macro_rules! sql_fetch_optional_map {
28 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
29 match &$backend.pool {
30 $crate::SqlPool::Sqlite(pool) => {
31 let $q = sqlx::query($sql);
32 let $q = $bind;
33 match $q
34 .fetch_optional(pool)
35 .await
36 .map_err(|e| $crate::error_map::map_err(&e))?
37 {
38 Some($row) => Ok(Some($map?)),
39 None => Ok(None),
40 }
41 }
42 $crate::SqlPool::Postgres(pool) => {
43 let $q = sqlx::query($sql);
44 let $q = $bind;
45 match $q
46 .fetch_optional(pool)
47 .await
48 .map_err(|e| $crate::error_map::map_err(&e))?
49 {
50 Some($row) => Ok(Some($map?)),
51 None => Ok(None),
52 }
53 }
54 }
55 }};
56}
57
58#[macro_export]
59macro_rules! sql_fetch_one_map {
60 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
61 match &$backend.pool {
62 $crate::SqlPool::Sqlite(pool) => {
63 let $q = sqlx::query($sql);
64 let $q = $bind;
65 let $row = $q
66 .fetch_one(pool)
67 .await
68 .map_err(|e| $crate::error_map::map_err(&e))?;
69 $map
70 }
71 $crate::SqlPool::Postgres(pool) => {
72 let $q = sqlx::query($sql);
73 let $q = $bind;
74 let $row = $q
75 .fetch_one(pool)
76 .await
77 .map_err(|e| $crate::error_map::map_err(&e))?;
78 $map
79 }
80 }
81 }};
82}
83
84#[macro_export]
85macro_rules! sql_fetch_all_map {
86 ($backend:expr, $sql:expr, |$q:ident| $bind:expr, |$row:ident| $map:expr) => {{
87 match &$backend.pool {
88 $crate::SqlPool::Sqlite(pool) => {
89 let $q = sqlx::query($sql);
90 let $q = $bind;
91 let rows = $q
92 .fetch_all(pool)
93 .await
94 .map_err(|e| $crate::error_map::map_err(&e))?;
95 rows.iter()
96 .map(|$row| $map)
97 .collect::<boson_core::Result<Vec<_>>>()
98 }
99 $crate::SqlPool::Postgres(pool) => {
100 let $q = sqlx::query($sql);
101 let $q = $bind;
102 let rows = $q
103 .fetch_all(pool)
104 .await
105 .map_err(|e| $crate::error_map::map_err(&e))?;
106 rows.iter()
107 .map(|$row| $map)
108 .collect::<boson_core::Result<Vec<_>>>()
109 }
110 }
111 }};
112}
113
114#[macro_export]
115macro_rules! sql_fetch_optional {
116 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
117 match &$backend.pool {
118 $crate::SqlPool::Sqlite(pool) => {
119 let $q = sqlx::query($sql);
120 let $q = $body;
121 $q.fetch_optional(pool)
122 .await
123 .map_err(|e| $crate::error_map::map_err(&e))
124 }
125 $crate::SqlPool::Postgres(pool) => {
126 let $q = sqlx::query($sql);
127 let $q = $body;
128 $q.fetch_optional(pool)
129 .await
130 .map_err(|e| $crate::error_map::map_err(&e))
131 }
132 }
133 }};
134}
135
136#[macro_export]
137macro_rules! sql_fetch_one {
138 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
139 match &$backend.pool {
140 $crate::SqlPool::Sqlite(pool) => {
141 let $q = sqlx::query($sql);
142 let $q = $body;
143 $q.fetch_one(pool)
144 .await
145 .map_err(|e| $crate::error_map::map_err(&e))
146 }
147 $crate::SqlPool::Postgres(pool) => {
148 let $q = sqlx::query($sql);
149 let $q = $body;
150 $q.fetch_one(pool)
151 .await
152 .map_err(|e| $crate::error_map::map_err(&e))
153 }
154 }
155 }};
156}
157
158#[macro_export]
159macro_rules! sql_fetch_all {
160 ($backend:expr, $sql:expr, |$q:ident| $body:expr) => {{
161 match &$backend.pool {
162 $crate::SqlPool::Sqlite(pool) => {
163 let $q = sqlx::query($sql);
164 let $q = $body;
165 $q.fetch_all(pool)
166 .await
167 .map_err(|e| $crate::error_map::map_err(&e))
168 }
169 $crate::SqlPool::Postgres(pool) => {
170 let $q = sqlx::query($sql);
171 let $q = $body;
172 $q.fetch_all(pool)
173 .await
174 .map_err(|e| $crate::error_map::map_err(&e))
175 }
176 }
177 }};
178}