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> {
|
||||
let mut params: Vec<Box<dyn ToSql>> = Vec::new();
|
||||
for condition in filter.conditions() {
|
||||
match condition.1 {
|
||||
match condition.2 {
|
||||
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> {
|
||||
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 = ?{})",
|
||||
|
||||
@@ -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;
|
||||
|
||||
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)]
|
||||
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<Item = &(String, Condition)> {
|
||||
pub(crate) fn conditions(&self) -> impl Iterator<Item = &(String, Comparison, Condition)> {
|
||||
self.conditions.iter()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
pub mod attribute;
|
||||
pub mod catalog;
|
||||
pub mod comparison;
|
||||
pub mod condition;
|
||||
pub mod entity;
|
||||
pub mod entity_state;
|
||||
|
||||
Reference in New Issue
Block a user