feat: add placeholder implementation of comparison enum to allow different comparison operators
This commit is contained in:
@@ -4,7 +4,7 @@ use rusqlite::*;
|
|||||||
pub fn run(filter: &Filter) -> Result<Vec<Box<dyn ToSql>>, FailedTo> {
|
pub fn run(filter: &Filter) -> Result<Vec<Box<dyn ToSql>>, FailedTo> {
|
||||||
let mut params: Vec<Box<dyn ToSql>> = Vec::new();
|
let mut params: Vec<Box<dyn ToSql>> = Vec::new();
|
||||||
for condition in filter.conditions() {
|
for condition in filter.conditions() {
|
||||||
match condition.1 {
|
match condition.2 {
|
||||||
Condition::Bool(value) => params.push(Box::new(value)),
|
Condition::Bool(value) => params.push(Box::new(value)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ const BASE_SELECT: &str = r#"SELECT * FROM entity WHERE 1=1"#;
|
|||||||
|
|
||||||
pub fn run(filter: &Filter) -> Result<String, FailedTo> {
|
pub fn run(filter: &Filter) -> Result<String, FailedTo> {
|
||||||
let mut statement = String::from(BASE_SELECT);
|
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 {
|
let fragment = match *condition {
|
||||||
Condition::Bool(_) => format!(
|
Condition::Bool(_) => format!(
|
||||||
" AND id IN (SELECT entity_id FROM attribute WHERE id = '{}' AND value_bool = ?{})",
|
" AND id IN (SELECT entity_id FROM attribute WHERE id = '{}' AND value_bool = ?{})",
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ mod tst;
|
|||||||
|
|
||||||
pub(crate) use crate::str::attribute::O as Attribute;
|
pub(crate) use crate::str::attribute::O as Attribute;
|
||||||
pub use crate::str::catalog::O as Catalog;
|
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::condition::E as Condition;
|
||||||
pub use crate::str::entity::O as Entity;
|
pub use crate::str::entity::O as Entity;
|
||||||
pub use crate::str::entity_state::EntityState;
|
pub use crate::str::entity_state::EntityState;
|
||||||
|
|||||||
4
01.workspace/heave/src/str/comparison.rs
Normal file
4
01.workspace/heave/src/str/comparison.rs
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)]
|
||||||
|
pub enum E {
|
||||||
|
Equal,
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ use crate::*;
|
|||||||
|
|
||||||
#[derive(Debug, Default, PartialEq, Clone)]
|
#[derive(Debug, Default, PartialEq, Clone)]
|
||||||
pub struct O {
|
pub struct O {
|
||||||
conditions: Vec<(String, Condition)>,
|
conditions: Vec<(String, Comparison, Condition)>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Filter {
|
impl Filter {
|
||||||
@@ -12,11 +12,14 @@ impl Filter {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
pub fn with_bool(mut self, attribute_name: &str, value: bool) -> Self {
|
pub fn with_bool(mut self, attribute_name: &str, value: bool) -> Self {
|
||||||
self.conditions
|
self.conditions.push((
|
||||||
.push((attribute_name.to_string(), Condition::Bool(value)));
|
attribute_name.to_string(),
|
||||||
|
Comparison::Equal,
|
||||||
|
Condition::Bool(value),
|
||||||
|
));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
pub(crate) fn conditions(&self) -> impl Iterator<Item = &(String, Condition)> {
|
pub(crate) fn conditions(&self) -> impl Iterator<Item = &(String, Comparison, Condition)> {
|
||||||
self.conditions.iter()
|
self.conditions.iter()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
pub mod attribute;
|
pub mod attribute;
|
||||||
pub mod catalog;
|
pub mod catalog;
|
||||||
|
pub mod comparison;
|
||||||
pub mod condition;
|
pub mod condition;
|
||||||
pub mod entity;
|
pub mod entity;
|
||||||
pub mod entity_state;
|
pub mod entity_state;
|
||||||
|
|||||||
Reference in New Issue
Block a user