use spg_embedded::Database;
fn tmp() -> std::path::PathBuf {
let p = std::env::temp_dir().join(format!(
"spg-sync-commit-{}",
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_nanos()
));
std::fs::create_dir_all(&p).unwrap();
p
}
#[test]
fn set_off_accepted_and_data_survives_clean_close() {
let dir = tmp();
let path = dir.join("d.db");
{
let mut db = Database::open_path(&path).unwrap();
db.execute("CREATE TABLE t(id INT PRIMARY KEY, v INT NOT NULL)")
.unwrap();
db.execute("SET synchronous_commit = off").unwrap();
for i in 0..200 {
db.execute(&format!("INSERT INTO t VALUES ({i}, {i})"))
.unwrap();
}
db.execute("SET synchronous_commit = on").unwrap();
db.execute("INSERT INTO t VALUES (1000, 1)").unwrap();
} {
let mut db = Database::open_path(&path).unwrap();
let r = db.execute("SELECT count(*) FROM t").unwrap();
match r {
spg_engine::QueryResult::Rows { rows, .. } => {
assert_eq!(rows[0].values[0], spg_storage::Value::BigInt(201));
}
other => panic!("{other:?}"),
}
}
let _ = std::fs::remove_dir_all(&dir);
}
#[test]
fn invalid_value_rejected() {
let mut db = Database::open_in_memory();
assert!(db.execute("SET synchronous_commit = sometimes").is_err());
db.execute("SET synchronous_commit = local").unwrap(); db.execute("SET synchronous_commit = remote_apply").unwrap();
}