Skip to content

Commit 7d95367

Browse files
committed
HACK
1 parent 8206d4b commit 7d95367

1 file changed

Lines changed: 26 additions & 16 deletions

File tree

src/lib.rs

Lines changed: 26 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,10 @@ impl Statement {
600600
env.execute_tokio_future(future, move |&mut _env, result| {
601601
let mut column_names = vec![];
602602
for i in 0..result.column_count() {
603-
column_names.push(result.column_name(i).unwrap().to_string());
603+
let column_name = result.column_name(i).unwrap();
604+
let column_name = env.create_string(column_name)?;
605+
let column_name = env.create_reference(column_name)?;
606+
column_names.push(column_name);
604607
}
605608
let iter = RowsIterator::new(
606609
Arc::new(tokio::sync::Mutex::new(result)),
@@ -634,7 +637,10 @@ impl Statement {
634637
let rows = stmt.query(params).await.map_err(Error::from)?;
635638
let mut column_names = vec![];
636639
for i in 0..rows.column_count() {
637-
column_names.push(rows.column_name(i).unwrap().to_string());
640+
let column_name = rows.column_name(i).unwrap();
641+
let column_name = env.create_string(column_name)?;
642+
let column_name = env.create_reference(column_name)?;
643+
column_names.push(column_name);
638644
}
639645
Ok::<_, napi::Error>((rows, column_names))
640646
};
@@ -725,8 +731,12 @@ impl Statement {
725731
let mut rows = stmt.query(params).await.map_err(Error::from)?;
726732
let mut column_names = vec![];
727733
for i in 0..rows.column_count() {
728-
column_names.push(rows.column_name(i).unwrap().to_string());
734+
let column_name = rows.column_name(i).unwrap();
735+
let column_name = env.create_string(column_name)?;
736+
let column_name = env.create_reference(column_name)?;
737+
column_names.push(column_name);
729738
}
739+
let column_names = Arc::new(column_names);
730740
let row = rows.next().await.map_err(Error::from)?;
731741
let duration = start.elapsed().as_secs_f64();
732742
let result = match row {
@@ -776,7 +786,7 @@ impl Statement {
776786
#[napi]
777787
pub struct RowsIterator {
778788
rows: Arc<tokio::sync::Mutex<libsql::Rows>>,
779-
column_names: Vec<String>,
789+
column_names: Arc<Vec<napi::Ref<()>>>,
780790
safe_ints: bool,
781791
raw: bool,
782792
pluck: bool,
@@ -786,14 +796,14 @@ pub struct RowsIterator {
786796
impl RowsIterator {
787797
pub fn new(
788798
rows: Arc<tokio::sync::Mutex<libsql::Rows>>,
789-
column_names: Vec<String>,
799+
column_names: Vec<napi::Ref<()>>,
790800
safe_ints: bool,
791801
raw: bool,
792802
pluck: bool,
793803
) -> Result<Self> {
794804
let iter = RowsIterator {
795805
rows,
796-
column_names,
806+
column_names: Arc::new(column_names),
797807
safe_ints,
798808
raw,
799809
pluck,
@@ -805,19 +815,20 @@ impl RowsIterator {
805815
pub fn next(&self, env: Env) -> Result<Record> {
806816
let rt = runtime()?;
807817
let rows = self.rows.clone();
818+
let column_names = self.column_names.clone();
808819
rt.block_on(async move {
809820
let mut rows = rows.lock().await;
810821
let next_row = rows.next().await.map_err(Error::from)?;
811822
let record = match next_row {
812823
Some(row) => Record {
813-
column_names: self.column_names.clone(),
824+
column_names: column_names,
814825
row: Some(row),
815826
safe_ints: self.safe_ints,
816827
raw: self.raw,
817828
pluck: self.pluck,
818829
},
819830
None => Record {
820-
column_names: self.column_names.clone(),
831+
column_names: column_names,
821832
row: None,
822833
safe_ints: self.safe_ints,
823834
raw: self.raw,
@@ -831,7 +842,7 @@ impl RowsIterator {
831842

832843
#[napi]
833844
pub struct Record {
834-
column_names: Vec<String>,
845+
column_names: Arc<Vec<napi::Ref<()>>>,
835846
row: Option<libsql::Row>,
836847
safe_ints: bool,
837848
raw: bool,
@@ -864,7 +875,7 @@ fn runtime() -> Result<&'static Runtime> {
864875

865876
fn map_row(
866877
env: &Env,
867-
column_names: &[String],
878+
column_names: &Arc<Vec<napi::Ref<()>>>,
868879
row: &libsql::Row,
869880
safe_ints: bool,
870881
raw: bool,
@@ -873,7 +884,7 @@ fn map_row(
873884
let result = if raw {
874885
map_row_raw(env, column_names, row, safe_ints, pluck)?
875886
} else {
876-
map_row_object(env, column_names, row, safe_ints, pluck)?.into_unknown()
887+
map_row_object(env, column_names, row, safe_ints, pluck)?
877888
};
878889
Ok(result)
879890
}
@@ -900,7 +911,7 @@ fn convert_value_to_js(
900911

901912
fn map_row_object(
902913
env: &Env,
903-
column_names: &[String],
914+
column_names: &Arc<Vec<napi::Ref<()>>>,
904915
row: &libsql::Row,
905916
safe_ints: bool,
906917
pluck: bool,
@@ -925,10 +936,9 @@ fn map_row_object(
925936
Ok(v) => v,
926937
Err(e) => return Err(napi::Error::from_reason(e.to_string())),
927938
};
928-
929-
let column_name = column_names[idx].as_str();
939+
let column_name: JsString = env.get_reference_value(&column_names[idx])?;
930940
let js_value = convert_value_to_js(env, &value, safe_ints)?;
931-
result.set_named_property(column_name, js_value)?;
941+
result.set_property(column_name, js_value)?;
932942
}
933943
result.into_unknown()
934944
};
@@ -937,7 +947,7 @@ fn map_row_object(
937947

938948
fn map_row_raw(
939949
env: &Env,
940-
column_names: &[String],
950+
column_names: &Arc<Vec<napi::Ref<()>>>,
941951
row: &libsql::Row,
942952
safe_ints: bool,
943953
pluck: bool,

0 commit comments

Comments
 (0)