| 277 | }; |
| 278 | |
| 279 | Status MakeConverter(const std::shared_ptr<DataType>& out_type, MemoryPool* pool, |
| 280 | std::shared_ptr<Converter>* out) { |
| 281 | switch (out_type->id()) { |
| 282 | #define CONVERTER_CASE(TYPE_ID, CONVERTER_TYPE) \ |
| 283 | case TYPE_ID: \ |
| 284 | *out = std::make_shared<CONVERTER_TYPE>(pool, out_type); \ |
| 285 | break |
| 286 | CONVERTER_CASE(Type::NA, NullConverter); |
| 287 | CONVERTER_CASE(Type::BOOL, BooleanConverter); |
| 288 | CONVERTER_CASE(Type::INT8, NumericConverter<Int8Type>); |
| 289 | CONVERTER_CASE(Type::INT16, NumericConverter<Int16Type>); |
| 290 | CONVERTER_CASE(Type::INT32, NumericConverter<Int32Type>); |
| 291 | CONVERTER_CASE(Type::INT64, NumericConverter<Int64Type>); |
| 292 | CONVERTER_CASE(Type::UINT8, NumericConverter<UInt8Type>); |
| 293 | CONVERTER_CASE(Type::UINT16, NumericConverter<UInt16Type>); |
| 294 | CONVERTER_CASE(Type::UINT32, NumericConverter<UInt32Type>); |
| 295 | CONVERTER_CASE(Type::UINT64, NumericConverter<UInt64Type>); |
| 296 | CONVERTER_CASE(Type::FLOAT, NumericConverter<FloatType>); |
| 297 | CONVERTER_CASE(Type::DOUBLE, NumericConverter<DoubleType>); |
| 298 | CONVERTER_CASE(Type::TIMESTAMP, NumericConverter<TimestampType>); |
| 299 | CONVERTER_CASE(Type::TIME32, DateTimeConverter<Time32Type>); |
| 300 | CONVERTER_CASE(Type::TIME64, DateTimeConverter<Time64Type>); |
| 301 | CONVERTER_CASE(Type::DATE32, DateTimeConverter<Date32Type>); |
| 302 | CONVERTER_CASE(Type::DATE64, DateTimeConverter<Date64Type>); |
| 303 | CONVERTER_CASE(Type::BINARY, BinaryConverter<BinaryType>); |
| 304 | CONVERTER_CASE(Type::STRING, BinaryConverter<StringType>); |
| 305 | CONVERTER_CASE(Type::LARGE_BINARY, BinaryConverter<LargeBinaryType>); |
| 306 | CONVERTER_CASE(Type::LARGE_STRING, BinaryConverter<LargeStringType>); |
| 307 | CONVERTER_CASE(Type::BINARY_VIEW, BinaryConverter<BinaryViewType>); |
| 308 | CONVERTER_CASE(Type::STRING_VIEW, BinaryConverter<StringViewType>); |
| 309 | CONVERTER_CASE(Type::DECIMAL32, DecimalConverter<Decimal32Type>); |
| 310 | CONVERTER_CASE(Type::DECIMAL64, DecimalConverter<Decimal64Type>); |
| 311 | CONVERTER_CASE(Type::DECIMAL128, DecimalConverter<Decimal128Type>); |
| 312 | CONVERTER_CASE(Type::DECIMAL256, DecimalConverter<Decimal256Type>); |
| 313 | default: |
| 314 | return Status::NotImplemented("JSON conversion to ", *out_type, |
| 315 | " is not supported"); |
| 316 | #undef CONVERTER_CASE |
| 317 | } |
| 318 | return Status::OK(); |
| 319 | } |
| 320 | |
| 321 | const PromotionGraph* GetPromotionGraph() { |
| 322 | static struct : PromotionGraph { |