Skip to content

Commit 18cd382

Browse files
authored
Pipe: Fixed the potential NPE in receiver tablet construction (apache#16648)
1 parent 7131dab commit 18cd382

File tree

1 file changed

+31
-3
lines changed

1 file changed

+31
-3
lines changed

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/crud/InsertTabletStatement.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,13 @@ public InsertTabletStatement(
113113
}
114114
setAligned(isAligned);
115115
setTimes(tablet.getTimestamps());
116-
setColumns(Arrays.stream(tablet.getValues()).map(this::convertTableColumn).toArray());
117-
setBitMaps(tablet.getBitMaps());
118116
setRowCount(tablet.getRowSize());
117+
final Object[] columns = new Object[tablet.getValues().length];
118+
for (int i = 0; i < tablet.getValues().length; ++i) {
119+
columns[i] = convertTableColumn(tablet.getValues()[i], tablet.getRowSize(), dataTypes[i]);
120+
}
121+
setColumns(columns);
122+
setBitMaps(tablet.getBitMaps());
119123

120124
if (Objects.nonNull(databaseName)) {
121125
setWriteToTable(true);
@@ -127,7 +131,7 @@ public InsertTabletStatement(
127131
}
128132
}
129133

130-
private Object convertTableColumn(final Object input) {
134+
private Object convertTableColumn(final Object input, final int rowCount, final TSDataType type) {
131135
if (input instanceof LocalDate[]) {
132136
return Arrays.stream(((LocalDate[]) input))
133137
.map(date -> Objects.nonNull(date) ? DateUtils.parseDateExpressionToInt(date) : 0)
@@ -137,6 +141,30 @@ private Object convertTableColumn(final Object input) {
137141
return Arrays.stream(((Binary[]) input))
138142
.map(binary -> Objects.nonNull(binary) ? binary : Binary.EMPTY_VALUE)
139143
.toArray(Binary[]::new);
144+
} else if (input == null) {
145+
switch (type) {
146+
case BOOLEAN:
147+
return new boolean[rowCount];
148+
case INT32:
149+
case DATE:
150+
return new int[rowCount];
151+
case INT64:
152+
case TIMESTAMP:
153+
return new long[rowCount];
154+
case FLOAT:
155+
return new float[rowCount];
156+
case DOUBLE:
157+
return new double[rowCount];
158+
case TEXT:
159+
case BLOB:
160+
case STRING:
161+
final Binary[] result = new Binary[rowCount];
162+
Arrays.fill(result, Binary.EMPTY_VALUE);
163+
return result;
164+
default:
165+
throw new UnSupportedDataTypeException(
166+
String.format("data type %s is not supported when convert data at client", type));
167+
}
140168
}
141169

142170
return input;

0 commit comments

Comments
 (0)