#[doc(hidden)]
#[rustfmt::skip]
pub mod map;
#[cfg(any(feature = "mysql", feature = "mariadb"))]
mod mysql;
#[cfg(feature = "postgres")]
mod postgres;
#[macro_export]
macro_rules! conditional_query_as {
( $($t:tt)* ) => {
$crate::__conditional_query_as_impl!($($t)*)
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __build_query {
(
@out_branch
$out:path,
$variant:ident;
$appf:pat = $apef:expr $(, $appo:pat = $apeo:expr)*;
$($aq:literal),*;
$($ae:expr),*;
) => {
if let $appf = $apef {
$crate::__build_query! {
@out_branch
$out,
$variant;
$($appo = $apeo),*;
$($aq),*;
$($ae),*;
}
}
};
(
@out_branch
$out:path,
$variant:ident;
;
$($aq:literal),*;
$($ae:expr),*;
) => {
break $variant($crate::__sqlx_query_as!(
$out,
$($aq),*;
$($ae),*
));
};
( @out $out:path, $($v:ident),*; ; ) => {};
(
@out
$out:path,
$vf:ident $(, $vo:ident)*;
(
$($appf:pat = $apef:expr),*;
$($aqf:literal),*;
$($aef:expr),*;
)
$(, (
$($appo:pat = $apeo:expr),*;
$($aqo:literal),*;
$($aeo:expr),*;
))*;
) => {{
$crate::__build_query!(
@out_branch
$out,
$vf;
$($appf = $apef),*;
$($aqf),*;
$($aef),*;
);
$crate::__build_query!(
@out
$out,
$($vo),*;
$((
$($appo = $apeo),*;
$($aqo),*;
$($aeo),*;
)),*;
);
}};
(
$((
$($bp:literal),*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
) => {{
#[allow(unreachable_code)]
#[allow(clippy::toplevel_ref_arg)]
loop {
$crate::__import_conditional_map!($(($($app=$ape),*;$($aq),*;$($ae),*;)),*);
$crate::__build_query!(
@out
$out,
_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16;
$((
$($app = $ape),*;
$($aq),*;
$($ae),*;
)),*;
);
unreachable!();
}
}};
(
$((
$($bp:literal),*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
$q:literal $($t:tt)*
) => {
$crate::__build_query! {
$((
$($bp),*;
$($app = $ape),*;
$($aq,)* $q;
$($ae),*;
)),*;
$out,
$($t)*
}
};
(
$((
$bpf:literal $(, $bpo:literal)*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
?($e:expr) $($t:tt)*
) => {
$crate::__build_query! {
$((
$($bpo),*;
$($app = $ape),*;
$($aq,)* $bpf;
$($ae,)* $e;
)),*;
$out,
$($t)*
}
};
(
$((
$($bp:literal),*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
$bpp:pat = $bpe:expr => {
$($bt:tt)*
}
$($t:tt)*
) => {
$crate::__push_fragments!(
$((
$($bp),*;
$($app = $ape,)* $bpp = $bpe;
$($aq),*;
$($ae),*;
)),*;
$out,
{ $($bt)* };
[$(, (
$($bp),*;
$($app = $ape),*;
$($aq),*;
$($ae),*;
))*];
$($t)*
)
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __push_fragments {
(
$(($ ($t:tt)* )),*;
$out:path,
{};
[$($y:tt)*];
$($x:tt)*
) => {
$crate::__build_query! {
$(( $($t)* )),* $($y)*;
$out,
$($x)*
}
};
(
$((
$($bp:literal),*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
{ $qf:literal $($bo:tt)* }; [$($y:tt)*];
$($x:tt)*
) => {
$crate::__push_fragments!{
$((
$($bp),*;
$($app = $ape),*;
$($aq,)* $qf;
$($ae),*;
)),*;
$out,
{ $($bo)* };
[$($y)*];
$($x)*
}
};
(
$((
$bpf:literal $(, $bpo:literal)*;
$($app:pat = $ape:expr),*;
$($aq:literal),*;
$($ae:expr),*;
)),*;
$out:path,
{ ?($qf:expr) $($bo:tt)* }; [$($y:tt)*];
$($x:tt)*
) => {
$crate::__push_fragments! {
$((
$($bpo),*;
$($app = $ape),*;
$($aq,)* $bpf;
$($ae,)* $qf;
)),*;
$out,
{ $($bo)* };
[$($y)*];
$($x)*
}
};
}
#[doc(hidden)]
#[macro_export]
macro_rules! __sqlx_query_as {
(
$out:path,
$f:literal $(, $o:literal)*;
$($e:expr),*
) => {
sqlx::query_as!($out, $f $(+ " " + $o)*, $($e),*)
};
}