fix and/or expressions generating incorrect sql

feat/vaults
Tomáš Mládek 2022-03-30 12:20:19 +02:00
parent 8c60a617a2
commit 1a05157a9d
No known key found for this signature in database
GPG Key ID: 65E225C8B3E2ED8A
2 changed files with 17 additions and 16 deletions

View File

@ -1,6 +1,7 @@
use crate::addressing::Address;
use crate::database::entry::EntryValue;
use crate::database::inner::schema::data;
use diesel::expression::grouped::Grouped;
use diesel::expression::operators::{And, Not, Or};
use diesel::sql_types::Bool;
use diesel::sqlite::Sqlite;
@ -433,15 +434,15 @@ impl Query {
while !subqueries.is_empty() {
result = Box::new(And::new(result, subqueries.remove(0)));
}
Ok(Box::new(result))
Ok(Box::new(Grouped(result)))
}
QueryQualifier::Or => {
let mut result: Box<Or<Box<Predicate>, Box<Predicate>>> =
let mut result =
Box::new(Or::new(subqueries.remove(0), subqueries.remove(0)));
while !subqueries.is_empty() {
result = Box::new(Or::new(result, subqueries.remove(0)));
}
Ok(Box::new(result))
Ok(Box::new(Grouped(result)))
}
QueryQualifier::Not => {
Err(QueryParseError("NOT only takes one subquery.".into()))

View File

@ -503,18 +503,18 @@ mod test {
let result = connection.query(query).unwrap();
assert_eq!(result.len(), 1);
// let query = format!(
// r#"(and
// (or
// (matches ? ? (contains "OOBA"))
// (matches ? (contains "HARGE") ?)
// )
// (not (matches ? "{LABEL_ATTR}" ?))
// )"#
// )
// .parse()
// .unwrap();
// let result = connection.query(query).unwrap();
// assert_eq!(result.len(), 1);
let query = format!(
r#"(and
(or
(matches ? ? (contains "OOBA"))
(matches ? (contains "HARGE") ?)
)
(not (matches ? "{LABEL_ATTR}" ?))
)"#
)
.parse()
.unwrap();
let result = connection.query(query).unwrap();
assert_eq!(result.len(), 1);
}
}