sea_query_derive/
sqlx.rs

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}