#[path = "common/mod.rs"]
mod common;
use common::*;
use motedb::Database;
#[test]
fn test_delete_survives_restart_without_flush() {
let dir = tempfile::TempDir::new().unwrap();
let path = dir.path().to_path_buf();
{
let db = Database::create(&path).unwrap();
exec(&db, "CREATE TABLE t (id INT PRIMARY KEY, v INT)");
for i in 1..=100 {
exec(&db, &format!("INSERT INTO t VALUES ({}, {})", i, i * 10));
}
assert_eq!(count_rows(&db, "SELECT * FROM t"), 100);
exec(&db, "DELETE FROM t WHERE id > 50");
assert_eq!(count_rows(&db, "SELECT * FROM t"), 50);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id <= 50"), 50);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id > 50"), 0);
drop(db);
}
let db = Database::open(&path).unwrap();
assert_eq!(
count_rows(&db, "SELECT * FROM t"),
50,
"DELETE 未持久:重启后已删除的行复活了"
);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id > 50"), 0);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id = 50"), 1);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id = 51"), 0);
}
#[test]
fn test_delete_then_reinsert_survives_restart() {
let dir = tempfile::TempDir::new().unwrap();
let path = dir.path().to_path_buf();
{
let db = Database::create(&path).unwrap();
exec(&db, "CREATE TABLE t (id INT PRIMARY KEY, v TEXT)");
exec(&db, "INSERT INTO t VALUES (1, 'old')");
exec(&db, "INSERT INTO t VALUES (2, 'old2')");
exec(&db, "DELETE FROM t WHERE id = 1");
exec(&db, "INSERT INTO t VALUES (1, 'new')");
assert_eq!(count_rows(&db, "SELECT * FROM t"), 2);
db.close().unwrap();
drop(db);
}
let db = Database::open(&path).unwrap();
assert_eq!(count_rows(&db, "SELECT * FROM t"), 2);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id = 1"), 1);
assert_eq!(count_rows(&db, "SELECT * FROM t WHERE id = 2"), 1);
}