Skip to content

Commit eb28e8b

Browse files
committed
improve get
1 parent 46a9a87 commit eb28e8b

File tree

1 file changed

+7
-15
lines changed

1 file changed

+7
-15
lines changed

src/lib.rs

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ pub fn database_prepare_sync(db: &Database, sql: String) -> Result<Statement> {
512512
pub struct Statement {
513513
stmt: Arc<tokio::sync::Mutex<libsql::Statement>>,
514514
conn: Arc<tokio::sync::Mutex<libsql::Connection>>,
515+
column_names: Vec<std::ffi::CString>,
515516
safe_ints: AtomicBool,
516517
raw: AtomicBool,
517518
pluck: AtomicBool,
@@ -526,9 +527,13 @@ impl Statement {
526527
raw: bool,
527528
pluck: bool,
528529
) -> Self {
530+
let column_names: Vec<std::ffi::CString> = stmt.columns().iter().map(|c| {
531+
std::ffi::CString::new(c.name().to_string()).unwrap()
532+
}).collect();
529533
Self {
530534
stmt: Arc::new(tokio::sync::Mutex::new(stmt)),
531535
conn,
536+
column_names,
532537
safe_ints: AtomicBool::new(safe_ints),
533538
raw: AtomicBool::new(raw),
534539
pluck: AtomicBool::new(pluck),
@@ -575,13 +580,12 @@ impl Statement {
575580
let mut stmt = self.stmt.lock().await;
576581
let params = map_params(&stmt, params)?;
577582
let mut rows = stmt.query(params).await.map_err(Error::from)?;
578-
let column_names = Self::get_column_names(&rows)?;
579583
let row = rows.next().await.map_err(Error::from)?;
580584
let duration = start.elapsed().as_secs_f64();
581585
let result = Self::get_internal(
582586
&env,
583587
&row,
584-
&column_names,
588+
&self.column_names,
585589
safe_ints,
586590
raw,
587591
pluck,
@@ -644,8 +648,8 @@ impl Statement {
644648
let rows = stmt.lock().await.query(params).await.map_err(Error::from)?;
645649
Ok::<_, napi::Error>(rows)
646650
};
651+
let column_names = self.column_names.clone();
647652
env.execute_tokio_future(future, move |&mut _env, result| {
648-
let column_names = Self::get_column_names(&result)?;
649653
Ok(RowsIterator::new(
650654
Arc::new(tokio::sync::Mutex::new(result)),
651655
column_names,
@@ -764,18 +768,6 @@ impl Statement {
764768
.map_err(Error::from)?;
765769
Ok(())
766770
}
767-
768-
fn get_column_names(rows: &libsql::Rows) -> Result<Vec<std::ffi::CString>> {
769-
let mut column_names = Vec::new();
770-
for i in 0..rows.column_count() {
771-
let column_name = match rows.column_name(i) {
772-
Some(name) => name.to_string(),
773-
None => return Err(napi::Error::from_reason("Failed to get column name")),
774-
};
775-
column_names.push(std::ffi::CString::new(column_name).unwrap());
776-
}
777-
Ok(column_names)
778-
}
779771
}
780772

781773
/// SQLite `run()` result object

0 commit comments

Comments
 (0)