don't typecheck parameters on MySQL

This commit is contained in:
Austin Bonander 2019-12-19 19:24:58 -08:00 committed by Ryan Leckey
parent b85618e5f8
commit 5c7661985e
4 changed files with 16 additions and 5 deletions

View File

@ -1,8 +1,16 @@
use sqlx::Backend; use sqlx::Backend;
#[derive(PartialEq, Eq)]
pub enum ParamChecking {
Strong,
Weak
}
pub trait BackendExt: Backend { pub trait BackendExt: Backend {
const BACKEND_PATH: &'static str; const BACKEND_PATH: &'static str;
const PARAM_CHECKING: ParamChecking;
fn quotable_path() -> syn::Path { fn quotable_path() -> syn::Path {
syn::parse_str(Self::BACKEND_PATH).unwrap() syn::parse_str(Self::BACKEND_PATH).unwrap()
} }
@ -13,9 +21,10 @@ pub trait BackendExt: Backend {
} }
macro_rules! impl_backend_ext { macro_rules! impl_backend_ext {
($backend:path { $($(#[$meta:meta])? $ty:ty $(| $input:ty)?),*$(,)? }) => { ($backend:path { $($(#[$meta:meta])? $ty:ty $(| $input:ty)?),*$(,)? }, ParamChecking::$param_checking:ident) => {
impl $crate::backend::BackendExt for $backend { impl $crate::backend::BackendExt for $backend {
const BACKEND_PATH: &'static str = stringify!($backend); const BACKEND_PATH: &'static str = stringify!($backend);
const PARAM_CHECKING: $crate::backend::ParamChecking = $crate::backend::ParamChecking::$param_checking;
fn param_type_for_id(id: &Self::TypeId) -> Option<&'static str> { fn param_type_for_id(id: &Self::TypeId) -> Option<&'static str> {
use sqlx::types::TypeMetadata; use sqlx::types::TypeMetadata;

View File

@ -7,5 +7,6 @@ impl_backend_ext! {
i64, i64,
f32, f32,
f64 f64
} },
ParamChecking::Weak
} }

View File

@ -19,5 +19,6 @@ impl_backend_ext! {
sqlx::types::chrono::NaiveDateTime, sqlx::types::chrono::NaiveDateTime,
#[cfg(feature = "chrono")] #[cfg(feature = "chrono")]
sqlx::types::chrono::DateTime<sqlx::types::chrono::Utc> | sqlx::types::chrono::DateTime<_>, sqlx::types::chrono::DateTime<sqlx::types::chrono::Utc> | sqlx::types::chrono::DateTime<_>,
} },
ParamChecking::Strong
} }

View File

@ -12,7 +12,7 @@ use syn::{
use quote::{format_ident, quote, quote_spanned, ToTokens}; use quote::{format_ident, quote, quote_spanned, ToTokens};
use sqlx::{Connection, HasTypeMetadata}; use sqlx::{Connection, HasTypeMetadata};
use crate::backend::BackendExt; use crate::backend::{BackendExt, ParamChecking};
pub struct MacroInput { pub struct MacroInput {
sql: String, sql: String,
@ -107,7 +107,7 @@ pub async fn process_sql<C: Connection>(
(record_type.to_token_stream(), generate_record_def(&describe, &record_type)?) (record_type.to_token_stream(), generate_record_def(&describe, &record_type)?)
}; };
let params = if input.args.is_empty() { let params = if <C::Backend as BackendExt>::PARAM_CHECKING == ParamChecking::Weak || input.args.is_empty() {
quote! { quote! {
let params = (); let params = ();
} }