Skip to content

Commit

Permalink
Fix NPE in ArrayAgg functions (#13358)
Browse files Browse the repository at this point in the history
  • Loading branch information
xiangfu0 authored Jun 11, 2024
1 parent ae4e7de commit 5c75b15
Show file tree
Hide file tree
Showing 7 changed files with 42 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ public I merge(I intermediateResult1, I intermediateResult2) {

@Override
public DoubleArrayList extractFinalResult(I doubleArrayList) {
if (doubleArrayList == null) {
return new DoubleArrayList();
}
return new DoubleArrayList(doubleArrayList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ public I merge(I intermediateResult1, I intermediateResult2) {

@Override
public FloatArrayList extractFinalResult(I floatArrayList) {
if (floatArrayList == null) {
return new FloatArrayList();
}
return new FloatArrayList(floatArrayList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,9 @@ public I merge(I intermediateResult1, I intermediateResult2) {

@Override
public IntArrayList extractFinalResult(I intArrayList) {
if (intArrayList == null) {
return new IntArrayList();
}
return new IntArrayList(intArrayList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ public I merge(I intermediateResult1, I intermediateResult2) {

@Override
public LongArrayList extractFinalResult(I arrayList) {
if (arrayList == null) {
return new LongArrayList();
}
return new LongArrayList(arrayList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,9 @@ public I merge(I intermediateResult1, I intermediateResult2) {

@Override
public ObjectArrayList<String> extractFinalResult(I stringArrayList) {
if (stringArrayList == null) {
return new ObjectArrayList<>();
}
// NOTE: Wrap a String[] to work around the bug of ObjectArrayList constructor creating Object[] internally.
String[] stringArray = new String[stringArrayList.size()];
ObjectIterators.unwrap(stringArrayList.iterator(), stringArray);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,9 @@ public DataSchema.ColumnDataType getFinalResultColumnType() {

@Override
public String extractFinalResult(AbstractObjectCollection<String> strings) {
if (strings == null) {
return null;
}
return StringUtils.join(strings, _separator);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,30 @@ protected long getCountStarResult() {
return 1000;
}

@Test(dataProvider = "useBothQueryEngines")
public void testArrayAggWithEmptyPredicate(boolean useMultiStageQueryEngine) throws Exception {
setUseMultiStageQueryEngine(useMultiStageQueryEngine);
String query =
String.format("SELECT "
+ "arrayAgg(boolCol, 'BOOLEAN'), "
+ "arrayAgg(intCol, 'INT'), "
+ "arrayAgg(longCol, 'LONG'), "
// NOTE: FLOAT array is auto converted to DOUBLE array
+ (useMultiStageQueryEngine ? "arrayAgg(floatCol, 'DOUBLE'), " : "arrayAgg(floatCol, 'FLOAT'), ")
+ "arrayAgg(doubleCol, 'DOUBLE'), "
+ "arrayAgg(stringCol, 'STRING'), "
+ "arrayAgg(timestampCol, 'TIMESTAMP') "
+ "FROM %s WHERE intCol < 0 LIMIT %d", getTableName(), getCountStarResult());
JsonNode jsonNode = postQuery(query);
JsonNode rows = jsonNode.get("resultTable").get("rows");
assertEquals(rows.size(), 1);
JsonNode row = rows.get(0);
assertEquals(row.size(), 7);
for (int i = 0; i < 7; i++) {
assertEquals(row.get(i).size(), 0);
}
}

@Test(dataProvider = "useBothQueryEngines")
public void testArrayAggQueries(boolean useMultiStageQueryEngine)
throws Exception {
Expand Down

0 comments on commit 5c75b15

Please sign in to comment.