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

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

View File

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

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

View File

@@ -1,5 +1,6 @@
pub mod attribute;
pub mod catalog;
pub mod comparison;
pub mod condition;
pub mod entity;
pub mod entity_state;