sqlx_conditional_queries_layering/
lib.rs1#[macro_export]
2macro_rules! create_conditional_query_as {
3 ($dollar:tt$name:tt, $($conditional_part:tt)*) => {
4 #[allow(unused_macros)]
5 macro_rules! $name {
6 ($type:ty, $query:expr $dollar(, $dollar($more_conditionals:tt)*)?) => {
7 sqlx_conditional_queries::conditional_query_as!(
8 $type,
9 $query,
10 $($conditional_part)*
11 $dollar(, $dollar($more_conditionals)*)?
12 )
13 };
14 }
15
16 paste::paste! {
17 #[allow(unused_macros)]
18 macro_rules! [<_DO_NOT_USE_EXPLICITLY_ $name>] {
19 ($inner_dollar:tt$feed_name:tt, $dollar($feed_conditionals:tt)*) => {
20 sqlx_conditional_queries_layering::create_conditional_query_as!(
21 $inner_dollar$feed_name,
22 $($conditional_part)*,
23 $dollar($feed_conditionals)*
24 );
25 };
26 }
27
28 #[allow(unused_macros)]
29 macro_rules! [<_$name _DO_NOT_USE_EXPLICITLY>] {
30 ($inner_dollar:tt$existing_query:ident, $feed_name:tt) => {
31 $existing_query!(
32 $inner_dollar$feed_name,
33 $($conditional_part)*
34 );
35 }
36 }
37 }
38 };
39}
40
41#[macro_export]
42macro_rules! supply_sql_variables_to_query_as {
43 ($dollar:tt$query_macro:ident as $as:ident, $($conditional_part:tt)*) => {
44 paste::paste! {
45 [<_DO_NOT_USE_EXPLICITLY_ $query_macro>]!($dollar$as, $($conditional_part)*)
46 }
47 };
48}
49
50#[macro_export]
51macro_rules! merge_sql_query_as {
52 ($dollar:tt($a:ident, $b:ident) as $as:ident) => {
53 paste::paste! {
54 [<_ $a _DO_NOT_USE_EXPLICITLY>]!(
55 $dollar[<_DO_NOT_USE_EXPLICITLY_ $b>],
56 $as
57 )
58 }
59 };
60
61 ($dollar:tt@$suffix:ident, $a:ident, $b:ident) => {
62 paste::paste! {
63 sqlx_conditional_queries_layering::merge_sql_query_as!(
64 $dollar([<$a $suffix>], [<$b $suffix>]) as [<$a _with_ $b $suffix>]
65 )
66 }
67 };
68
69 ($dollar:tt@$suffix:ident, $a:ident, $b:ident $(, $c:ident)*) => {
70 sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@$suffix, $a, $b);
71 paste::paste! {
72 sqlx_conditional_queries_layering::merge_sql_query_as!(
73 @$suffix,
74 [<$a _with_ $b>]
75 $(, $c)*
76 );
77 }
78 };
79
80 ($dollar:tt($a:ident, $b:ident)) => {
81 sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@_query, $a, $b)
82 };
83
84 ($dollar:tt($a:ident, $b:ident $(, $c:ident)*)) => {
85 sqlx_conditional_queries_layering::merge_sql_query_as!($dollar@_query, $a, $b $(, $c)*)
86 }
87}
88
89pub enum Fall {
90 Through,
91}