Skip to content

Commit 90dba8f

Browse files
committed
feat: producer support dict type
Signed-off-by: Ruihang Xia <waynestxia@gmail.com>
1 parent 8ebed67 commit 90dba8f

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

datafusion/substrait/src/logical_plan/producer.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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
};
4646
use datafusion::arrow::array::{Array, GenericListArray, OffsetSizeTrait};
4747
use 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
}

datafusion/substrait/src/variation_const.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ pub const LARGE_CONTAINER_TYPE_VARIATION_REF: u32 = 1;
5555
pub const VIEW_CONTAINER_TYPE_VARIATION_REF: u32 = 2;
5656
pub const DECIMAL_128_TYPE_VARIATION_REF: u32 = 0;
5757
pub const DECIMAL_256_TYPE_VARIATION_REF: u32 = 1;
58+
pub const DICTIONARY_TYPE_VARIATION_REF: u32 = 1;
5859

5960
// For [user-defined types](https://substrait.io/types/type_classes/#user-defined-types).
6061
/// For [`DataType::Interval`] with [`IntervalUnit::YearMonth`].

0 commit comments

Comments
 (0)