use spg_engine::{Engine, QueryResult};
fn survives(e: &mut Engine, cond: &str) -> bool {
let sql = format!("SELECT 1 WHERE {cond}");
let r = e
.execute(&sql)
.unwrap_or_else(|err| panic!("{sql}: {err:?}"));
let QueryResult::Rows { rows, .. } = r else {
panic!("expected Rows");
};
!rows.is_empty()
}
#[test]
fn date_periods() {
let mut e = Engine::new();
assert!(survives(
&mut e,
"(DATE '2024-01-01', DATE '2024-06-01') OVERLAPS (DATE '2024-03-01', DATE '2024-09-01')"
));
assert!(!survives(
&mut e,
"(DATE '2024-01-01', DATE '2024-02-01') OVERLAPS (DATE '2024-03-01', DATE '2024-04-01')"
));
assert!(!survives(
&mut e,
"(DATE '2024-01-01', DATE '2024-03-01') OVERLAPS (DATE '2024-03-01', DATE '2024-05-01')"
));
}
#[test]
fn endpoint_order_and_row_keyword() {
let mut e = Engine::new();
assert!(survives(
&mut e,
"(DATE '2024-06-01', DATE '2024-01-01') OVERLAPS (DATE '2024-03-01', DATE '2024-09-01')"
));
assert!(survives(
&mut e,
"ROW(DATE '2024-01-01', DATE '2024-06-01') OVERLAPS ROW(DATE '2024-03-01', DATE '2024-09-01')"
));
assert!(survives(&mut e, "(1, 5) OVERLAPS (4, 9)"));
assert!(!survives(&mut e, "(1, 4) OVERLAPS (4, 9)"));
assert!(
e.execute("SELECT 1 WHERE (1, 2, 3) OVERLAPS (4, 5)")
.is_err()
);
}