use spg_engine::{Engine, QueryResult};
fn err_msg(e: &mut Engine, sql: &str) -> String {
e.execute(sql).unwrap_err().to_string()
}
#[test]
fn int_min_div_and_abs_overflow_not_divzero() {
let mut e = Engine::new();
e.execute("CREATE TABLE b(x bigint)").unwrap();
e.execute("INSERT INTO b VALUES (-9223372036854775807 - 1)")
.unwrap();
let d = err_msg(&mut e, "SELECT x / (-1)::bigint FROM b");
assert!(!d.contains("division by zero"), "got: {d}");
assert!(
d.contains("out of range") || d.contains("overflow"),
"got: {d}"
);
assert!(err_msg(&mut e, "SELECT abs(x) FROM b").contains("out of range"));
assert!(err_msg(&mut e, "SELECT 5 / 0").contains("division by zero"));
assert!(matches!(
e.execute("SELECT 10 / 3"),
Ok(QueryResult::Rows { .. })
));
assert!(matches!(
e.execute("SELECT abs(-5)"),
Ok(QueryResult::Rows { .. })
));
}