Skip to content

Commit 74bb966

Browse files
committed
removed optimization :-(
1 parent 6ace772 commit 74bb966

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

clickhouse-data/src/main/java/com/clickhouse/data/ClickHouseColumn.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import java.util.Objects;
5050
import java.util.Set;
5151
import java.util.TimeZone;
52+
import java.util.stream.Collectors;
5253

5354
/**
5455
* This class represents a column defined in database.
@@ -89,6 +90,7 @@ public final class ClickHouseColumn implements Serializable {
8990
private List<ClickHouseColumn> nested;
9091
private List<String> parameters;
9192
private ClickHouseEnum enumConstants;
93+
private Map<String, ClickHouseColumn> jsonPredefinedPaths;
9294

9395
private int arrayLevel;
9496
private ClickHouseColumn arrayBaseColumn;
@@ -509,11 +511,14 @@ protected static int readColumn(String args, int startIndex, int len, String nam
509511
i = ClickHouseUtils.skipBrackets(args, index, len, '(');
510512
String originalTypeName = args.substring(startIndex, i);
511513
List<ClickHouseColumn> nestedColumns = new ArrayList<>();
514+
512515
List<String> parameters = new ArrayList<>();
513516
parseJSONColumn(args.substring(index + 1, i - 1), nestedColumns, parameters);
514517
nestedColumns.sort(Comparator.comparing(o -> o.getDataType().name()));
515518
column = new ClickHouseColumn(ClickHouseDataType.JSON, name, originalTypeName, nullable, lowCardinality,
516519
parameters, nestedColumns);
520+
column.jsonPredefinedPaths = nestedColumns.stream().collect(Collectors.toMap(ClickHouseColumn::getColumnName,
521+
c -> c));
517522
fixedLength = false;
518523
estimatedLength++;
519524
}
@@ -1009,6 +1014,10 @@ public ClickHouseAggregateFunction getAggregateFunction() {
10091014
return aggFuncType;
10101015
}
10111016

1017+
public Map<String, ClickHouseColumn> getJsonPredefinedPaths() {
1018+
return jsonPredefinedPaths;
1019+
}
1020+
10121021
public ClickHouseArraySequence newArrayValue(ClickHouseDataConfig config) {
10131022
int level = arrayLevel;
10141023
ClickHouseArraySequence value;

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,14 +1203,11 @@ private Map<String, Object> readJsonData(InputStream input, ClickHouseColumn col
12031203

12041204
Map<String, Object> obj = new HashMap<>();
12051205

1206-
final int predefinedPaths = column.getNestedColumns().size();
1207-
final List<ClickHouseColumn> predefinedColumns = column.getNestedColumns();
1206+
final Map<String, ClickHouseColumn> predefinedColumns = column.getJsonPredefinedPaths();
12081207
for (int i = 0; i < numOfPaths; i++) {
12091208
String path = readString(input);
1210-
ClickHouseColumn dataColumn = i < predefinedPaths ? predefinedColumns.get(i) : JSON_PLACEHOLDER_COL;
1211-
if (dataColumn != JSON_PLACEHOLDER_COL && !dataColumn.getColumnName().equals(path)) {
1212-
throw new DataTransferException("Wrong column at position " + i + " where path " + path + " expected");
1213-
}
1209+
ClickHouseColumn dataColumn = predefinedColumns == null? JSON_PLACEHOLDER_COL :
1210+
predefinedColumns.getOrDefault(path, JSON_PLACEHOLDER_COL);
12141211
Object value = readValue(dataColumn);
12151212
obj.put(path, value);
12161213
}

0 commit comments

Comments
 (0)