@@ -40,8 +40,8 @@ use crate::variation_const::{
4040 DATE_32_TYPE_VARIATION_REF , DATE_64_TYPE_VARIATION_REF ,
4141 DECIMAL_128_TYPE_VARIATION_REF , DECIMAL_256_TYPE_VARIATION_REF ,
4242 DEFAULT_CONTAINER_TYPE_VARIATION_REF , DEFAULT_TYPE_VARIATION_REF ,
43- LARGE_CONTAINER_TYPE_VARIATION_REF , UNSIGNED_INTEGER_TYPE_VARIATION_REF ,
44- VIEW_CONTAINER_TYPE_VARIATION_REF ,
43+ DICTIONARY_TYPE_VARIATION_REF , LARGE_CONTAINER_TYPE_VARIATION_REF ,
44+ UNSIGNED_INTEGER_TYPE_VARIATION_REF , VIEW_CONTAINER_TYPE_VARIATION_REF ,
4545} ;
4646use datafusion:: arrow:: array:: { Array , GenericListArray , OffsetSizeTrait } ;
4747use datafusion:: arrow:: temporal_conversions:: NANOSECONDS ;
@@ -1996,6 +1996,18 @@ fn to_substrait_type(dt: &DataType, nullable: bool) -> Result<substrait::proto::
19961996 precision : * p as i32 ,
19971997 } ) ) ,
19981998 } ) ,
1999+ DataType :: Dictionary ( k, v) => {
2000+ let key_type = to_substrait_type ( k, true ) ?;
2001+ let value_type = to_substrait_type ( v, true ) ?;
2002+ Ok ( substrait:: proto:: Type {
2003+ kind : Some ( r#type:: Kind :: Map ( Box :: new ( r#type:: Map {
2004+ key : Some ( Box :: new ( key_type) ) ,
2005+ value : Some ( Box :: new ( value_type) ) ,
2006+ type_variation_reference : DICTIONARY_TYPE_VARIATION_REF ,
2007+ nullability,
2008+ } ) ) ) ,
2009+ } )
2010+ }
19992011 _ => not_impl_err ! ( "Unsupported cast type: {dt:?}" ) ,
20002012 }
20012013}
0 commit comments