sqlx-macros: simplify query_macros module name, delete unused file

This commit is contained in:
Austin Bonander 2020-05-15 20:39:17 -07:00 committed by Ryan Leckey
parent 41dd286356
commit 03773d0065
7 changed files with 7 additions and 94 deletions

View File

@ -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>() {

View File

@ -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`.

View File

@ -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;

View File

@ -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 {

View File

@ -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
}
}}
})
}