mirror of
https://github.com/aljazceru/turso.git
synced 2026-01-09 03:04:20 +01:00
Add integration test for page_size=512
This commit is contained in:
@@ -57,3 +57,107 @@ fn test_pragma_module_list_generate_series() {
|
||||
|
||||
assert!(found, "generate_series should appear in module_list");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pragma_page_sizes_without_writes_persists() {
|
||||
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
{
|
||||
let conn = db.connect_limbo();
|
||||
let pragma_query = format!("PRAGMA page_size={test_page_size}");
|
||||
conn.execute(&pragma_query).unwrap();
|
||||
conn.execute("PRAGMA user_version=1").unwrap(); // even sqlite behavior is that just changing page_size pragma doesn't persist it, so we do this to make a minimal persistent change
|
||||
}
|
||||
|
||||
let conn = db.connect_limbo();
|
||||
let mut rows = conn.query("PRAGMA page_size").unwrap().unwrap();
|
||||
let StepResult::Row = rows.step().unwrap() else {
|
||||
panic!("expected row");
|
||||
};
|
||||
let row = rows.row().unwrap();
|
||||
let Value::Integer(page_size) = row.get_value(0) else {
|
||||
panic!("expected integer value");
|
||||
};
|
||||
assert_eq!(*page_size, test_page_size);
|
||||
|
||||
// Reopen database and verify page size
|
||||
let db = TempDatabase::new_with_existent(&db.path, false);
|
||||
let conn = db.connect_limbo();
|
||||
let mut rows = conn.query("PRAGMA page_size").unwrap().unwrap();
|
||||
let StepResult::Row = rows.step().unwrap() else {
|
||||
panic!("expected row");
|
||||
};
|
||||
let row = rows.row().unwrap();
|
||||
let Value::Integer(page_size) = row.get_value(0) else {
|
||||
panic!("expected integer value");
|
||||
};
|
||||
assert_eq!(*page_size, test_page_size);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_pragma_page_sizes_with_writes_persists() {
|
||||
for test_page_size in [512, 1024, 2048, 4096, 8192, 16384, 32768, 65536] {
|
||||
let db = TempDatabase::new_empty(false);
|
||||
{
|
||||
{
|
||||
let conn = db.connect_limbo();
|
||||
let pragma_query = format!("PRAGMA page_size={test_page_size}");
|
||||
conn.execute(&pragma_query).unwrap();
|
||||
|
||||
// Create table and insert data
|
||||
conn.execute("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)")
|
||||
.unwrap();
|
||||
conn.execute("INSERT INTO test (id, value) VALUES (1, 'test data')")
|
||||
.unwrap();
|
||||
let mut page_size = conn.pragma_query("page_size").unwrap();
|
||||
let mut page_size = page_size.pop().unwrap();
|
||||
let page_size = page_size.pop().unwrap();
|
||||
let Value::Integer(page_size) = page_size else {
|
||||
panic!("expected integer value");
|
||||
};
|
||||
assert_eq!(page_size, test_page_size);
|
||||
} // Connection is dropped here
|
||||
|
||||
// Reopen database and verify page size and data
|
||||
let conn = db.connect_limbo();
|
||||
|
||||
// Check page size is still test_page_size
|
||||
let mut page_size = conn.pragma_query("page_size").unwrap();
|
||||
let mut page_size = page_size.pop().unwrap();
|
||||
let page_size = page_size.pop().unwrap();
|
||||
let Value::Integer(page_size) = page_size else {
|
||||
panic!("expected integer value");
|
||||
};
|
||||
assert_eq!(page_size, test_page_size);
|
||||
|
||||
// Verify data can still be read
|
||||
let mut rows = conn
|
||||
.query("SELECT value FROM test WHERE id = 1")
|
||||
.unwrap()
|
||||
.unwrap();
|
||||
loop {
|
||||
if let StepResult::Row = rows.step().unwrap() {
|
||||
let row = rows.row().unwrap();
|
||||
let Value::Text(value) = row.get_value(0) else {
|
||||
panic!("expected text value");
|
||||
};
|
||||
assert_eq!(value.as_str(), "test data");
|
||||
break;
|
||||
}
|
||||
rows.run_once().unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
// Drop the db and reopen it, and verify the same
|
||||
let db = TempDatabase::new_with_existent(&db.path, false);
|
||||
let conn = db.connect_limbo();
|
||||
let mut page_size = conn.pragma_query("page_size").unwrap();
|
||||
let mut page_size = page_size.pop().unwrap();
|
||||
let page_size = page_size.pop().unwrap();
|
||||
let Value::Integer(page_size) = page_size else {
|
||||
panic!("expected integer value");
|
||||
};
|
||||
assert_eq!(page_size, test_page_size);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user