From 7dc69c9c391dcfe17d3de032c6defe8216f6fee0 Mon Sep 17 00:00:00 2001 From: Diego Reis Date: Mon, 26 May 2025 12:25:43 -0300 Subject: [PATCH] bindings/js: Add extension loading --- bindings/javascript/__test__/limbo.spec.mjs | 9 +++++++++ bindings/javascript/src/lib.rs | 16 +++++++++++----- bindings/javascript/wrapper.js | 10 +++------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/bindings/javascript/__test__/limbo.spec.mjs b/bindings/javascript/__test__/limbo.spec.mjs index 73e5412b..7eec6cb4 100644 --- a/bindings/javascript/__test__/limbo.spec.mjs +++ b/bindings/javascript/__test__/limbo.spec.mjs @@ -71,6 +71,15 @@ test("Test pragma", async (t) => { t.deepEqual(typeof db.pragma("cache_size", { simple: true }), "number"); }); +test("test extension loading", async (t) => { + const [db] = await connect(":memory:"); + db.loadExtension("../../target/debug/liblimbo_crypto.so"); + t.deepEqual( + typeof db.prepare("select crypto_sha256('asdf')").get(), + "object", + ); +}); + const connect = async (path) => { const db = new Database(path); return [db]; diff --git a/bindings/javascript/src/lib.rs b/bindings/javascript/src/lib.rs index 55072565..fa075494 100644 --- a/bindings/javascript/src/lib.rs +++ b/bindings/javascript/src/lib.rs @@ -109,13 +109,18 @@ impl Database { } #[napi] - pub fn load_extension(&self) { - todo!() + pub fn load_extension(&self, path: String) -> napi::Result<()> { + let ext_path = limbo_core::resolve_ext_path(path.as_str()).map_err(into_napi_error)?; + self.conn + .load_extension(ext_path) + .map_err(into_napi_error)?; + Ok(()) } #[napi] - pub fn exec(&self) { - todo!() + pub fn exec(&self, sql: String) -> napi::Result<()> { + self.conn.query(sql).map_err(into_napi_error)?; + Ok(()) } #[napi] @@ -133,7 +138,8 @@ impl Database { let pragma_name = pragma .split("PRAGMA") .find(|s| !s.trim().is_empty()) - .unwrap(); + .unwrap() + .trim(); let mut results = env.create_empty_array()?; diff --git a/bindings/javascript/wrapper.js b/bindings/javascript/wrapper.js index 22492bd6..0eb18e3d 100644 --- a/bindings/javascript/wrapper.js +++ b/bindings/javascript/wrapper.js @@ -112,8 +112,8 @@ class Database { throw new Error("not implemented"); } - loadExtension(...args) { - throw new Error("not implemented"); + loadExtension(path) { + this.db.loadExtension(path); } maxWriteReplicationIndex() { @@ -126,11 +126,7 @@ class Database { * @param {string} sql - The SQL statement string to execute. */ exec(sql) { - try { - this.db.exec(sql); - } catch (err) { - throw convertError(err); - } + this.db.exec(sql); } /**