use spg_engine::{Engine, QueryResult};
use spg_storage::Value;
fn row(e: &mut Engine, sql: &str) -> Vec<Value<'static>> {
match e.execute(sql).unwrap() {
QueryResult::Rows { rows, .. } => rows[0].values.clone(),
_ => panic!("expected rows"),
}
}
#[test]
fn insert_fewer_values_fills_trailing_defaults() {
let mut e = Engine::new();
e.execute("CREATE TABLE fv (a INT, b INT, c INT DEFAULT 99)")
.unwrap();
e.execute("INSERT INTO fv VALUES (1, 2)").unwrap();
assert_eq!(
row(&mut e, "SELECT a,b,c FROM fv WHERE a=1"),
vec![Value::Int(1), Value::Int(2), Value::Int(99)]
);
e.execute("INSERT INTO fv VALUES (10)").unwrap();
assert_eq!(
row(&mut e, "SELECT a,b,c FROM fv WHERE a=10"),
vec![Value::Int(10), Value::Null, Value::Int(99)]
);
assert!(e.execute("INSERT INTO fv VALUES (1,2,3,4)").is_err());
assert!(e.execute("INSERT INTO fv (a,b,c) VALUES (8,9)").is_err());
}
#[test]
fn insert_fewer_values_computes_trailing_generated_column() {
let mut e = Engine::new();
e.execute("CREATE TABLE g (id INT, x INT, gen INT GENERATED ALWAYS AS (x*2) STORED)")
.unwrap();
e.execute("INSERT INTO g VALUES (1, 5)").unwrap();
assert_eq!(
row(&mut e, "SELECT id,x,gen FROM g WHERE id=1"),
vec![Value::Int(1), Value::Int(5), Value::Int(10)]
);
}