sqlx_query_as_builder/
lib.rs

1//! Builder pattern macros for SQLx `query_as!` - populate builders instead of constructing structs directly.
2//!
3//! The builder expression must have setter methods matching the SQL column names.
4
5/// Like `query_as!` but populates a builder instead of constructing a struct directly.
6///
7/// # Example
8/// ```ignore
9/// let user = query_as_builder!(User::builder(), "SELECT id, name FROM users WHERE id = ?", user_id)
10///     .fetch_one(&pool)
11///     .await?
12///     .role("admin")
13///     .build();
14/// ```
15#[macro_export]
16macro_rules! query_as_builder {
17    ($builder_expr:expr, $query:expr) => {{
18        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
19            $builder_expr,
20            source = $query
21        )
22    }};
23    ($builder_expr:expr, $query:expr, $($args:tt)*) => {{
24        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
25            $builder_expr,
26            source = $query,
27            args = [$($args)*]
28        )
29    }};
30}
31
32/// Unchecked version of `query_as_builder!` - does not verify query at compile time.
33#[macro_export]
34macro_rules! query_as_builder_unchecked {
35    ($builder_expr:expr, $query:expr) => {{
36        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
37            $builder_expr,
38            source = $query,
39            checked = false
40        )
41    }};
42    ($builder_expr:expr, $query:expr, $($args:tt)*) => {{
43        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
44            $builder_expr,
45            source = $query,
46            args = [$($args)*],
47            checked = false
48        )
49    }};
50}
51
52/// Like `query_file_as!` but populates a builder instead of constructing a struct directly.
53#[macro_export]
54macro_rules! query_file_as_builder {
55    ($builder_expr:expr, $path:literal) => {{
56        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
57            $builder_expr,
58            source_file = $path
59        )
60    }};
61    ($builder_expr:expr, $path:literal, $($args:tt)*) => {{
62        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
63            $builder_expr,
64            source_file = $path,
65            args = [$($args)*]
66        )
67    }};
68}
69
70/// Unchecked version of `query_file_as_builder!` - does not verify query at compile time.
71#[macro_export]
72macro_rules! query_file_as_builder_unchecked {
73    ($builder_expr:expr, $path:literal) => {{
74        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
75            $builder_expr,
76            source_file = $path,
77            checked = false
78        )
79    }};
80    ($builder_expr:expr, $path:literal, $($args:tt)*) => {{
81        $crate::sqlx_query_as_builder_macros::expand_query_as_builder!(
82            $builder_expr,
83            source_file = $path,
84            args = [$($args)*],
85            checked = false
86        )
87    }};
88}
89
90#[doc(hidden)]
91pub use sqlx_query_as_builder_macros;