use fsqlite_core::connection::Connection;
async fn ddl_err(ddl: &str) -> String {
let c = Connection::open(":memory:").await.unwrap();
c.execute(ddl)
.await
.expect_err("DEFAULT on a generated column must be rejected")
.to_string()
}
async fn ddl_ok(ddl: &str) {
let c = Connection::open(":memory:").await.unwrap();
c.execute(ddl).await.expect("valid DDL must succeed");
}
#[test]
fn generated_column_with_default_is_rejected() {
asupersync::test_utils::run_test(|| async {
assert_eq!(
ddl_err("CREATE TABLE t(a, b AS (a+1) STORED DEFAULT 5)").await,
"cannot use DEFAULT on a generated column",
);
assert_eq!(
ddl_err("CREATE TABLE t(a, b AS (a+1) VIRTUAL DEFAULT 5)").await,
"cannot use DEFAULT on a generated column",
);
assert_eq!(
ddl_err("CREATE TABLE t(a, b AS (a+1) DEFAULT 5)").await,
"cannot use DEFAULT on a generated column",
);
assert_eq!(
ddl_err("CREATE TABLE t(a, b DEFAULT 5 AS (a+1))").await,
"error in generated column \"b\"",
);
ddl_ok("CREATE TABLE t(a, b AS (a+1))").await;
ddl_ok("CREATE TABLE t(a, b AS (a+1) STORED)").await;
ddl_ok("CREATE TABLE t(a, b DEFAULT 5)").await;
});
}