#![cfg(feature = "std")]
use graphitesql::Connection;
fn ok(sql: &str) {
let mut c = Connection::open_memory().unwrap();
c.execute(sql)
.unwrap_or_else(|e| panic!("expected {sql:?} to parse, got: {e}"));
}
fn err_near(sql: &str, tok: &str) {
let mut c = Connection::open_memory().unwrap();
let e = c.execute(sql).unwrap_err().to_string();
assert_eq!(
e,
format!("SQL error: near \"{tok}\": syntax error"),
"{sql:?}"
);
}
#[test]
fn named_transaction_is_accepted() {
ok("BEGIN TRANSACTION foo");
ok("BEGIN DEFERRED TRANSACTION foo");
ok("BEGIN IMMEDIATE TRANSACTION whatever");
ok("BEGIN EXCLUSIVE TRANSACTION t1");
ok("BEGIN TRANSACTION \"select\"");
}
#[test]
fn plain_and_unnamed_forms_still_work() {
ok("BEGIN");
ok("BEGIN TRANSACTION");
ok("BEGIN DEFERRED");
}
#[test]
fn name_requires_the_transaction_keyword() {
err_near("BEGIN foo", "foo");
}
#[test]
fn reserved_word_is_not_a_valid_transaction_name() {
err_near("BEGIN TRANSACTION select", "select");
}
#[test]
fn only_one_name_is_allowed() {
err_near("BEGIN TRANSACTION foo bar", "bar");
}
#[test]
fn commit_accepts_a_name_then_runs() {
let mut c = Connection::open_memory().unwrap();
c.execute("BEGIN TRANSACTION work").unwrap();
c.execute("COMMIT TRANSACTION work").unwrap();
c.execute("BEGIN TRANSACTION w2").unwrap();
c.execute("END TRANSACTION w2").unwrap();
}