use arrow::datatypes::DataType;
use super::binary::comparison_coercion;
pub fn get_coerce_type_for_list(
expr_type: &DataType,
list_types: &[DataType],
) -> Option<DataType> {
list_types
.iter()
.fold(Some(expr_type.clone()), |left, right_type| match left {
None => None,
Some(left_type) => comparison_coercion(&left_type, right_type),
})
}
pub fn get_coerce_type_for_case_expression(
when_or_then_types: &[DataType],
case_or_else_type: Option<&DataType>,
) -> Option<DataType> {
let case_or_else_type = match case_or_else_type {
None => when_or_then_types[0].clone(),
Some(data_type) => data_type.clone(),
};
when_or_then_types
.iter()
.fold(Some(case_or_else_type), |left, right_type| match left {
None => None,
Some(left_type) => comparison_coercion(&left_type, right_type),
})
}