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_when(
then_types: &[DataType],
else_type: &Option<DataType>,
) -> Option<DataType> {
let else_type = match else_type {
None => then_types[0].clone(),
Some(data_type) => data_type.clone(),
};
then_types
.iter()
.fold(Some(else_type), |left, right_type| match left {
None => None,
Some(left_type) => comparison_coercion(&left_type, right_type),
})
}