@@ -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]
777787pub 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 {
786796impl 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]
833844pub 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
865876fn 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
901912fn 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
938948fn 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