1use proc_macro2::TokenStream;
2use quote::quote;
3use syn::{
4 Ident, LitStr, Token,
5 parse::{Parse, ParseStream},
6};
7
8struct CallArgs {
9 sql_holder: Ident,
10 _assign: Token![=],
11 sql_string: LitStr,
12}
13
14impl Parse for CallArgs {
15 fn parse(input: ParseStream) -> syn::Result<Self> {
16 Ok(CallArgs {
17 sql_holder: input.parse()?,
18 _assign: input.parse()?,
19 sql_string: input.parse()?,
20 })
21 }
22}
23
24pub fn sqlite_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
25 let CallArgs {
26 sql_holder,
27 sql_string,
28 ..
29 } = syn::parse(input)?;
30
31 Ok(quote!(
32 sea_query::raw_sql!(sqlx::sqlite::query, #sql_holder = #sql_string)
33 ))
34}
35
36pub fn sqlite_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
37 let CallArgs {
38 sql_holder,
39 sql_string,
40 ..
41 } = syn::parse(input)?;
42
43 Ok(quote!(
44 sea_query::raw_sql!(sqlx::sqlite::query_as, #sql_holder = #sql_string)
45 ))
46}
47
48pub fn mysql_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
49 let CallArgs {
50 sql_holder,
51 sql_string,
52 ..
53 } = syn::parse(input)?;
54
55 Ok(quote!(
56 sea_query::raw_sql!(sqlx::mysql::query, #sql_holder = #sql_string)
57 ))
58}
59
60pub fn mysql_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
61 let CallArgs {
62 sql_holder,
63 sql_string,
64 ..
65 } = syn::parse(input)?;
66
67 Ok(quote!(
68 sea_query::raw_sql!(sqlx::mysql::query_as, #sql_holder = #sql_string)
69 ))
70}
71
72pub fn postgres_query(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
73 let CallArgs {
74 sql_holder,
75 sql_string,
76 ..
77 } = syn::parse(input)?;
78
79 Ok(quote!(
80 sea_query::raw_sql!(sqlx::postgres::query, #sql_holder = #sql_string)
81 ))
82}
83
84pub fn postgres_query_as(input: proc_macro::TokenStream) -> syn::Result<TokenStream> {
85 let CallArgs {
86 sql_holder,
87 sql_string,
88 ..
89 } = syn::parse(input)?;
90
91 Ok(quote!(
92 sea_query::raw_sql!(sqlx::postgres::query_as, #sql_holder = #sql_string)
93 ))
94}