private Type toGravitino()

in catalogs/hive-metastore-common/src/main/java/org/apache/gravitino/hive/converter/HiveDataTypeConverter.java [141:216]


  private Type toGravitino(TypeInfo hiveTypeInfo) {
    switch (hiveTypeInfo.getCategory()) {
      case PRIMITIVE:
        switch (hiveTypeInfo.getTypeName()) {
          case BOOLEAN_TYPE_NAME:
            return Types.BooleanType.get();
          case TINYINT_TYPE_NAME:
            return Types.ByteType.get();
          case SMALLINT_TYPE_NAME:
            return Types.ShortType.get();
          case INT_TYPE_NAME:
            return Types.IntegerType.get();
          case BIGINT_TYPE_NAME:
            return Types.LongType.get();
          case FLOAT_TYPE_NAME:
            return Types.FloatType.get();
          case DOUBLE_TYPE_NAME:
            return Types.DoubleType.get();
          case STRING_TYPE_NAME:
            return Types.StringType.get();
          case DATE_TYPE_NAME:
            return Types.DateType.get();
          case TIMESTAMP_TYPE_NAME:
            return Types.TimestampType.withoutTimeZone();
          case BINARY_TYPE_NAME:
            return Types.BinaryType.get();
          case INTERVAL_YEAR_MONTH_TYPE_NAME:
            return Types.IntervalYearType.get();
          case INTERVAL_DAY_TIME_TYPE_NAME:
            return Types.IntervalDayType.get();
          default:
            if (hiveTypeInfo instanceof CharTypeInfo) {
              return Types.FixedCharType.of(((CharTypeInfo) hiveTypeInfo).getLength());
            }

            if (hiveTypeInfo instanceof VarcharTypeInfo) {
              return Types.VarCharType.of(((VarcharTypeInfo) hiveTypeInfo).getLength());
            }

            if (hiveTypeInfo instanceof DecimalTypeInfo) {
              DecimalTypeInfo decimalTypeInfo = (DecimalTypeInfo) hiveTypeInfo;
              return Types.DecimalType.of(decimalTypeInfo.precision(), decimalTypeInfo.scale());
            }

            return Types.ExternalType.of(hiveTypeInfo.getQualifiedName());
        }
      case LIST:
        return Types.ListType.nullable(
            toGravitino(((ListTypeInfo) hiveTypeInfo).getListElementTypeInfo()));
      case MAP:
        MapTypeInfo mapTypeInfo = (MapTypeInfo) hiveTypeInfo;
        return Types.MapType.valueNullable(
            toGravitino(mapTypeInfo.getMapKeyTypeInfo()),
            toGravitino(mapTypeInfo.getMapValueTypeInfo()));
      case STRUCT:
        StructTypeInfo structTypeInfo = (StructTypeInfo) hiveTypeInfo;
        ArrayList<String> fieldNames = structTypeInfo.getAllStructFieldNames();
        ArrayList<TypeInfo> typeInfos = structTypeInfo.getAllStructFieldTypeInfos();
        Types.StructType.Field[] fields =
            IntStream.range(0, fieldNames.size())
                .mapToObj(
                    i ->
                        Types.StructType.Field.nullableField(
                            fieldNames.get(i), toGravitino(typeInfos.get(i))))
                .toArray(Types.StructType.Field[]::new);
        return Types.StructType.of(fields);
      case UNION:
        UnionTypeInfo unionTypeInfo = (UnionTypeInfo) hiveTypeInfo;
        return Types.UnionType.of(
            unionTypeInfo.getAllUnionObjectTypeInfos().stream()
                .map(this::toGravitino)
                .toArray(Type[]::new));
      default:
        return Types.ExternalType.of(hiveTypeInfo.getQualifiedName());
    }
  }