use stoolap::Database;
#[test]
fn test_pragma_read_snapshot_interval() {
let db = Database::open("memory://pragma_read").expect("Failed to create database");
let result = db
.query("PRAGMA snapshot_interval", ())
.expect("Failed to execute PRAGMA");
let mut found = false;
for row in result {
let row = row.expect("Failed to get row");
let _value: i64 = row.get(0).unwrap();
found = true;
}
assert!(found, "Expected at least one row in result");
}
#[test]
fn test_pragma_set_snapshot_interval() {
let db = Database::open("memory://pragma_set_snap").expect("Failed to create database");
let result = db
.query("PRAGMA snapshot_interval = 60", ())
.expect("Failed to set PRAGMA");
for row in result {
let row = row.expect("Failed to get row");
let value: i64 = row.get(0).unwrap();
assert_eq!(value, 60, "Expected snapshot_interval to be 60");
}
let result = db
.query("PRAGMA snapshot_interval", ())
.expect("Failed to read PRAGMA");
for row in result {
let row = row.expect("Failed to get row");
let value: i64 = row.get(0).unwrap();
assert_eq!(
value, 60,
"Expected snapshot_interval to be 60 after setting"
);
}
}
#[test]
fn test_pragma_set_keep_snapshots() {
let db = Database::open("memory://pragma_keep").expect("Failed to create database");
let result = db
.query("PRAGMA keep_snapshots = 10", ())
.expect("Failed to set PRAGMA");
for row in result {
let row = row.expect("Failed to get row");
let value: i64 = row.get(0).unwrap();
assert_eq!(value, 10, "Expected keep_snapshots to be 10");
}
let result = db
.query("PRAGMA keep_snapshots", ())
.expect("Failed to read PRAGMA");
for row in result {
let row = row.expect("Failed to get row");
let value: i64 = row.get(0).unwrap();
assert_eq!(value, 10, "Expected keep_snapshots to be 10 after setting");
}
}
#[test]
fn test_pragma_set_sync_mode() {
let db = Database::open("memory://pragma_sync").expect("Failed to create database");
assert!(
db.execute("PRAGMA sync_mode = 2", ()).is_err(),
"sync_mode should be read-only"
);
let value: i64 = db
.query_one("PRAGMA sync_mode", ())
.expect("Failed to read sync_mode");
assert_eq!(value, 1, "Expected default sync_mode to be 1 (Normal)");
}
#[test]
fn test_pragma_set_wal_flush_trigger() {
let db = Database::open("memory://pragma_wal").expect("Failed to create database");
assert!(
db.execute("PRAGMA wal_flush_trigger = 1000", ()).is_err(),
"wal_flush_trigger should be read-only"
);
let value: i64 = db
.query_one("PRAGMA wal_flush_trigger", ())
.expect("Failed to read wal_flush_trigger");
assert_eq!(value, 32768, "Expected default wal_flush_trigger");
}
#[test]
fn test_pragma_with_transactions() {
let db = Database::open("memory://pragma_tx").expect("Failed to create database");
db.execute("PRAGMA snapshot_interval = 60", ())
.expect("Failed to set baseline snapshot_interval");
let initial: i64 = db
.query_one("PRAGMA snapshot_interval", ())
.expect("Failed to get initial snapshot_interval");
assert_eq!(initial, 60, "Expected initial snapshot_interval to be 60");
db.execute("BEGIN", ())
.expect("Failed to begin transaction");
db.execute("CREATE TABLE test_table (id INTEGER PRIMARY KEY)", ())
.expect("Failed to create table in transaction");
db.execute("COMMIT", ())
.expect("Failed to commit transaction");
db.execute("PRAGMA snapshot_interval = 90", ())
.expect("Failed to set snapshot_interval");
let new_value: i64 = db
.query_one("PRAGMA snapshot_interval", ())
.expect("Failed to read snapshot_interval after setting");
assert_eq!(new_value, 90, "Expected snapshot_interval to be 90");
db.execute("PRAGMA snapshot_interval = 120", ())
.expect("Failed to set snapshot_interval after transaction");
let final_value: i64 = db
.query_one("PRAGMA snapshot_interval", ())
.expect("Failed to read final snapshot_interval");
assert_eq!(
final_value, 120,
"Expected final snapshot_interval to be 120"
);
}
#[test]
fn test_pragma_multiple_settings() {
let db = Database::open("memory://pragma_multi").expect("Failed to create database");
db.execute("PRAGMA snapshot_interval = 45", ())
.expect("Failed to set snapshot_interval");
db.execute("PRAGMA keep_snapshots = 5", ())
.expect("Failed to set keep_snapshots");
assert!(db.execute("PRAGMA sync_mode = 1", ()).is_err());
assert!(db.execute("PRAGMA wal_flush_trigger = 500", ()).is_err());
let snap_interval: i64 = db
.query_one("PRAGMA snapshot_interval", ())
.expect("Failed to read snapshot_interval");
assert_eq!(snap_interval, 45);
let keep_snap: i64 = db
.query_one("PRAGMA keep_snapshots", ())
.expect("Failed to read keep_snapshots");
assert_eq!(keep_snap, 5);
let sync_mode: i64 = db
.query_one("PRAGMA sync_mode", ())
.expect("Failed to read sync_mode");
assert_eq!(sync_mode, 1);
let wal_trigger: i64 = db
.query_one("PRAGMA wal_flush_trigger", ())
.expect("Failed to read wal_flush_trigger");
assert_eq!(wal_trigger, 32768); }
#[test]
fn test_pragma_volume_stats_empty() {
let db = Database::open("memory://pragma_vs_empty").expect("Failed to create database");
let rows: Vec<_> = db
.query("PRAGMA VOLUME_STATS", ())
.expect("volume_stats")
.collect::<Result<Vec<_>, _>>()
.expect("collect");
assert!(rows.is_empty(), "Expected no rows for empty database");
}
#[test]
fn test_pragma_volume_stats_with_table() {
let db = Database::open("memory://pragma_vs_table").expect("Failed to create database");
db.execute("CREATE TABLE t (id INTEGER PRIMARY KEY, v TEXT)", ())
.expect("create");
db.execute("INSERT INTO t VALUES (1, 'a')", ())
.expect("insert");
let rows: Vec<_> = db
.query("PRAGMA VOLUME_STATS", ())
.expect("volume_stats")
.collect::<Result<Vec<_>, _>>()
.expect("collect");
assert!(
rows.is_empty(),
"In-memory tables have no volumes before checkpoint"
);
}