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());
}
}