diff --git a/sqlx-macros/src/lib.rs b/sqlx-macros/src/lib.rs index 3b1dd716..a303e565 100644 --- a/sqlx-macros/src/lib.rs +++ b/sqlx-macros/src/lib.rs @@ -14,11 +14,9 @@ type Result = std::result::Result; mod database; mod derives; -mod query_macros; +mod query; mod runtime; -use query_macros::*; - fn macro_result(tokens: proc_macro2::TokenStream) -> TokenStream { quote!( macro_rules! macro_result { @@ -30,9 +28,9 @@ fn macro_result(tokens: proc_macro2::TokenStream) -> TokenStream { #[proc_macro] pub fn expand_query(input: TokenStream) -> TokenStream { - let input = syn::parse_macro_input!(input as QueryMacroInput); + let input = syn::parse_macro_input!(input as query::QueryMacroInput); - match query_macros::expand_input(input) { + match query::expand_input(input) { Ok(ts) => ts.into(), Err(e) => { if let Some(parse_err) = e.downcast_ref::() { diff --git a/sqlx-macros/src/query_macros/args.rs b/sqlx-macros/src/query/args.rs similarity index 98% rename from sqlx-macros/src/query_macros/args.rs rename to sqlx-macros/src/query/args.rs index f42954f3..37f80801 100644 --- a/sqlx-macros/src/query_macros/args.rs +++ b/sqlx-macros/src/query/args.rs @@ -6,7 +6,7 @@ use quote::{quote, quote_spanned, ToTokens}; use sqlx_core::describe::Describe; use crate::database::{DatabaseExt, ParamChecking}; -use crate::query_macros::QueryMacroInput; +use crate::query::QueryMacroInput; /// Returns a tokenstream which typechecks the arguments passed to the macro /// and binds them to `DB::Arguments` with the ident `query_args`. diff --git a/sqlx-macros/src/query_macros/data.rs b/sqlx-macros/src/query/data.rs similarity index 100% rename from sqlx-macros/src/query_macros/data.rs rename to sqlx-macros/src/query/data.rs diff --git a/sqlx-macros/src/query_macros/input.rs b/sqlx-macros/src/query/input.rs similarity index 100% rename from sqlx-macros/src/query_macros/input.rs rename to sqlx-macros/src/query/input.rs diff --git a/sqlx-macros/src/query_macros/mod.rs b/sqlx-macros/src/query/mod.rs similarity index 98% rename from sqlx-macros/src/query_macros/mod.rs rename to sqlx-macros/src/query/mod.rs index 425a84c3..76baeb6d 100644 --- a/sqlx-macros/src/query_macros/mod.rs +++ b/sqlx-macros/src/query/mod.rs @@ -12,8 +12,8 @@ use sqlx_core::database::Database; use sqlx_core::describe::Describe; use crate::database::DatabaseExt; -use crate::query_macros::data::QueryData; -use crate::query_macros::input::RecordType; +use crate::query::data::QueryData; +use crate::query::input::RecordType; use crate::runtime::block_on; // pub use query::expand_query; diff --git a/sqlx-macros/src/query_macros/output.rs b/sqlx-macros/src/query/output.rs similarity index 99% rename from sqlx-macros/src/query_macros/output.rs rename to sqlx-macros/src/query/output.rs index ad19161c..9631a731 100644 --- a/sqlx-macros/src/query_macros/output.rs +++ b/sqlx-macros/src/query/output.rs @@ -6,7 +6,7 @@ use sqlx_core::describe::Describe; use crate::database::DatabaseExt; -use crate::query_macros::QueryMacroInput; +use crate::query::QueryMacroInput; use std::fmt::{self, Display, Formatter}; pub struct RustColumn { diff --git a/sqlx-macros/src/query_macros/query.rs b/sqlx-macros/src/query_macros/query.rs deleted file mode 100644 index 094425ea..00000000 --- a/sqlx-macros/src/query_macros/query.rs +++ /dev/null @@ -1,85 +0,0 @@ -use std::fmt::Display; - -use proc_macro2::Span; -use proc_macro2::TokenStream; -use syn::{Ident, Path}; - -use quote::{format_ident, quote}; -use sqlx_core::{connection::Connection, database::Database}; - -use super::{args, output, QueryMacroInput}; -use crate::database::DatabaseExt; - -/// Given an input like `query!("SELECT * FROM accounts WHERE account_id > ?", account_id)`, -/// expand to an anonymous record -pub async fn expand_query( - input: QueryMacroInput, - mut conn: C, - checked: bool, -) -> crate::Result -where - C::Database: DatabaseExt + Sized, - ::TypeInfo: Display, -{ - let describe = input.describe_validate(&mut conn).await?; - let sql = &input.src; - - let args = args::quote_args(&input, &describe, checked)?; - - let arg_names = &input.arg_names; - let db_path = ::db_path(); - - if describe.result_columns.is_empty() { - return Ok(quote! { - macro_rules! macro_result { - (#($#arg_names:expr),*) => {{ - use sqlx_core::arguments::Arguments as _; - - #args - - sqlx::query::<#db_path>(#sql).bind_all(query_args) - } - }} - }); - } - - let columns = output::columns_to_rust(&describe)?; - - let record_type: Path = Ident::new("Record", Span::call_site()).into(); - - let record_fields = columns - .iter() - .map( - |&output::RustColumn { - ref ident, - ref type_, - }| quote!(#ident: #type_,), - ) - .collect::(); - - let query_args = format_ident!("query_args"); - let output = output::quote_query_as::( - sql, - &record_type, - &query_args, - if checked { &columns } else { &[] }, - checked, - ); - - Ok(quote! { - macro_rules! macro_result { - (#($#arg_names:expr),*) => {{ - use sqlx_core::arguments::Arguments as _; - - #[derive(Debug)] - struct #record_type { - #record_fields - } - - #args - - #output - } - }} - }) -}