feat: add placeholder implementation of comparison enum to allow different comparison operators

This commit is contained in:
2025-10-18 10:56:08 +02:00
parent 20a68aa018
commit 5abdc4e133
6 changed files with 15 additions and 6 deletions

View File

@@ -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)),
} }
} }

View File

@@ -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 = ?{})",

View File

@@ -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;

View File

@@ -0,0 +1,4 @@
#[derive(Debug, PartialEq, PartialOrd, Eq, Ord, Clone, Copy, Hash)]
pub enum E {
Equal,
}

View File

@@ -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()
} }
} }

View File

@@ -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;