@@ -43,6 +43,7 @@ use crate::types::BooleanType;
4343use  crate :: types:: DataType ; 
4444use  crate :: types:: NullableType ; 
4545use  crate :: types:: NumberScalar ; 
46+ use  crate :: types:: StringType ; 
4647use  crate :: types:: VariantType ; 
4748use  crate :: values:: Column ; 
4849use  crate :: values:: ColumnBuilder ; 
@@ -640,7 +641,7 @@ impl<'a> Evaluator<'a> {
640641 ] ) ) ) ) 
641642 } 
642643 Value :: Column ( Column :: Variant ( col) )  => { 
643-  let  mut  key_builder = StringColumnBuilder :: with_capacity ( 0 ,   0 ) ; 
644+  let  mut  key_builder = StringType :: create_builder ( col . len ( ) ,   & [ ] ) ; 
644645 let  mut  value_builder =
645646 ArrayType :: < VariantType > :: create_builder ( col. len ( ) ,  & [ ] ) ; 
646647
@@ -662,38 +663,32 @@ impl<'a> Evaluator<'a> {
662663 v. write_to_vec ( & mut  value_builder. builder . data ) ; 
663664 value_builder. builder . commit_row ( ) ; 
664665 } 
666+ 
665667 value_builder. commit_row ( ) ; 
666668 } 
667-  let  key_column = Column :: String ( key_builder. build ( ) ) ; 
668669
669-  let  value_column = value_builder. build ( ) ; 
670-  let  validity = validity. map ( |validity| { 
671-  let  mut  inner_validity = MutableBitmap :: with_capacity ( col. len ( ) ) ; 
672-  for  ( index,  offsets)  in  value_column. offsets . windows ( 2 ) . enumerate ( )  { 
673-  inner_validity. extend_constant ( 
674-  ( offsets[ 1 ]  - offsets[ 0 ] )  as  usize , 
675-  validity. get_bit ( index) , 
676-  ) ; 
677-  } 
678-  inner_validity. into ( ) 
679-  } ) ; 
670+  let  key_col = Column :: String ( key_builder. build ( ) ) ; 
671+  let  value_col = Column :: Array ( Box :: new ( value_builder. build ( ) . upcast ( ) ) ) ; 
680672
681-  let  new_value_column  = self 
673+  let  value_col  = self 
682674 . run_cast ( 
683675 span, 
684-  & DataType :: Variant , 
676+  & DataType :: Array ( Box :: new ( DataType :: Variant ) ) , 
685677 & fields_dest_ty[ 1 ] , 
686-  Value :: Column ( Column :: Variant ( value_column . values ) ) , 
678+  Value :: Column ( value_col ) , 
687679 validity, 
688680 options, 
689681 ) ?
690682 . into_column ( ) 
683+  . unwrap ( ) 
684+  . into_array ( ) 
691685 . unwrap ( ) ; 
692686
693-  let  kv_column = Column :: Tuple ( vec ! [ key_column,  new_value_column] ) ; 
687+  let  kv_col = Column :: Tuple ( vec ! [ key_col,  value_col. values] ) ; 
688+ 
694689 Ok ( Value :: Column ( Column :: Map ( Box :: new ( ArrayColumn  { 
695-  values :  kv_column , 
696-  offsets :  col . offsets , 
690+  values :  kv_col , 
691+  offsets :  value_col . offsets , 
697692 } ) ) ) ) 
698693 } 
699694 other => unreachable ! ( "source: {}" ,  other) , 
0 commit comments