mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-07 09:14:26 +01:00
reinitialize WalFileShare when reset page size
This commit is contained in:
@@ -274,10 +274,7 @@ impl Database {
|
||||
if let Some(shared_wal) = self.maybe_shared_wal.read().clone() {
|
||||
let size = match page_size {
|
||||
None => unsafe { (*shared_wal.get()).page_size() as usize },
|
||||
Some(size) => {
|
||||
unsafe { (*shared_wal.get()).set_page_size(size as u32) };
|
||||
size
|
||||
}
|
||||
Some(size) => size,
|
||||
};
|
||||
let buffer_pool = Arc::new(BufferPool::new(Some(size)));
|
||||
|
||||
@@ -847,6 +844,7 @@ impl Connection {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
*self._db.maybe_shared_wal.write() = None;
|
||||
let pager = self._db.init_pager(Some(size as usize))?;
|
||||
self.pager.replace(Rc::new(pager));
|
||||
self.pager.borrow().set_initial_page_size(size);
|
||||
|
||||
@@ -159,7 +159,7 @@ macro_rules! impl_header_field_accessor {
|
||||
}
|
||||
|
||||
// impl_header_field_accessor!(magic, [u8; 16], HEADER_OFFSET_MAGIC);
|
||||
impl_header_field_accessor!(page_size_, u16, HEADER_OFFSET_PAGE_SIZE);
|
||||
impl_header_field_accessor!(page_size_u16, u16, HEADER_OFFSET_PAGE_SIZE);
|
||||
impl_header_field_accessor!(write_version, u8, HEADER_OFFSET_WRITE_VERSION);
|
||||
impl_header_field_accessor!(read_version, u8, HEADER_OFFSET_READ_VERSION);
|
||||
impl_header_field_accessor!(reserved_space, u8, HEADER_OFFSET_RESERVED_SPACE);
|
||||
@@ -196,7 +196,7 @@ impl_header_field_accessor!(version_valid_for, u32, HEADER_OFFSET_VERSION_VALID_
|
||||
impl_header_field_accessor!(version_number, u32, HEADER_OFFSET_VERSION_NUMBER);
|
||||
|
||||
pub fn get_page_size(pager: &Pager) -> Result<u32> {
|
||||
let size = get_page_size_(pager)?;
|
||||
let size = get_page_size_u16(pager)?;
|
||||
if size == 1 {
|
||||
return Ok(MAX_PAGE_SIZE);
|
||||
}
|
||||
@@ -210,5 +210,18 @@ pub fn set_page_size(pager: &Pager, value: u32) -> Result<()> {
|
||||
} else {
|
||||
value as u16
|
||||
};
|
||||
set_page_size_(pager, page_size)
|
||||
set_page_size_u16(pager, page_size)
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub fn get_page_size_async(pager: &Pager) -> Result<CursorResult<u32>> {
|
||||
match get_page_size_u16_async(pager)? {
|
||||
CursorResult::Ok(size) => {
|
||||
if size == 1 {
|
||||
return Ok(CursorResult::Ok(MAX_PAGE_SIZE));
|
||||
}
|
||||
Ok(CursorResult::Ok(size as u32))
|
||||
}
|
||||
CursorResult::IO => Ok(CursorResult::IO),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1123,8 +1123,4 @@ impl WalFileShared {
|
||||
pub fn page_size(&self) -> u32 {
|
||||
self.wal_header.lock().page_size
|
||||
}
|
||||
|
||||
pub fn set_page_size(&self, page_size: u32) {
|
||||
self.wal_header.lock().page_size = page_size;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,8 +189,10 @@ do_execsql_test_on_specific_db ":memory:" pragma-page-size-set-initialized-db {
|
||||
|
||||
# pragma page_size=xxx changes the page size of an uninitialized database and persists the change.
|
||||
set test_pragma_page_size_db "testing/testing_pragma_page_size.db"
|
||||
catch {file delete -force $test_pragma_page_size_db}
|
||||
catch {file delete -force "${test_pragma_page_size_db}-wal"}
|
||||
# set user_version to trigger database initialization.
|
||||
do_execsql_test_on_specific_db $test_pragma_page_size_db pragma-page-size-set-initialized-db-1 {
|
||||
do_execsql_test_on_specific_db $test_pragma_page_size_db pragma-page-size-set-uninitialized-db-1 {
|
||||
PRAGMA page_size=1024;
|
||||
PRAGMA user_version=1;
|
||||
PRAGMA page_size
|
||||
|
||||
Reference in New Issue
Block a user