@@ -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,
@@ -831,7 +841,7 @@ impl RowsIterator {
831841
832842#[ napi]
833843pub struct Record {
834- column_names : Vec < String > ,
844+ column_names : Arc < Vec < napi :: Ref < ( ) > > > ,
835845 row : Option < libsql:: Row > ,
836846 safe_ints : bool ,
837847 raw : bool ,
@@ -864,7 +874,7 @@ fn runtime() -> Result<&'static Runtime> {
864874
865875fn map_row (
866876 env : & Env ,
867- column_names : & [ String ] ,
877+ column_names : & Arc < Vec < napi :: Ref < ( ) > > > ,
868878 row : & libsql:: Row ,
869879 safe_ints : bool ,
870880 raw : bool ,
@@ -900,7 +910,7 @@ fn convert_value_to_js(
900910
901911fn map_row_object (
902912 env : & Env ,
903- column_names : & [ String ] ,
913+ column_names : & Arc < Vec < napi :: Ref < ( ) > > > ,
904914 row : & libsql:: Row ,
905915 safe_ints : bool ,
906916 pluck : bool ,
@@ -925,10 +935,9 @@ fn map_row_object(
925935 Ok ( v) => v,
926936 Err ( e) => return Err ( napi:: Error :: from_reason ( e. to_string ( ) ) ) ,
927937 } ;
928-
929- let column_name = column_names[ idx] . as_str ( ) ;
938+ let column_name: JsString = env. get_reference_value ( & column_names[ idx] ) ?;
930939 let js_value = convert_value_to_js ( env, & value, safe_ints) ?;
931- result. set_named_property ( column_name, js_value) ?;
940+ result. set_property ( column_name, js_value) ?;
932941 }
933942 result. into_unknown ( )
934943 } ;
@@ -937,7 +946,7 @@ fn map_row_object(
937946
938947fn map_row_raw (
939948 env : & Env ,
940- column_names : & [ String ] ,
949+ column_names : & Arc < Vec < napi :: Ref < ( ) > > > ,
941950 row : & libsql:: Row ,
942951 safe_ints : bool ,
943952 pluck : bool ,
0 commit comments