| 460 | // Static methods for LogicalType class |
| 461 | |
| 462 | std::shared_ptr<const LogicalType> LogicalType::FromConvertedType( |
| 463 | const ConvertedType::type converted_type, |
| 464 | const schema::DecimalMetadata converted_decimal_metadata) { |
| 465 | switch (converted_type) { |
| 466 | case ConvertedType::UTF8: |
| 467 | return StringLogicalType::Make(); |
| 468 | case ConvertedType::MAP_KEY_VALUE: |
| 469 | case ConvertedType::MAP: |
| 470 | return MapLogicalType::Make(); |
| 471 | case ConvertedType::LIST: |
| 472 | return ListLogicalType::Make(); |
| 473 | case ConvertedType::ENUM: |
| 474 | return EnumLogicalType::Make(); |
| 475 | case ConvertedType::DECIMAL: |
| 476 | return DecimalLogicalType::Make(converted_decimal_metadata.precision, |
| 477 | converted_decimal_metadata.scale); |
| 478 | case ConvertedType::DATE: |
| 479 | return DateLogicalType::Make(); |
| 480 | case ConvertedType::TIME_MILLIS: |
| 481 | // ConvertedType::TIME_{*} are deprecated in favor of LogicalType::Time, the |
| 482 | // compatibility for ConvertedType::TIME_{*} are listed in |
| 483 | // https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#deprecated-time-convertedtype |
| 484 | return TimeLogicalType::Make(/*is_adjusted_to_utc=*/true, |
| 485 | LogicalType::TimeUnit::MILLIS); |
| 486 | case ConvertedType::TIME_MICROS: |
| 487 | return TimeLogicalType::Make(/*is_adjusted_to_utc=*/true, |
| 488 | LogicalType::TimeUnit::MICROS); |
| 489 | case ConvertedType::TIMESTAMP_MILLIS: |
| 490 | // ConvertedType::TIMESTAMP_{*} are deprecated in favor of LogicalType::Timestamp, |
| 491 | // the compatibility for ConvertedType::TIMESTAMP_{*} are listed in |
| 492 | // https://github.com/apache/parquet-format/blob/master/LogicalTypes.md#deprecated-timestamp-convertedtype |
| 493 | return TimestampLogicalType::Make(/*is_adjusted_to_utc=*/true, |
| 494 | LogicalType::TimeUnit::MILLIS, |
| 495 | /*is_from_converted_type=*/true, |
| 496 | /*force_set_converted_type=*/false); |
| 497 | case ConvertedType::TIMESTAMP_MICROS: |
| 498 | return TimestampLogicalType::Make(/*is_adjusted_to_utc=*/true, |
| 499 | LogicalType::TimeUnit::MICROS, |
| 500 | /*is_from_converted_type=*/true, |
| 501 | /*force_set_converted_type=*/false); |
| 502 | case ConvertedType::INTERVAL: |
| 503 | return IntervalLogicalType::Make(); |
| 504 | case ConvertedType::INT_8: |
| 505 | return IntLogicalType::Make(8, true); |
| 506 | case ConvertedType::INT_16: |
| 507 | return IntLogicalType::Make(16, true); |
| 508 | case ConvertedType::INT_32: |
| 509 | return IntLogicalType::Make(32, true); |
| 510 | case ConvertedType::INT_64: |
| 511 | return IntLogicalType::Make(64, true); |
| 512 | case ConvertedType::UINT_8: |
| 513 | return IntLogicalType::Make(8, false); |
| 514 | case ConvertedType::UINT_16: |
| 515 | return IntLogicalType::Make(16, false); |
| 516 | case ConvertedType::UINT_32: |
| 517 | return IntLogicalType::Make(32, false); |
| 518 | case ConvertedType::UINT_64: |
| 519 | return IntLogicalType::Make(64, false); |