mirror of
https://github.com/launchbadge/sqlx.git
synced 2025-12-29 21:00:54 +00:00
sqlx-macros: simplify query_macros module name, delete unused file
This commit is contained in:
parent
41dd286356
commit
03773d0065
@ -14,11 +14,9 @@ type Result<T> = std::result::Result<T, Error>;
|
||||
|
||||
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::<syn::Error>() {
|
||||
|
||||
@ -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`.
|
||||
@ -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;
|
||||
@ -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 {
|
||||
@ -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<C: Connection>(
|
||||
input: QueryMacroInput,
|
||||
mut conn: C,
|
||||
checked: bool,
|
||||
) -> crate::Result<TokenStream>
|
||||
where
|
||||
C::Database: DatabaseExt + Sized,
|
||||
<C::Database as Database>::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 = <C::Database as DatabaseExt>::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::<TokenStream>();
|
||||
|
||||
let query_args = format_ident!("query_args");
|
||||
let output = output::quote_query_as::<C::Database>(
|
||||
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
|
||||
}
|
||||
}}
|
||||
})
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user