Skip to content

Commit f999d95

Browse files
committed
Drop mutex around libsql::Statement
1 parent 05d8c49 commit f999d95

File tree

1 file changed

+12
-26
lines changed

1 file changed

+12
-26
lines changed

src/lib.rs

Lines changed: 12 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -612,7 +612,7 @@ pub struct Statement {
612612
// The libSQL connection instance.
613613
conn: Arc<libsql::Connection>,
614614
// The libSQL statement instance.
615-
stmt: Arc<tokio::sync::Mutex<libsql::Statement>>,
615+
stmt: Arc<libsql::Statement>,
616616
// The column names.
617617
column_names: Vec<std::ffi::CString>,
618618
// The access mode.
@@ -638,7 +638,7 @@ impl Statement {
638638
.iter()
639639
.map(|c| std::ffi::CString::new(c.name().to_string()).unwrap())
640640
.collect();
641-
let stmt = Arc::new(tokio::sync::Mutex::new(stmt));
641+
let stmt = Arc::new(stmt);
642642
Self {
643643
conn,
644644
stmt,
@@ -659,17 +659,16 @@ impl Statement {
659659
let total_changes_before = self.conn.total_changes();
660660
let start = std::time::Instant::now();
661661

662-
let mut stmt = self.stmt.lock().await;
663-
let params = map_params(&stmt, params)?;
664-
stmt.run(params).await.map_err(Error::from)?;
662+
let params = map_params(&self.stmt, params)?;
663+
self.stmt.run(params).await.map_err(Error::from)?;
665664
let changes = if self.conn.total_changes() == total_changes_before {
666665
0
667666
} else {
668667
self.conn.changes()
669668
};
670669
let last_insert_row_id = self.conn.last_insert_rowid();
671670
let duration = start.elapsed().as_secs_f64();
672-
stmt.reset();
671+
self.stmt.reset();
673672
Ok(RunResult {
674673
changes: changes as f64,
675674
duration,
@@ -699,9 +698,8 @@ impl Statement {
699698
None
700699
};
701700
rt.block_on(async move {
702-
let mut stmt = self.stmt.lock().await;
703-
let params = map_params(&stmt, params)?;
704-
let mut rows = stmt.query(params).await.map_err(Error::from)?;
701+
let params = map_params(&self.stmt, params)?;
702+
let mut rows = self.stmt.query(params).await.map_err(Error::from)?;
705703
let row = rows.next().await.map_err(Error::from)?;
706704
let duration: Option<f64> = start.map(|start| start.elapsed().as_secs_f64());
707705
let result = Self::get_internal(
@@ -713,7 +711,7 @@ impl Statement {
713711
pluck,
714712
duration,
715713
);
716-
stmt.reset();
714+
self.stmt.reset();
717715
result
718716
})
719717
}
@@ -768,14 +766,13 @@ impl Statement {
768766
let params = {
769767
let stmt = stmt.clone();
770768
rt.block_on(async move {
771-
let mut stmt = stmt.lock().await;
772769
stmt.reset();
773770
map_params(&stmt, params).unwrap()
774771
})
775772
};
776773
let stmt = self.stmt.clone();
777774
let future = async move {
778-
let rows = stmt.lock().await.query(params).await.map_err(Error::from)?;
775+
let rows = stmt.query(params).await.map_err(Error::from)?;
779776
Ok::<_, napi::Error>(rows)
780777
};
781778
let column_names = self.column_names.clone();
@@ -792,11 +789,7 @@ impl Statement {
792789

793790
#[napi]
794791
pub fn raw(&self, raw: Option<bool>) -> Result<&Self> {
795-
let rt = runtime()?;
796-
let returns_data = rt.block_on(async move {
797-
let stmt = self.stmt.lock().await;
798-
!stmt.columns().is_empty()
799-
});
792+
let returns_data = !self.stmt.columns().is_empty();
800793
if !returns_data {
801794
return Err(napi::Error::from_reason(
802795
"The raw() method is only for statements that return data",
@@ -826,8 +819,7 @@ impl Statement {
826819
pub fn columns(&self, env: Env) -> Result<Array> {
827820
let rt = runtime()?;
828821
rt.block_on(async move {
829-
let stmt = self.stmt.lock().await;
830-
let columns = stmt.columns();
822+
let columns = self.stmt.columns();
831823
let mut js_array = env.create_array(columns.len() as u32)?;
832824
for (i, col) in columns.iter().enumerate() {
833825
let mut js_obj = env.create_object()?;
@@ -872,12 +864,7 @@ impl Statement {
872864

873865
#[napi]
874866
pub fn interrupt(&self) -> Result<()> {
875-
let rt = runtime()?;
876-
rt.block_on(async move {
877-
let mut stmt = self.stmt.lock().await;
878-
stmt.interrupt()
879-
})
880-
.map_err(Error::from)?;
867+
self.stmt.interrupt().map_err(Error::from)?;
881868
Ok(())
882869
}
883870
}
@@ -894,7 +881,6 @@ pub fn statement_iterate_sync(
894881
let pluck = stmt.mode.pluck.load(Ordering::SeqCst);
895882
let stmt = stmt.stmt.clone();
896883
let (rows, column_names) = rt.block_on(async move {
897-
let mut stmt = stmt.lock().await;
898884
stmt.reset();
899885
let params = map_params(&stmt, params)?;
900886
let rows = stmt.query(params).await.map_err(Error::from)?;

0 commit comments

Comments
 (0)