From 7919ff032afc8d998041f545a5870e955d0689e6 Mon Sep 17 00:00:00 2001 From: Forato Date: Wed, 25 Jun 2025 18:45:23 -0300 Subject: [PATCH 1/4] feat: implement open in lib.rs --- bindings/javascript/src/lib.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 4429b70e4..6837399d0 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -4,7 +4,7 @@ use std::cell::{RefCell, RefMut}; use std::num::NonZeroUsize; use std::rc::Rc; -use std::sync::Arc; +use std::sync::{Arc, Mutex}; use limbo_core::{LimboError, StepResult}; use napi::iterator::Generator; @@ -35,8 +35,7 @@ pub struct Database { pub readonly: bool, // #[napi(writable = false)] // pub in_transaction: bool, - // #[napi(writable = false)] - // pub open: bool, + pub open: bool, #[napi(writable = false)] pub name: String, _db: Arc, @@ -80,6 +79,7 @@ impl Database { memory, _db: db, conn, + open: true, name: path, io, }) @@ -126,6 +126,11 @@ impl Database { self.readonly } + #[napi] + pub fn open(&self) -> bool { + self.open + } + #[napi] pub fn backup(&self) { todo!() @@ -199,8 +204,9 @@ impl Database { } #[napi] - pub fn close(&self) -> napi::Result<()> { + pub fn close(&mut self) -> napi::Result<()> { self.conn.close().map_err(into_napi_error)?; + self.open = false; Ok(()) } } From 897898fdbd9fcd533b35e9db4f6f3f82e8f889cf Mon Sep 17 00:00:00 2001 From: Forato Date: Wed, 25 Jun 2025 18:52:12 -0300 Subject: [PATCH 2/4] fix: remove unused Mutex --- bindings/javascript/__test__/better-sqlite3.spec.mjs | 5 +++++ bindings/javascript/src/lib.rs | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/bindings/javascript/__test__/better-sqlite3.spec.mjs b/bindings/javascript/__test__/better-sqlite3.spec.mjs index 370123a5b..8596d53de 100644 --- a/bindings/javascript/__test__/better-sqlite3.spec.mjs +++ b/bindings/javascript/__test__/better-sqlite3.spec.mjs @@ -32,6 +32,11 @@ test("Property .readonly of database if not set", async (t) => { t.is(db.readonly, false); }); +test("Property .open of database", async (t) => { + const db = new Database("foobar.db"); + t.is(db.open, true); +}); + test("Statement.get() returns data", async (t) => { const [db] = await connect(":memory:"); const stmt = db.prepare("SELECT 1"); diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 6837399d0..99149652b 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -4,7 +4,7 @@ use std::cell::{RefCell, RefMut}; use std::num::NonZeroUsize; use std::rc::Rc; -use std::sync::{Arc, Mutex}; +use std::sync::Arc; use limbo_core::{LimboError, StepResult}; use napi::iterator::Generator; From 317d8f763c498830af556dd4c589269ce51962d7 Mon Sep 17 00:00:00 2001 From: Forato Date: Wed, 25 Jun 2025 18:53:05 -0300 Subject: [PATCH 3/4] feat: add napi to open --- bindings/javascript/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 99149652b..4a2b01eed 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -35,6 +35,7 @@ pub struct Database { pub readonly: bool, // #[napi(writable = false)] // pub in_transaction: bool, + #[napi(writable = false)] pub open: bool, #[napi(writable = false)] pub name: String, From 48635642137b5e1d2eeca63de4a1af59d215d1b5 Mon Sep 17 00:00:00 2001 From: Forato Date: Thu, 26 Jun 2025 10:24:18 -0300 Subject: [PATCH 4/4] feat: only call close if it is open --- bindings/javascript/src/lib.rs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 4a2b01eed..373f662fb 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -206,8 +206,10 @@ impl Database { #[napi] pub fn close(&mut self) -> napi::Result<()> { - self.conn.close().map_err(into_napi_error)?; - self.open = false; + if self.open { + self.conn.close().map_err(into_napi_error)?; + self.open = false; + } Ok(()) } }