From 8675bd785f4c5f1656c88b8ecee1bd51f75a2ff6 Mon Sep 17 00:00:00 2001 From: Kyran Gostelow Date: Wed, 8 Jun 2022 19:09:16 +1000 Subject: [PATCH] Init --- src/executor/query/select/mod.rs | 4 +-- src/glue/insert.rs | 4 --- src/glue/select.rs | 18 ++++++++++++- tests/api/mod.rs | 1 + tests/api/select.rs | 46 ++++++++++++++++++++++++++++++++ 5 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 tests/api/select.rs diff --git a/src/executor/query/select/mod.rs b/src/executor/query/select/mod.rs index 2c18860..fdc43f4 100644 --- a/src/executor/query/select/mod.rs +++ b/src/executor/query/select/mod.rs @@ -40,7 +40,7 @@ pub enum SelectError { } impl Glue { - pub async fn select(&self, plan: Plan) -> Result { + pub async fn select_plan(&self, plan: Plan) -> Result { let Plan { joins, select_items, @@ -141,7 +141,7 @@ impl Glue { order_by: Vec, ) -> Result { let plan = Plan::new(self, query, order_by).await?; - self.select(plan).await + self.select_plan(plan).await } } diff --git a/src/glue/insert.rs b/src/glue/insert.rs index e2f45f2..09e6622 100644 --- a/src/glue/insert.rs +++ b/src/glue/insert.rs @@ -7,10 +7,6 @@ use { futures::executor::block_on, }; -pub trait ParameterValue { - fn into_recipe(self) -> Recipe; -} - #[macro_export] macro_rules! INSERT { {$glue:expr, INTO $database:ident.$table:ident ($($column:ident),+) VALUES $(($($value:expr),+)),+} => { diff --git a/src/glue/select.rs b/src/glue/select.rs index 4c84b9d..39dec35 100644 --- a/src/glue/select.rs +++ b/src/glue/select.rs @@ -1,11 +1,27 @@ use { super::Glue, - crate::{Cast, ExecuteError, Payload, Result}, + crate::{recipe::Recipe, Cast, ExecuteError, Payload, Result}, serde_json::value::Value as JSONValue, }; +#[macro_export] +macro_rules! SELECT { + {$glue:expr, $($column:ident),+ FROM $database:ident.$table:ident} => { + $glue.select(Some(stringify!($database)), stringify!($table), &[$(stringify!($column)),+], None) + }; +} + /// ## Select (`SELECT`) impl Glue { + pub fn select( + &mut self, + _database: Option<&str>, + _table: &str, + _columns: &[&str], + _filter: Option, + ) -> Result { + unimplemented!() + } /// Only for `SELECT` queries. /// /// Output is one big [serde_json::Value], wrapped in a [Result]. diff --git a/tests/api/mod.rs b/tests/api/mod.rs index 84beb1f..dafbcee 100644 --- a/tests/api/mod.rs +++ b/tests/api/mod.rs @@ -1,3 +1,4 @@ mod cast_any; mod csv; mod insert; +mod select; diff --git a/tests/api/select.rs b/tests/api/select.rs new file mode 100644 index 0000000..dafdf66 --- /dev/null +++ b/tests/api/select.rs @@ -0,0 +1,46 @@ +use {crate::util::*, multisql::*}; +testcase!(test); +fn test(mut glue: Glue) { + make_basic_table!(glue); + + assert_eq!( + SELECT! {glue, a FROM main.basic}, + Ok(Payload::Select { + labels: vec!["a".into()], + rows: vec![Row(vec![Value::I64(1)])] + }) + ); + + /* + assert_eq!( + SELECT! {glue, a FROM basic}, + Ok(Payload::Select { + labels: vec!["a".into()], + rows: vec![Row(vec![Value::I64(1)])] + }) + ); + + assert_eq!( + SELECT! {glue, * FROM basic}, + Ok(Payload::Select { + labels: vec!["a".into()], + rows: vec![Row(vec![Value::I64(1)])] + }) + ); + + assert_eq!( + SELECT! {glue, a FROM basic WHERE a = 1}, + Ok(Payload::Select { + labels: vec!["a".into()], + rows: vec![Row(vec![Value::I64(1)])] + }) + ); + + assert_eq!( + SELECT! {glue, a FROM basic WHERE a = 2}, + Ok(Payload::Select { + labels: vec!["a".into()], + rows: vec![] + }) + );*/ +}