Skip to content

Commit 18ed07e

Browse files
authored
Merge pull request #2190 from ClickHouse/row-binary-writer
RowBinary writer for ease of serialization
2 parents a7a1f99 + 8136f64 commit 18ed07e

File tree

4 files changed

+721
-3
lines changed

4 files changed

+721
-3
lines changed

client-v2/src/main/java/com/clickhouse/client/api/data_formats/RowBinaryFormatWriter.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ public class RowBinaryFormatWriter {
2929

3030
private final Object[] row;
3131

32+
private final boolean defaultSupport;
33+
3234
public RowBinaryFormatWriter(OutputStream out, TableSchema tableSchema, ClickHouseFormat format) {
3335
if (format != ClickHouseFormat.RowBinary && format != ClickHouseFormat.RowBinaryWithDefaults) {
3436
throw new IllegalArgumentException("Only RowBinary and RowBinaryWithDefaults are supported");
@@ -37,6 +39,7 @@ public RowBinaryFormatWriter(OutputStream out, TableSchema tableSchema, ClickHou
3739
this.out = out;
3840
this.tableSchema = tableSchema;
3941
this.row = new Object[tableSchema.getColumns().size()];
42+
this.defaultSupport = format == ClickHouseFormat.RowBinaryWithDefaults;
4043
}
4144

4245
public void setValue(String column, Object value) {
@@ -48,12 +51,11 @@ public void setValue(int colIndex, Object value) {
4851
}
4952

5053
public void commitRow() throws IOException {
51-
5254
List<ClickHouseColumn> columnList = tableSchema.getColumns();
5355
for (int i = 0; i < row.length; i++) {
5456
ClickHouseColumn column = columnList.get(i);
5557

56-
if (RowBinaryFormatSerializer.writeValuePreamble(out, true, column, row[i])) {
58+
if (RowBinaryFormatSerializer.writeValuePreamble(out, defaultSupport, column, row[i])) {
5759
SerializerUtils.serializeData(out, row[i], column);
5860
}
5961
}

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/BinaryStreamReader.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,12 @@ public <T> T readValue(ClickHouseColumn column, Class<?> typeHint) throws IOExce
205205
return (T) readGeoPolygon();
206206
case MultiPolygon:
207207
return (T) readGeoMultiPolygon();
208+
case MultiLineString:
209+
return (T) readGeoPolygon();
208210
case Ring:
209211
return (T) readGeoRing();
210-
212+
case LineString:
213+
return (T) readGeoRing();
211214
case JSON: // experimental https://clickhouse.com/docs/en/sql-reference/data-types/newjson
212215
if (jsonAsString) {
213216
return (T) readString(input);

client-v2/src/main/java/com/clickhouse/client/api/data_formats/internal/SerializerUtils.java

+2
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,12 @@ public static void serializeData(OutputStream stream, Object value, ClickHouseCo
8080
serializeTupleData(stream, value, GEO_POINT_TUPLE);
8181
break;
8282
case Ring:
83+
case LineString:
8384
value = value instanceof ClickHouseGeoRingValue ? ((ClickHouseGeoRingValue)value).getValue() : value;
8485
serializeArrayData(stream, value, GEO_RING_ARRAY);
8586
break;
8687
case Polygon:
88+
case MultiLineString:
8789
value = value instanceof ClickHouseGeoPolygonValue ? ((ClickHouseGeoPolygonValue)value).getValue() : value;
8890
serializeArrayData(stream, value, GEO_POLYGON_ARRAY);
8991
break;

0 commit comments

Comments
 (0)