From ce1367b76a793eac95c07b0d53eef72fb84b4ce2 Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Thu, 7 Nov 2024 13:51:02 +0100 Subject: [PATCH] move wal creation --- bindings/wasm/lib.rs | 2 +- core/io/generic.rs | 6 ++++-- core/lib.rs | 26 ++++++++++++++------------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bindings/wasm/lib.rs b/bindings/wasm/lib.rs index 3c89a2c07..1bb912874 100644 --- a/bindings/wasm/lib.rs +++ b/bindings/wasm/lib.rs @@ -77,7 +77,7 @@ impl limbo_core::File for File { todo!() } - fn size(&self) -> Result<()> { + fn size(&self) -> Result { todo!() } } diff --git a/core/io/generic.rs b/core/io/generic.rs index a0d17ba93..3614d6bf8 100644 --- a/core/io/generic.rs +++ b/core/io/generic.rs @@ -72,19 +72,21 @@ impl File for GenericFile { &self, pos: usize, buffer: Rc>, - _c: Rc, + c: Rc, ) -> Result<()> { let mut file = self.file.borrow_mut(); file.seek(std::io::SeekFrom::Start(pos as u64))?; let buf = buffer.borrow(); let buf = buf.as_slice(); file.write_all(buf)?; + c.complete(buf.len() as i32); Ok(()) } - fn sync(&self, _c: Rc) -> Result<()> { + fn sync(&self, c: Rc) -> Result<()> { let mut file = self.file.borrow_mut(); file.sync_all().map_err(|err| LimboError::IOError(err))?; + c.complete(0); Ok(()) } diff --git a/core/lib.rs b/core/lib.rs index 6ef24d486..36f5739d0 100644 --- a/core/lib.rs +++ b/core/lib.rs @@ -68,25 +68,27 @@ impl Database { let file = io.open_file(path, io::OpenFlags::None)?; let page_io = Rc::new(FileStorage::new(file)); let wal_path = format!("{}-wal", path); - Self::open(io, page_io, wal_path) - } - - pub fn open( - io: Arc, - page_io: Rc, - wal_path: String, - ) -> Result> { let db_header = Pager::begin_open(page_io.clone())?; - DATABASE_VERSION.get_or_init(|| { - let version = db_header.borrow().version_number; - version.to_string() - }); io.run_once()?; let wal = Rc::new(RefCell::new(WalFile::new( io.clone(), wal_path, db_header.borrow().page_size as usize, ))); + Self::open(io, page_io, wal) + } + + pub fn open( + io: Arc, + page_io: Rc, + wal: Rc>, + ) -> Result> { + let db_header = Pager::begin_open(page_io.clone())?; + io.run_once()?; + DATABASE_VERSION.get_or_init(|| { + let version = db_header.borrow().version_number; + version.to_string() + }); let pager = Rc::new(Pager::finish_open( db_header.clone(), page_io,