in baremaps-calcite/src/main/java/org/apache/baremaps/calcite/geoparquet/GeoParquetTypeConversion.java [65:99]
private static RelDataType toRelDataTypeFromField(RelDataTypeFactory typeFactory, Field field) {
Type type = field.type();
if (type == Type.BINARY) {
return typeFactory.createSqlType(SqlTypeName.VARBINARY);
} else if (type == Type.BOOLEAN) {
return typeFactory.createSqlType(SqlTypeName.BOOLEAN);
} else if (type == Type.INTEGER) {
return typeFactory.createSqlType(SqlTypeName.INTEGER);
} else if (type == Type.FLOAT) {
return typeFactory.createSqlType(SqlTypeName.FLOAT);
} else if (type == Type.DOUBLE) {
return typeFactory.createSqlType(SqlTypeName.DOUBLE);
} else if (type == Type.STRING) {
return typeFactory.createSqlType(SqlTypeName.VARCHAR);
} else if (type == Type.GEOMETRY) {
return typeFactory.createJavaType(Geometry.class);
} else if (type == Type.ENVELOPE) {
return typeFactory.createJavaType(Geometry.class);
} else if (type == Type.LONG || type == Type.INT96) {
return typeFactory.createSqlType(SqlTypeName.BIGINT);
} else if (type == Type.GROUP) {
var groupField = (GroupField) field;
var fields = groupField.schema().fields();
var types = fields.stream()
.map(f -> toRelDataTypeFromField(typeFactory, f))
.collect(Collectors.toList());
var names = fields.stream()
.map(Field::name)
.collect(Collectors.toList());
return typeFactory.createStructType(types, names);
} else {
throw new IllegalStateException("Unexpected value: " + type);
}
}