diff --git a/core/lib.rs b/core/lib.rs index 71b4546e0..4743ca9d9 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -60,7 +60,7 @@ use std::{ num::NonZero, ops::Deref, rc::Rc, - sync::Arc, + sync::{atomic::Ordering, Arc}, }; use storage::btree::btree_init_page; #[cfg(feature = "fs")] @@ -159,7 +159,9 @@ impl Database { } else { None }; - let wal_exists = maybe_shared_wal.is_some(); + let wal_has_frames = maybe_shared_wal.as_ref().map_or(false, |wal| { + unsafe { &*wal.get() }.max_frame.load(Ordering::SeqCst) > 0 + }); let shared_page_cache = Arc::new(RwLock::new(DumbLruPageCache::default())); let schema = Arc::new(RwLock::new(Schema::new())); @@ -174,7 +176,7 @@ impl Database { open_flags: flags, }; let db = Arc::new(db); - if db_size > 0 || wal_exists { + if db_size > 0 || wal_has_frames { // parse schema let conn = db.connect()?; let rows = conn.query("SELECT * FROM sqlite_schema")?; diff --git a/core/vdbe/execute.rs b/core/vdbe/execute.rs index 3e283f97c..bacdf4759 100644 --- a/core/vdbe/execute.rs +++ b/core/vdbe/execute.rs @@ -1683,11 +1683,11 @@ pub fn op_transaction( if conn._db.open_flags.contains(OpenFlags::ReadOnly) { return Err(LimboError::ReadOnly); } + } - // We allocate the first page lazily in the *first* write transaction - if conn.pager.is_empty.load(Ordering::SeqCst) { - conn.pager.allocate_page1()?; - } + // We allocate the first page lazily in the first transaction + if conn.pager.is_empty.load(Ordering::SeqCst) { + conn.pager.allocate_page1()?; } if let Some(mv_store) = &mv_store {