fix and/or expressions generating incorrect sql
parent
8c60a617a2
commit
1a05157a9d
|
@ -1,6 +1,7 @@
|
||||||
use crate::addressing::Address;
|
use crate::addressing::Address;
|
||||||
use crate::database::entry::EntryValue;
|
use crate::database::entry::EntryValue;
|
||||||
use crate::database::inner::schema::data;
|
use crate::database::inner::schema::data;
|
||||||
|
use diesel::expression::grouped::Grouped;
|
||||||
use diesel::expression::operators::{And, Not, Or};
|
use diesel::expression::operators::{And, Not, Or};
|
||||||
use diesel::sql_types::Bool;
|
use diesel::sql_types::Bool;
|
||||||
use diesel::sqlite::Sqlite;
|
use diesel::sqlite::Sqlite;
|
||||||
|
@ -433,15 +434,15 @@ impl Query {
|
||||||
while !subqueries.is_empty() {
|
while !subqueries.is_empty() {
|
||||||
result = Box::new(And::new(result, subqueries.remove(0)));
|
result = Box::new(And::new(result, subqueries.remove(0)));
|
||||||
}
|
}
|
||||||
Ok(Box::new(result))
|
Ok(Box::new(Grouped(result)))
|
||||||
}
|
}
|
||||||
QueryQualifier::Or => {
|
QueryQualifier::Or => {
|
||||||
let mut result: Box<Or<Box<Predicate>, Box<Predicate>>> =
|
let mut result =
|
||||||
Box::new(Or::new(subqueries.remove(0), subqueries.remove(0)));
|
Box::new(Or::new(subqueries.remove(0), subqueries.remove(0)));
|
||||||
while !subqueries.is_empty() {
|
while !subqueries.is_empty() {
|
||||||
result = Box::new(Or::new(result, subqueries.remove(0)));
|
result = Box::new(Or::new(result, subqueries.remove(0)));
|
||||||
}
|
}
|
||||||
Ok(Box::new(result))
|
Ok(Box::new(Grouped(result)))
|
||||||
}
|
}
|
||||||
QueryQualifier::Not => {
|
QueryQualifier::Not => {
|
||||||
Err(QueryParseError("NOT only takes one subquery.".into()))
|
Err(QueryParseError("NOT only takes one subquery.".into()))
|
||||||
|
|
|
@ -503,18 +503,18 @@ mod test {
|
||||||
let result = connection.query(query).unwrap();
|
let result = connection.query(query).unwrap();
|
||||||
assert_eq!(result.len(), 1);
|
assert_eq!(result.len(), 1);
|
||||||
|
|
||||||
// let query = format!(
|
let query = format!(
|
||||||
// r#"(and
|
r#"(and
|
||||||
// (or
|
(or
|
||||||
// (matches ? ? (contains "OOBA"))
|
(matches ? ? (contains "OOBA"))
|
||||||
// (matches ? (contains "HARGE") ?)
|
(matches ? (contains "HARGE") ?)
|
||||||
// )
|
)
|
||||||
// (not (matches ? "{LABEL_ATTR}" ?))
|
(not (matches ? "{LABEL_ATTR}" ?))
|
||||||
// )"#
|
)"#
|
||||||
// )
|
)
|
||||||
// .parse()
|
.parse()
|
||||||
// .unwrap();
|
.unwrap();
|
||||||
// let result = connection.query(query).unwrap();
|
let result = connection.query(query).unwrap();
|
||||||
// assert_eq!(result.len(), 1);
|
assert_eq!(result.len(), 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue