use oxisql_core::Connection;
use oxisql_sqlite_compat::SqliteConnection;
#[tokio::test]
async fn test_rollback_returns_clear_error() {
let conn = SqliteConnection::open_memory()
.await
.expect("open_memory failed");
conn.execute("CREATE TABLE rb_test (id INTEGER)", &[])
.await
.expect("CREATE TABLE failed");
let txn = conn.transaction().await.expect("BEGIN transaction failed");
let result = txn.rollback().await;
assert!(
result.is_err(),
"rollback() must return Err with limbo 0.0.22, but returned Ok"
);
let err_msg = result.unwrap_err().to_string();
assert!(
err_msg.contains("ROLLBACK"),
"error message must mention 'ROLLBACK', got: {err_msg:?}"
);
assert!(
err_msg.contains("not supported"),
"error message must say 'not supported', got: {err_msg:?}"
);
assert!(
!err_msg.contains("ROLLBACK not supported yet"),
"error message must not expose raw limbo parse error, got: {err_msg:?}"
);
}
#[tokio::test]
async fn test_rollback_done_flag_set_after_rollback() {
let conn = SqliteConnection::open_memory()
.await
.expect("open_memory failed");
conn.execute("CREATE TABLE rb2 (n INTEGER)", &[])
.await
.expect("CREATE TABLE failed");
let txn = conn.transaction().await.expect("first BEGIN failed");
let rb_result = txn.rollback().await;
assert!(
rb_result.is_err(),
"rollback() must return Err (limbo 0.0.22 does not support ROLLBACK)"
);
let conn2 = SqliteConnection::open_memory()
.await
.expect("second open_memory failed");
conn2
.execute("CREATE TABLE clean (x INTEGER)", &[])
.await
.expect("CREATE on clean connection failed");
conn2
.execute("INSERT INTO clean VALUES (1)", &[])
.await
.expect("INSERT on clean connection failed");
let rows = conn2
.query("SELECT x FROM clean", &[])
.await
.expect("SELECT on clean connection failed");
assert_eq!(rows.len(), 1, "clean connection should have 1 row");
}