@@ -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