public static DataType visit()

in catalogs/catalog-lakehouse-paimon/src/main/java/org/apache/gravitino/catalog/lakehouse/paimon/utils/TypeUtils.java [210:270]


    public static DataType visit(Type type) {
      switch (type.name()) {
        case BOOLEAN:
          return DataTypes.BOOLEAN();
        case BYTE:
          return DataTypes.TINYINT();
        case SHORT:
          return DataTypes.SMALLINT();
        case INTEGER:
          return DataTypes.INT();
        case LONG:
          return DataTypes.BIGINT();
        case FLOAT:
          return DataTypes.FLOAT();
        case DOUBLE:
          return DataTypes.DOUBLE();
        case DECIMAL:
          Types.DecimalType decimalType = (Types.DecimalType) type;
          return DataTypes.DECIMAL(decimalType.precision(), decimalType.scale());
        case DATE:
          return DataTypes.DATE();
        case TIME:
          return DataTypes.TIME();
        case TIMESTAMP:
          return ((Types.TimestampType) type).hasTimeZone()
              ? DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE()
              : DataTypes.TIMESTAMP();
        case STRING:
          return DataTypes.STRING();
        case VARCHAR:
          return DataTypes.VARCHAR(((Types.VarCharType) type).length());
        case FIXEDCHAR:
          return DataTypes.CHAR(((Types.FixedCharType) type).length());
        case FIXED:
          Types.FixedType fixedType = (Types.FixedType) type;
          return DataTypes.BINARY(fixedType.length());
        case BINARY:
          return DataTypes.VARBINARY(VarBinaryType.MAX_LENGTH);
        case LIST:
          Types.ListType listType = (Types.ListType) type;
          return DataTypes.ARRAY(visit(listType.elementType()));
        case MAP:
          Types.MapType mapType = (Types.MapType) type;
          return DataTypes.MAP(visit(mapType.keyType()), visit(mapType.valueType()));
        case STRUCT:
          RowType.Builder builder = RowType.builder();
          Arrays.stream(((Types.StructType) type).fields())
              .forEach(
                  field -> {
                    DataType dataType = GravitinoToPaimonTypeVisitor.visit(field.type());
                    DataType dataTypeWithNullable =
                        field.nullable() ? dataType.nullable() : dataType.notNull();
                    builder.field(field.name(), dataTypeWithNullable, field.comment());
                  });
          return builder.build();
        default:
          throw new UnsupportedOperationException(
              String.format(
                  "Paimon does not support Gravitino %s data type.", type.simpleString()));
      }
    }