diff --git a/01.workspace/heave/src/fun/sqlite_build_params.rs b/01.workspace/heave/src/fun/sqlite_build_params.rs index fa9e83c..bd01669 100644 --- a/01.workspace/heave/src/fun/sqlite_build_params.rs +++ b/01.workspace/heave/src/fun/sqlite_build_params.rs @@ -4,7 +4,7 @@ use rusqlite::*; pub fn run(filter: &Filter) -> Result>, FailedTo> { let mut params: Vec> = Vec::new(); for condition in filter.conditions() { - match condition.1 { + match condition.2 { Condition::Bool(value) => params.push(Box::new(value)), } } diff --git a/01.workspace/heave/src/fun/sqlite_build_statement.rs b/01.workspace/heave/src/fun/sqlite_build_statement.rs index 6583f9a..105bd93 100644 --- a/01.workspace/heave/src/fun/sqlite_build_statement.rs +++ b/01.workspace/heave/src/fun/sqlite_build_statement.rs @@ -4,7 +4,7 @@ const BASE_SELECT: &str = r#"SELECT * FROM entity WHERE 1=1"#; pub fn run(filter: &Filter) -> Result { let mut statement = String::from(BASE_SELECT); - for (i, (name, condition)) in filter.conditions().enumerate() { + for (i, (name, _comparison, condition)) in filter.conditions().enumerate() { let fragment = match *condition { Condition::Bool(_) => format!( " AND id IN (SELECT entity_id FROM attribute WHERE id = '{}' AND value_bool = ?{})", diff --git a/01.workspace/heave/src/lib.rs b/01.workspace/heave/src/lib.rs index e07cdb7..70e9621 100644 --- a/01.workspace/heave/src/lib.rs +++ b/01.workspace/heave/src/lib.rs @@ -9,6 +9,7 @@ mod tst; pub(crate) use crate::str::attribute::O as Attribute; pub use crate::str::catalog::O as Catalog; +pub use crate::str::comparison::E as Comparison; pub use crate::str::condition::E as Condition; pub use crate::str::entity::O as Entity; pub use crate::str::entity_state::EntityState; diff --git a/01.workspace/heave/src/str/comparison.rs b/01.workspace/heave/src/str/comparison.rs new file mode 100644 index 0000000..8766ab7 --- /dev/null +++ b/01.workspace/heave/src/str/comparison.rs @@ -0,0 +1,4 @@ +#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)] +pub enum E { + Equal, +} diff --git a/01.workspace/heave/src/str/filter.rs b/01.workspace/heave/src/str/filter.rs index 0d7546d..df53525 100644 --- a/01.workspace/heave/src/str/filter.rs +++ b/01.workspace/heave/src/str/filter.rs @@ -2,7 +2,7 @@ use crate::*; #[derive(Debug, Default, PartialEq, Clone)] pub struct O { - conditions: Vec<(String, Condition)>, + conditions: Vec<(String, Comparison, Condition)>, } impl Filter { @@ -12,11 +12,14 @@ impl Filter { } } pub fn with_bool(mut self, attribute_name: &str, value: bool) -> Self { - self.conditions - .push((attribute_name.to_string(), Condition::Bool(value))); + self.conditions.push(( + attribute_name.to_string(), + Comparison::Equal, + Condition::Bool(value), + )); self } - pub(crate) fn conditions(&self) -> impl Iterator { + pub(crate) fn conditions(&self) -> impl Iterator { self.conditions.iter() } } diff --git a/01.workspace/heave/src/str/mod.rs b/01.workspace/heave/src/str/mod.rs index df2a220..c50b2e4 100644 --- a/01.workspace/heave/src/str/mod.rs +++ b/01.workspace/heave/src/str/mod.rs @@ -1,5 +1,6 @@ pub mod attribute; pub mod catalog; +pub mod comparison; pub mod condition; pub mod entity; pub mod entity_state;