private String convertToTypeString()

in xtable-hive-metastore/src/main/java/org/apache/xtable/hms/HMSSchemaExtractor.java [62:142]


  private String convertToTypeString(InternalSchema fieldSchema) {
    switch (fieldSchema.getDataType()) {
      case BOOLEAN:
        return "boolean";
      case INT:
        return "int";
      case LONG:
        return "bigint";
      case FLOAT:
        return "float";
      case DOUBLE:
        return "double";
      case DATE:
        return "date";
      case ENUM:
      case STRING:
        return "string";
      case TIMESTAMP:
      case TIMESTAMP_NTZ:
        return "timestamp";
      case FIXED:
      case BYTES:
        return "binary";
      case DECIMAL:
        Map<InternalSchema.MetadataKey, Object> metadata = fieldSchema.getMetadata();
        if (metadata == null || metadata.isEmpty()) {
          throw new NotSupportedException("Invalid decimal type, precision and scale is missing");
        }
        int precision =
            (int)
                metadata.computeIfAbsent(
                    InternalSchema.MetadataKey.DECIMAL_PRECISION,
                    k -> {
                      throw new NotSupportedException("Invalid decimal type, precision is missing");
                    });
        int scale =
            (int)
                metadata.computeIfAbsent(
                    InternalSchema.MetadataKey.DECIMAL_SCALE,
                    k -> {
                      throw new NotSupportedException("Invalid decimal type, scale is missing");
                    });
        return String.format("decimal(%s,%s)", precision, scale);
      case RECORD:
        final String nameToType =
            fieldSchema.getFields().stream()
                .map(f -> String.format("%s:%s", f.getName(), convertToTypeString(f.getSchema())))
                .collect(Collectors.joining(","));
        return String.format("struct<%s>", nameToType);
      case LIST:
        InternalField arrayElement =
            fieldSchema.getFields().stream()
                .filter(
                    arrayField ->
                        InternalField.Constants.ARRAY_ELEMENT_FIELD_NAME.equals(
                            arrayField.getName()))
                .findFirst()
                .orElseThrow(() -> new SchemaExtractorException("Invalid array schema"));
        return String.format("array<%s>", convertToTypeString(arrayElement.getSchema()));
      case MAP:
        InternalField key =
            fieldSchema.getFields().stream()
                .filter(
                    mapField ->
                        InternalField.Constants.MAP_KEY_FIELD_NAME.equals(mapField.getName()))
                .findFirst()
                .orElseThrow(() -> new SchemaExtractorException("Invalid map schema"));
        InternalField value =
            fieldSchema.getFields().stream()
                .filter(
                    mapField ->
                        InternalField.Constants.MAP_VALUE_FIELD_NAME.equals(mapField.getName()))
                .findFirst()
                .orElseThrow(() -> new SchemaExtractorException("Invalid map schema"));
        return String.format(
            "map<%s,%s>",
            convertToTypeString(key.getSchema()), convertToTypeString(value.getSchema()));
      default:
        throw new NotSupportedException("Unsupported type: " + fieldSchema.getDataType());
    }
  }