in gandiva/src/main/cpp/expression_registry_helper.cc [44:143]
void ArrowToProtobuf(DataTypePtr type, gandiva::types::ExtGandivaType* gandiva_data_type) {
switch (type->id()) {
case arrow::Type::BOOL:
gandiva_data_type->set_type(gandiva::types::GandivaType::BOOL);
break;
case arrow::Type::UINT8:
gandiva_data_type->set_type(gandiva::types::GandivaType::UINT8);
break;
case arrow::Type::INT8:
gandiva_data_type->set_type(gandiva::types::GandivaType::INT8);
break;
case arrow::Type::UINT16:
gandiva_data_type->set_type(gandiva::types::GandivaType::UINT16);
break;
case arrow::Type::INT16:
gandiva_data_type->set_type(gandiva::types::GandivaType::INT16);
break;
case arrow::Type::UINT32:
gandiva_data_type->set_type(gandiva::types::GandivaType::UINT32);
break;
case arrow::Type::INT32:
gandiva_data_type->set_type(gandiva::types::GandivaType::INT32);
break;
case arrow::Type::UINT64:
gandiva_data_type->set_type(gandiva::types::GandivaType::UINT64);
break;
case arrow::Type::INT64:
gandiva_data_type->set_type(gandiva::types::GandivaType::INT64);
break;
case arrow::Type::HALF_FLOAT:
gandiva_data_type->set_type(gandiva::types::GandivaType::HALF_FLOAT);
break;
case arrow::Type::FLOAT:
gandiva_data_type->set_type(gandiva::types::GandivaType::FLOAT);
break;
case arrow::Type::DOUBLE:
gandiva_data_type->set_type(gandiva::types::GandivaType::DOUBLE);
break;
case arrow::Type::STRING:
gandiva_data_type->set_type(gandiva::types::GandivaType::UTF8);
break;
case arrow::Type::BINARY:
gandiva_data_type->set_type(gandiva::types::GandivaType::BINARY);
break;
case arrow::Type::DATE32:
gandiva_data_type->set_type(gandiva::types::GandivaType::DATE32);
break;
case arrow::Type::DATE64:
gandiva_data_type->set_type(gandiva::types::GandivaType::DATE64);
break;
case arrow::Type::TIMESTAMP: {
gandiva_data_type->set_type(gandiva::types::GandivaType::TIMESTAMP);
std::shared_ptr<arrow::TimestampType> cast_time_stamp_type =
std::dynamic_pointer_cast<arrow::TimestampType>(type);
arrow::TimeUnit::type unit = cast_time_stamp_type->unit();
gandiva::types::TimeUnit time_unit = MapTimeUnit(unit);
gandiva_data_type->set_timeunit(time_unit);
break;
}
case arrow::Type::TIME32: {
gandiva_data_type->set_type(gandiva::types::GandivaType::TIME32);
std::shared_ptr<arrow::Time32Type> cast_time_32_type =
std::dynamic_pointer_cast<arrow::Time32Type>(type);
arrow::TimeUnit::type unit = cast_time_32_type->unit();
gandiva::types::TimeUnit time_unit = MapTimeUnit(unit);
gandiva_data_type->set_timeunit(time_unit);
break;
}
case arrow::Type::TIME64: {
gandiva_data_type->set_type(gandiva::types::GandivaType::TIME32);
std::shared_ptr<arrow::Time64Type> cast_time_64_type =
std::dynamic_pointer_cast<arrow::Time64Type>(type);
arrow::TimeUnit::type unit = cast_time_64_type->unit();
gandiva::types::TimeUnit time_unit = MapTimeUnit(unit);
gandiva_data_type->set_timeunit(time_unit);
break;
}
case arrow::Type::NA:
gandiva_data_type->set_type(gandiva::types::GandivaType::NONE);
break;
case arrow::Type::DECIMAL: {
gandiva_data_type->set_type(gandiva::types::GandivaType::DECIMAL);
gandiva_data_type->set_precision(0);
gandiva_data_type->set_scale(0);
break;
}
case arrow::Type::INTERVAL_MONTHS:
gandiva_data_type->set_type(gandiva::types::GandivaType::INTERVAL);
gandiva_data_type->set_intervaltype(gandiva::types::IntervalType::YEAR_MONTH);
break;
case arrow::Type::INTERVAL_DAY_TIME:
gandiva_data_type->set_type(gandiva::types::GandivaType::INTERVAL);
gandiva_data_type->set_intervaltype(gandiva::types::IntervalType::DAY_TIME);
break;
default:
// un-supported types. test ensures that
// when one of these are added build breaks.
ARROW_DCHECK(false);
}
}