private static RelDataType toRelDataType()

in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/geoparquet/GeoParquetTypeConversion.java [101:140]


  private static RelDataType toRelDataType(RelDataTypeFactory typeFactory,
      org.apache.parquet.schema.Type field) {
    if (field.isPrimitive()) {
      PrimitiveType primitiveType = field.asPrimitiveType();
      PrimitiveType.PrimitiveTypeName typeName = primitiveType.getPrimitiveTypeName();

      if (typeName == PrimitiveType.PrimitiveTypeName.BOOLEAN) {
        return typeFactory.createSqlType(SqlTypeName.BOOLEAN);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.INT32) {
        return typeFactory.createSqlType(SqlTypeName.INTEGER);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.INT64) {
        return typeFactory.createSqlType(SqlTypeName.BIGINT);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.FLOAT) {
        return typeFactory.createSqlType(SqlTypeName.FLOAT);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.DOUBLE) {
        return typeFactory.createSqlType(SqlTypeName.DOUBLE);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.BINARY) {
        if (field.getName().equals("geometry")) {
          return typeFactory.createJavaType(Geometry.class);
        }
        return typeFactory.createSqlType(SqlTypeName.VARBINARY);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.FIXED_LEN_BYTE_ARRAY) {
        return typeFactory.createSqlType(SqlTypeName.VARBINARY);
      } else if (typeName == PrimitiveType.PrimitiveTypeName.INT96) {
        return typeFactory.createSqlType(SqlTypeName.VARBINARY);
      } else {
        throw new IllegalArgumentException(
            "Unsupported Parquet type: " + typeName);
      }
    } else {
      // For group types, we'll create a struct type
      return typeFactory.createStructType(
          field.asGroupType().getFields().stream()
              .map(f -> toRelDataType(typeFactory, f))
              .toList(),
          field.asGroupType().getFields().stream()
              .map(org.apache.parquet.schema.Type::getName)
              .toList());
    }
  }