From 66fe6925c150304fbf32cdf1d16b20ee86b26130 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Nov 2026 20:25:16 +0000 Subject: [PATCH 1/2] chore(javascript): Bump the napi group across 1 directory with 2 updates Bumps the napi group with 2 updates in the /javascript directory: [napi](https://github.com/napi-rs/napi-rs) and [napi-derive](https://github.com/napi-rs/napi-rs). Updates `napi` from 3.14.2 to 3.15.0 - [Release notes](https://github.com/napi-rs/napi-rs/releases) - [Commits](https://github.com/napi-rs/napi-rs/compare/napi-v3.14.2...napi-v3.15.0) Updates `napi-derive` from 3.6.12 to 3.6.13 - [Release notes](https://github.com/napi-rs/napi-rs/releases) - [Commits](https://github.com/napi-rs/napi-rs/compare/napi-derive-v3.6.12...napi-derive-v3.6.13) --- updated-dependencies: - dependency-name: napi dependency-version: 3.15.0 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: napi - dependency-name: napi-derive dependency-version: 3.6.13 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: napi ... Signed-off-by: dependabot[bot] --- javascript/Cargo.lock | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/javascript/Cargo.lock b/javascript/Cargo.lock index ca569f5807..4b11ea161c 100644 --- a/javascript/Cargo.lock +++ b/javascript/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "adbc_core" -version = "0.25.0" +version = "0.26.0" dependencies = [ "arrow-array", "arrow-schema", @@ -12,7 +12,7 @@ dependencies = [ [[package]] name = "adbc_driver_manager" -version = "0.25.0" +version = "0.26.0" dependencies = [ "adbc_core", "adbc_ffi", @@ -28,7 +28,7 @@ dependencies = [ [[package]] name = "adbc_driver_manager_node" -version = "0.25.0" +version = "0.26.0" dependencies = [ "adbc_core", "adbc_driver_manager", @@ -43,7 +43,7 @@ dependencies = [ [[package]] name = "adbc_ffi" -version = "0.25.0" +version = "0.26.0" dependencies = [ "adbc_core", "arrow-array", @@ -499,9 +499,9 @@ checksum = "6b947ae49db0d222b1dbc6b113ce7248a3fc3a6ca21b696717bfc000ba4484d8" [[package]] name = "napi" -version = "3.14.2" +version = "3.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4e2cf85c02d9b057898c485b824c3c416b65193689e2b7f517efc94b86ed24c" +checksum = "6a746ad50efbfb632ade1de4025519a477decbbd798cea1a6ac41d7c44f80083" dependencies = [ "bitflags", "ctor", @@ -521,9 +521,9 @@ checksum = "b899b545d3aa6dca985939059f258c5488d34e4ecf39c274e20009748f4b846d" [[package]] name = "napi-derive" -version = "3.6.12" +version = "3.6.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92cec6048ac04041ac8055bdce1ec4f353416cd443ba9222bf73af790c3d4495" +checksum = "3ff48271a0f61abb83f3e2d1989fa71169143db95f6f948c3a8903961f2855dc" dependencies = [ "convert_case", "ctor", @@ -535,9 +535,9 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "6.1.5" +version = "6.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae2444f4ba7333754bb73414ff8059dec2cb23b83a95bd1a0bf08169eed1be0" +checksum = "f2639052c5aff9956a21d7b6202fc61d5e89c5f19c72d289b7a0641ea94e8159" dependencies = [ "convert_case", "proc-macro2", @@ -548,9 +548,9 @@ dependencies = [ [[package]] name = "napi-sys" -version = "3.4.0" +version = "3.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e22a4f25c16a5c5411d987cd6fbd48313522ae1789ade2d6dd3efdc6d40a0fc8" +checksum = "d153beb7d5c973f4b9395be8a83054a28968b61188f1dd1a2cc2321af22daea2" dependencies = [ "libloading 0.9.0", ] From 57110bc41dbc7772e183788cf79f6b773d3c1a12 Mon Sep 17 00:00:00 2001 From: David Li Date: Wed, 4 Nov 2026 10:34:39 +0900 Subject: [PATCH 2/2] fix --- javascript/src/lib.rs | 80 ++++++++++++++++++++++++++++++------------- 1 file changed, 57 insertions(+), 23 deletions(-) diff --git a/javascript/src/lib.rs b/javascript/src/lib.rs index 38b35d26bb..c9cdd00f96 100644 --- a/javascript/src/lib.rs +++ b/javascript/src/lib.rs @@ -27,6 +27,7 @@ use napi::bindgen_prelude::{ AsyncTask, Buffer, Error, JsObjectValue, Result, Status, ToNapiValue, Unknown, }; use napi::{Env, Task}; +use std::cell::RefCell; use std::collections::HashMap; use std::sync::{Arc, Mutex}; @@ -376,8 +377,8 @@ impl Task for CreateStatementTask { fn resolve(&mut self, _env: Env, output: Self::Output) -> Result { Ok(_NativeAdbcStatement { - inner: Some(Arc::new(Mutex::new(output))), - stream_sender: None, + inner: RefCell::new(Some(Arc::new(Mutex::new(output)))), + stream_sender: RefCell::new(None), }) } @@ -538,17 +539,29 @@ impl Task for RollbackTask { #[napi] pub struct _NativeAdbcStatement { - inner: Option>>, - stream_sender: Option>>, + inner: RefCell>>>, + stream_sender: RefCell>>>, +} + +impl _NativeAdbcStatement { + fn statement(&self) -> Result>> { + self + .inner + .try_borrow() + .map_err(|e| Error::from_reason(e.to_string()))? + .as_ref() + .cloned() + .ok_or_else(closed_err) + } } #[napi] impl _NativeAdbcStatement { #[napi] pub fn set_sql_query(&self, env: Env, query: String) -> Result<()> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; let mut stmt = mutex - .lock() + .try_lock() .map_err(|e| Error::from_reason(e.to_string()))?; stmt .set_sql_query(&query) @@ -557,9 +570,9 @@ impl _NativeAdbcStatement { #[napi] pub fn set_option(&self, env: Env, key: String, value: String) -> Result<()> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; let mut stmt = mutex - .lock() + .try_lock() .map_err(|e| Error::from_reason(e.to_string()))?; stmt .set_option(&key, &value) @@ -568,7 +581,7 @@ impl _NativeAdbcStatement { #[napi] pub fn execute_query(&self) -> Result> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; Ok(AsyncTask::new(ExecuteQueryTask { statement: mutex.clone(), adbc_err: None, @@ -577,7 +590,7 @@ impl _NativeAdbcStatement { #[napi] pub fn execute_update(&self) -> Result> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; Ok(AsyncTask::new(ExecuteUpdateTask { statement: mutex.clone(), adbc_err: None, @@ -586,7 +599,7 @@ impl _NativeAdbcStatement { #[napi] pub fn bind(&self, data: Buffer) -> Result> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; Ok(AsyncTask::new(BindTask { statement: mutex.clone(), data: data.to_vec(), @@ -596,13 +609,16 @@ impl _NativeAdbcStatement { #[napi] pub fn start_bind_stream_execute( - &mut self, + &self, schema_bytes: Buffer, ) -> Result> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + let mutex = self.statement()?; // Unbounded channel: a bounded channel would block the JS main thread. let (sender, receiver) = std::sync::mpsc::channel::>(); - self.stream_sender = Some(sender); + *self + .stream_sender + .try_borrow_mut() + .map_err(|e| Error::from_reason(e.to_string()))? = Some(sender); Ok(AsyncTask::new(BindStreamExecuteTask { statement: mutex.clone(), schema_bytes: schema_bytes.to_vec(), @@ -612,11 +628,14 @@ impl _NativeAdbcStatement { } #[napi] - pub fn start_bind_stream(&mut self, schema_bytes: Buffer) -> Result> { - let mutex = self.inner.as_ref().ok_or_else(closed_err)?; + pub fn start_bind_stream(&self, schema_bytes: Buffer) -> Result> { + let mutex = self.statement()?; // Unbounded channel: a bounded channel would block the JS main thread. let (sender, receiver) = std::sync::mpsc::channel::>(); - self.stream_sender = Some(sender); + *self + .stream_sender + .try_borrow_mut() + .map_err(|e| Error::from_reason(e.to_string()))? = Some(sender); Ok(AsyncTask::new(BindStreamTask { statement: mutex.clone(), schema_bytes: schema_bytes.to_vec(), @@ -627,8 +646,11 @@ impl _NativeAdbcStatement { #[napi] pub fn push_batch(&self, data: Buffer) -> Result<()> { - let sender = self + let guard = self .stream_sender + .try_borrow() + .map_err(|e| Error::from_reason(e.to_string()))?; + let sender = guard .as_ref() .ok_or_else(|| Error::new(Status::GenericFailure, "No active bind stream"))?; sender @@ -638,15 +660,27 @@ impl _NativeAdbcStatement { } #[napi] - pub fn end_stream(&mut self) -> Result<()> { - self.stream_sender.take(); + pub fn end_stream(&self) -> Result<()> { + self + .stream_sender + .try_borrow_mut() + .map_err(|e| Error::from_reason(e.to_string()))? + .take(); Ok(()) } #[napi] - pub fn close(&mut self) -> Result<()> { - self.inner.take(); - self.stream_sender.take(); + pub fn close(&self) -> Result<()> { + self + .inner + .try_borrow_mut() + .map_err(|e| Error::from_reason(e.to_string()))? + .take(); + self + .stream_sender + .try_borrow_mut() + .map_err(|e| Error::from_reason(e.to_string()))? + .take(); Ok(()) } }