void ArrowToProtobuf()

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);
  }
}