This is an automated email from the ASF dual-hosted git repository.
kxiao pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.0 by this push:
new 0cbac6ee68c [fix](planner) collect_list and collect_set should always
not null (#25683)
0cbac6ee68c is described below
commit 0cbac6ee68c4b7f748e17f8b654e83059647f489
Author: morrySnow <[email protected]>
AuthorDate: Fri Oct 20 17:34:19 2023 +0800
[fix](planner) collect_list and collect_set should always not null (#25683)
cherry-pick from master
PR: #25592
commit id: 26f8c7e35260010da5132848e1fc80f6ec430736
---
.../aggregate_functions/aggregate_function_collect.h | 17 ++++++++++++-----
.../org/apache/doris/catalog/AggregateFunction.java | 3 ++-
.../rules/expression/rules/FoldConstantRuleOnFE.java | 7 ++++---
.../trees/expressions/functions/agg/CollectList.java | 4 ++--
.../trees/expressions/functions/agg/CollectSet.java | 4 ++--
5 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/be/src/vec/aggregate_functions/aggregate_function_collect.h
b/be/src/vec/aggregate_functions/aggregate_function_collect.h
index 4e774b887e6..4f5b073ae60 100644
--- a/be/src/vec/aggregate_functions/aggregate_function_collect.h
+++ b/be/src/vec/aggregate_functions/aggregate_function_collect.h
@@ -75,8 +75,9 @@ struct AggregateFunctionCollectSetData {
void merge(const SelfType& rhs) {
if constexpr (HasLimit::value) {
- DCHECK(max_size == -1 || max_size == rhs.max_size);
- max_size = rhs.max_size;
+ if (max_size == -1) {
+ max_size = rhs.max_size;
+ }
for (auto& rhs_elem : rhs.data_set) {
if (size() >= max_size) {
@@ -131,7 +132,9 @@ struct AggregateFunctionCollectSetData<StringRef, HasLimit>
{
void merge(const SelfType& rhs, Arena* arena) {
bool inserted;
Set::LookupResult it;
- DCHECK(max_size == -1 || max_size == rhs.max_size);
+ if (max_size == -1) {
+ max_size = rhs.max_size;
+ }
max_size = rhs.max_size;
for (auto& rhs_elem : rhs.data_set) {
@@ -192,7 +195,9 @@ struct AggregateFunctionCollectListData {
void merge(const SelfType& rhs) {
if constexpr (HasLimit::value) {
- DCHECK(max_size == -1 || max_size == rhs.max_size);
+ if (max_size == -1) {
+ max_size = rhs.max_size;
+ }
max_size = rhs.max_size;
for (auto& rhs_elem : rhs.data) {
if (size() >= max_size) {
@@ -244,7 +249,9 @@ struct AggregateFunctionCollectListData<StringRef,
HasLimit> {
void merge(const AggregateFunctionCollectListData& rhs) {
if constexpr (HasLimit::value) {
- DCHECK(max_size == -1 || max_size == rhs.max_size);
+ if (max_size == -1) {
+ max_size = rhs.max_size;
+ }
max_size = rhs.max_size;
data->insert_range_from(*rhs.data, 0,
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
index b646c7ef982..bfaa07aa326 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/AggregateFunction.java
@@ -54,7 +54,8 @@ public class AggregateFunction extends Function {
FunctionSet.INTERSECT_COUNT,
FunctionSet.ORTHOGONAL_BITMAP_UNION_COUNT,
FunctionSet.COUNT, "approx_count_distinct", "ndv",
FunctionSet.BITMAP_UNION_INT,
FunctionSet.BITMAP_UNION_COUNT, "ndv_no_finalize",
FunctionSet.WINDOW_FUNNEL, FunctionSet.RETENTION,
- FunctionSet.SEQUENCE_MATCH, FunctionSet.SEQUENCE_COUNT,
FunctionSet.MAP_AGG, FunctionSet.BITMAP_AGG);
+ FunctionSet.SEQUENCE_MATCH, FunctionSet.SEQUENCE_COUNT,
FunctionSet.MAP_AGG, FunctionSet.BITMAP_AGG,
+ FunctionSet.COLLECT_LIST, FunctionSet.COLLECT_SET);
public static ImmutableSet<String>
ALWAYS_NULLABLE_AGGREGATE_FUNCTION_NAME_SET =
ImmutableSet.of("stddev_samp", "variance_samp", "var_samp",
"percentile_approx");
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
index 008db0dbce2..8dbdd2917d0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/expression/rules/FoldConstantRuleOnFE.java
@@ -45,7 +45,6 @@ import org.apache.doris.nereids.trees.expressions.WhenClause;
import org.apache.doris.nereids.trees.expressions.functions.BoundFunction;
import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import
org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
-import
org.apache.doris.nereids.trees.expressions.functions.agg.NullableAggregateFunction;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Array;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.ConnectionId;
import
org.apache.doris.nereids.trees.expressions.functions.scalar.CurrentCatalog;
@@ -510,8 +509,10 @@ public class FoldConstantRuleOnFE extends
AbstractExpressionRewriteRule {
}
private Optional<Expression> preProcess(Expression expression) {
- if (expression instanceof PropagateNullable && !(expression instanceof
NullableAggregateFunction)
- && argsHasNullLiteral(expression)) {
+ if (expression instanceof AggregateFunction) {
+ return Optional.of(expression);
+ }
+ if (expression instanceof PropagateNullable &&
argsHasNullLiteral(expression)) {
return Optional.of(new NullLiteral(expression.getDataType()));
}
if (!allArgsIsAllLiteral(expression)) {
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectList.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectList.java
index 32f8fd4a81a..f6b6d1138c3 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectList.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectList.java
@@ -19,8 +19,8 @@ package
org.apache.doris.nereids.trees.expressions.functions.agg;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
-import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.ArrayType;
@@ -49,7 +49,7 @@ import java.util.List;
* AggregateFunction 'collect_list'. This class is generated by
GenerateFunction.
*/
public class CollectList extends AggregateFunction
- implements UnaryExpression, ExplicitlyCastableSignature,
PropagateNullable {
+ implements UnaryExpression, ExplicitlyCastableSignature,
AlwaysNotNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(ArrayType.of(BooleanType.INSTANCE)).args(BooleanType.INSTANCE),
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectSet.java
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectSet.java
index 911edb803de..fd5a6f3724e 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectSet.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/agg/CollectSet.java
@@ -19,8 +19,8 @@ package
org.apache.doris.nereids.trees.expressions.functions.agg;
import org.apache.doris.catalog.FunctionSignature;
import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.functions.AlwaysNotNullable;
import
org.apache.doris.nereids.trees.expressions.functions.ExplicitlyCastableSignature;
-import org.apache.doris.nereids.trees.expressions.functions.PropagateNullable;
import org.apache.doris.nereids.trees.expressions.shape.UnaryExpression;
import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor;
import org.apache.doris.nereids.types.ArrayType;
@@ -49,7 +49,7 @@ import java.util.List;
* AggregateFunction 'collect_set'. This class is generated by
GenerateFunction.
*/
public class CollectSet extends AggregateFunction
- implements UnaryExpression, ExplicitlyCastableSignature,
PropagateNullable {
+ implements UnaryExpression, ExplicitlyCastableSignature,
AlwaysNotNullable {
public static final List<FunctionSignature> SIGNATURES = ImmutableList.of(
FunctionSignature.ret(ArrayType.of(BooleanType.INSTANCE)).args(BooleanType.INSTANCE),
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]