You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by pa...@apache.org on 2023/06/30 10:20:32 UTC
[doris] branch master updated: [Bug](agg-state) fix core dump on not nullable argument for aggstate's nested argument (#21331)
This is an automated email from the ASF dual-hosted git repository.
panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 88cbea2b56 [Bug](agg-state) fix core dump on not nullable argument for aggstate's nested argument (#21331)
88cbea2b56 is described below
commit 88cbea2b563d0dd47c72d34967f744c56af50d1b
Author: Pxl <px...@qq.com>
AuthorDate: Fri Jun 30 18:20:25 2023 +0800
[Bug](agg-state) fix core dump on not nullable argument for aggstate's nested argument (#21331)
fix core dump on not nullable argument for aggstate's nested argument
---
be/src/vec/exprs/vectorized_agg_fn.cpp | 21 +++++++++++---
.../org/apache/doris/analysis/ArithmeticExpr.java | 2 +-
.../apache/doris/analysis/NativeInsertStmt.java | 22 ++++++++++-----
.../doris/catalog/MaterializedIndexMeta.java | 3 --
.../functions/AggStateFunctionBuilder.java | 13 ++-------
.../functions/combinator/MergeCombinator.java | 6 ++--
.../functions/combinator/StateCombinator.java | 2 +-
.../functions/combinator/UnionCombinator.java | 6 ++--
.../apache/doris/nereids/types/AggStateType.java | 11 ++++++--
.../java/org/apache/doris/analysis/ExprTest.java | 2 +-
.../org/apache/doris/analysis/LoadStmtTest.java | 4 +--
.../apache/doris/analysis/S3TvfLoadStmtTest.java | 2 +-
.../org/apache/doris/planner/RepeatNodeTest.java | 4 +--
.../agg_state/max/test_agg_state_max.out | 33 ++++++++++++++++++++++
regression-test/data/mv_p0/k1ap2spa/k1ap2spa.out | 2 ++
.../agg_state/max/test_agg_state_max.groovy | 27 ++++++++++++++++--
.../suites/mv_p0/k1ap2spa/k1ap2spa.groovy | 1 +
17 files changed, 115 insertions(+), 46 deletions(-)
diff --git a/be/src/vec/exprs/vectorized_agg_fn.cpp b/be/src/vec/exprs/vectorized_agg_fn.cpp
index a6895ff728..2dcf12207a 100644
--- a/be/src/vec/exprs/vectorized_agg_fn.cpp
+++ b/be/src/vec/exprs/vectorized_agg_fn.cpp
@@ -168,7 +168,12 @@ Status AggFnEvaluator::prepare(RuntimeState* state, const RowDescriptor& desc,
"Agg state function input type must be agg_state but get {}",
argument_types[0]->get_family_name());
}
- if (match_suffix(_fn.name.function_name, AGG_UNION_SUFFIX)) {
+
+ std::string type_function_name =
+ assert_cast<const DataTypeAggState*>(argument_types[0].get())
+ ->get_nested_function()
+ ->get_name();
+ if (type_function_name + AGG_UNION_SUFFIX == _fn.name.function_name) {
if (_data_type->is_nullable()) {
return Status::InternalError(
"Union function return type must be not nullable, real={}",
@@ -180,11 +185,19 @@ Status AggFnEvaluator::prepare(RuntimeState* state, const RowDescriptor& desc,
_data_type->get_name());
}
_function = get_agg_state_function<AggregateStateUnion>(argument_types, _data_type);
- } else if (match_suffix(_fn.name.function_name, AGG_MERGE_SUFFIX)) {
+ } else if (type_function_name + AGG_MERGE_SUFFIX == _fn.name.function_name) {
+ auto type = assert_cast<const DataTypeAggState*>(argument_types[0].get())
+ ->get_nested_function()
+ ->get_return_type();
+ if (!type->equals(*_data_type)) {
+ return Status::InternalError("{}'s expect return type is {}, but input {}",
+ argument_types[0]->get_name(), type->get_name(),
+ _data_type->get_name());
+ }
_function = get_agg_state_function<AggregateStateMerge>(argument_types, _data_type);
} else {
- return Status::InternalError(
- "Aggregate Function {} is not endwith '_merge' or '_union'", _fn.signature);
+ return Status::InternalError("{} not match function {}", argument_types[0]->get_name(),
+ _fn.name.function_name);
}
} else {
_function = AggregateFunctionSimpleFactory::instance().get(
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
index de437e154c..176a55fb02 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/ArithmeticExpr.java
@@ -260,7 +260,7 @@ public class ArithmeticExpr extends Expr {
if (children.size() == 1) {
return op.toString() + " " + getChild(0).toSql();
} else {
- return getChild(0).toSql() + " " + op.toString() + " " + getChild(1).toSql();
+ return "(" + getChild(0).toSql() + " " + op.toString() + " " + getChild(1).toSql() + ")";
}
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java
index 43e3c0c7cb..408fcc0952 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/NativeInsertStmt.java
@@ -437,9 +437,7 @@ public class NativeInsertStmt extends InsertStmt {
mentionedColumns.add(col.getName());
targetColumns.add(col);
}
- realTargetColumnNames = targetColumns.stream().map(column -> column.getName()).collect(Collectors.toList());
} else {
- realTargetColumnNames = targetColumnNames;
for (String colName : targetColumnNames) {
Column col = targetTable.getColumn(colName);
if (col == null) {
@@ -453,8 +451,8 @@ public class NativeInsertStmt extends InsertStmt {
// hll column mush in mentionedColumns
for (Column col : targetTable.getBaseSchema()) {
if (col.getType().isObjectStored() && !mentionedColumns.contains(col.getName())) {
- throw new AnalysisException(" object-stored column " + col.getName()
- + " must in insert into columns");
+ throw new AnalysisException(
+ " object-stored column " + col.getName() + " mush in insert into columns");
}
}
}
@@ -535,20 +533,30 @@ public class NativeInsertStmt extends InsertStmt {
}
// check if size of select item equal with columns mentioned in statement
- if (mentionedColumns.size() != queryStmt.getResultExprs().size()
- || realTargetColumnNames.size() != queryStmt.getResultExprs().size()) {
+ if (mentionedColumns.size() != queryStmt.getResultExprs().size()) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_WRONG_VALUE_COUNT);
}
// Check if all columns mentioned is enough
checkColumnCoverage(mentionedColumns, targetTable.getBaseSchema());
+ realTargetColumnNames = targetColumns.stream().map(column -> column.getName()).collect(Collectors.toList());
Map<String, Expr> slotToIndex = Maps.newTreeMap(String.CASE_INSENSITIVE_ORDER);
- for (int i = 0; i < realTargetColumnNames.size(); i++) {
+ for (int i = 0; i < queryStmt.getResultExprs().size(); i++) {
slotToIndex.put(realTargetColumnNames.get(i), queryStmt.getResultExprs().get(i)
.checkTypeCompatibility(targetTable.getColumn(realTargetColumnNames.get(i)).getType()));
}
+ for (Column column : targetTable.getBaseSchema()) {
+ if (!slotToIndex.containsKey(column.getName())) {
+ if (column.getDefaultValue() == null) {
+ slotToIndex.put(column.getName(), new NullLiteral());
+ } else {
+ slotToIndex.put(column.getName(), new StringLiteral(column.getDefaultValue()));
+ }
+ }
+ }
+
// handle VALUES() or SELECT constant list
if (isValuesOrConstantSelect) {
SelectStmt selectStmt = (SelectStmt) queryStmt;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
index 07c33b85bc..12cab9f7ec 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
@@ -193,9 +193,6 @@ public class MaterializedIndexMeta implements Writable, GsonPostProcessable {
// mv_count_sale_amt -> mva_SUM__CASE WHEN `sale_amt` IS NULL THEN 0 ELSE 1 END
List<SlotRef> slots = new ArrayList<>();
entry.getValue().collect(SlotRef.class, slots);
- if (slots.size() > 1) {
- throw new IOException("DefineExpr have multiple slot in MaterializedIndex, Expr=" + entry.getKey());
- }
String name = MaterializedIndexMeta.normalizeName(slots.get(0).toSqlWithoutTbl());
Column matchedColumn = null;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggStateFunctionBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggStateFunctionBuilder.java
index e07f263040..054aa4767b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggStateFunctionBuilder.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/AggStateFunctionBuilder.java
@@ -18,15 +18,12 @@
package org.apache.doris.nereids.trees.expressions.functions;
import org.apache.doris.nereids.trees.expressions.Expression;
-import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.trees.expressions.functions.agg.AggregateFunction;
import org.apache.doris.nereids.trees.expressions.functions.combinator.MergeCombinator;
import org.apache.doris.nereids.trees.expressions.functions.combinator.StateCombinator;
import org.apache.doris.nereids.trees.expressions.functions.combinator.UnionCombinator;
import org.apache.doris.nereids.types.AggStateType;
-import com.google.common.collect.ImmutableList;
-
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -66,9 +63,7 @@ public class AggStateFunctionBuilder extends FunctionBuilder {
return false;
}
- return nestedBuilder.canApply(((AggStateType) argument.getDataType()).getSubTypes().stream().map(t -> {
- return new SlotReference("mocked", t);
- }).collect(ImmutableList.toImmutableList()));
+ return nestedBuilder.canApply(((AggStateType) argument.getDataType()).getMockedExpressions());
}
}
@@ -95,11 +90,7 @@ public class AggStateFunctionBuilder extends FunctionBuilder {
Expression arg = (Expression) arguments.get(0);
AggStateType type = (AggStateType) arg.getDataType();
- List<Expression> nestedArgumens = type.getSubTypes().stream().map(t -> {
- return new SlotReference("mocked", t);
- }).collect(Collectors.toList());
-
- return (AggregateFunction) nestedBuilder.build(nestedName, nestedArgumens);
+ return (AggregateFunction) nestedBuilder.build(nestedName, type.getMockedExpressions());
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
index 69b9514f13..b529ae2de3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/MergeCombinator.java
@@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Objects;
-import java.util.stream.Collectors;
/**
* AggState combinator merge
@@ -47,13 +46,12 @@ public class MergeCombinator extends AggregateFunction
super(nested.getName() + AggStateFunctionBuilder.MERGE_SUFFIX, arguments);
this.nested = Objects.requireNonNull(nested, "nested can not be null");
- inputType = new AggStateType(nested.getName(), nested.getArgumentsTypes(),
- nested.getArguments().stream().map(Expression::nullable).collect(Collectors.toList()));
+ inputType = (AggStateType) arguments.get(0).getDataType();
}
@Override
public MergeCombinator withChildren(List<Expression> children) {
- return new MergeCombinator(children, nested.withChildren(children));
+ return new MergeCombinator(children, nested);
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
index d7da86c525..9b97a7afd4 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/StateCombinator.java
@@ -59,7 +59,7 @@ public class StateCombinator extends ScalarFunction
@Override
public StateCombinator withChildren(List<Expression> children) {
- return new StateCombinator(children, nested.withChildren(children));
+ return new StateCombinator(children, nested);
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
index 21261998ec..67f09a50eb 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/functions/combinator/UnionCombinator.java
@@ -32,7 +32,6 @@ import com.google.common.collect.ImmutableList;
import java.util.List;
import java.util.Objects;
-import java.util.stream.Collectors;
/**
* AggState combinator union
@@ -47,13 +46,12 @@ public class UnionCombinator extends AggregateFunction
super(nested.getName() + AggStateFunctionBuilder.UNION_SUFFIX, arguments);
this.nested = Objects.requireNonNull(nested, "nested can not be null");
- inputType = new AggStateType(nested.getName(), nested.getArgumentsTypes(),
- nested.getArguments().stream().map(Expression::nullable).collect(Collectors.toList()));
+ inputType = (AggStateType) arguments.get(0).getDataType();
}
@Override
public UnionCombinator withChildren(List<Expression> children) {
- return new UnionCombinator(children, nested.withChildren(children));
+ return new UnionCombinator(children, nested);
}
@Override
diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java
index cc467b0eb6..a999512d1b 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/AggStateType.java
@@ -19,11 +19,14 @@ package org.apache.doris.nereids.types;
import org.apache.doris.analysis.Expr;
import org.apache.doris.catalog.Type;
+import org.apache.doris.nereids.trees.expressions.Expression;
+import org.apache.doris.nereids.trees.expressions.SlotReference;
import org.apache.doris.nereids.types.coercion.AbstractDataType;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -56,8 +59,12 @@ public class AggStateType extends DataType {
this.functionName = functionName;
}
- public List<DataType> getSubTypes() {
- return subTypes;
+ public List<Expression> getMockedExpressions() {
+ List<Expression> result = new ArrayList<Expression>();
+ for (int i = 0; i < subTypes.size(); i++) {
+ result.add(new SlotReference("mocked", subTypes.get(i), subTypeNullables.get(i)));
+ }
+ return result;
}
@Override
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/ExprTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/ExprTest.java
index 5262a29034..a91199189a 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/ExprTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/ExprTest.java
@@ -264,7 +264,7 @@ public class ExprTest {
DataInputStream dis = new DataInputStream(new FileInputStream(file));
Expr readExpr = Expr.readIn(dis);
Assert.assertTrue(readExpr instanceof ArithmeticExpr);
- Assert.assertEquals("cos(1) + 100 / 200", readExpr.toSql());
+ Assert.assertEquals("(cos(1) + (100 / 200))", readExpr.toSql());
// 3. delete files
dis.close();
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/LoadStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/LoadStmtTest.java
index 59070dc80c..e8f8309867 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/LoadStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/LoadStmtTest.java
@@ -150,13 +150,13 @@ public class LoadStmtTest {
columnDescs.descs = columns1;
columnDescs.isColumnDescsRewrited = false;
Load.rewriteColumns(columnDescs);
- String orig = "`c1` + 1 + 1";
+ String orig = "((`c1` + 1) + 1)";
Assert.assertEquals(orig, columns1.get(4).getExpr().toString());
List<ImportColumnDesc> columns2 = getColumns("c1,c2,c3,tmp_c5 = tmp_c4+1, tmp_c4=c1 + 1");
columnDescs.descs = columns2;
columnDescs.isColumnDescsRewrited = false;
- String orig2 = "`tmp_c4` + 1";
+ String orig2 = "(`tmp_c4` + 1)";
Load.rewriteColumns(columnDescs);
Assert.assertEquals(orig2, columns2.get(3).getExpr().toString());
diff --git a/fe/fe-core/src/test/java/org/apache/doris/analysis/S3TvfLoadStmtTest.java b/fe/fe-core/src/test/java/org/apache/doris/analysis/S3TvfLoadStmtTest.java
index dd40ecb637..cc41e31e3c 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/analysis/S3TvfLoadStmtTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/analysis/S3TvfLoadStmtTest.java
@@ -180,7 +180,7 @@ public class S3TvfLoadStmtTest {
Deencapsulation.invoke(s3TvfLoadStmt, "rewriteExpr", columnsDescList);
Assert.assertEquals(columnsDescList.size(), 5);
- final String orig4 = "upper(`c1`) + 1 + 1";
+ final String orig4 = "((upper(`c1`) + 1) + 1)";
Assert.assertEquals(orig4, columnsDescList.get(4).getExpr().toString());
final List<ImportColumnDesc> filterColumns = Deencapsulation.invoke(s3TvfLoadStmt,
diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java
index 1687d0c1a6..a4a09d0870 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/planner/RepeatNodeTest.java
@@ -67,9 +67,9 @@ public class RepeatNodeTest extends TestWithFeService {
String sql2 = "select /*+ SET_VAR(enable_nereids_planner=false) */ (id + 1) id_, name, sum(cost) from mycost group by grouping sets((id_, name),());";
String explainString2 = getSQLPlanOrErrorMsg("explain " + sql2);
System.out.println(explainString2);
- Assertions.assertTrue(explainString2.contains("exprs: (`id` + 1), `name`, `cost`"));
+ Assertions.assertTrue(explainString2.contains("exprs: ((`id` + 1)), `name`, `cost`"));
Assertions.assertTrue(
- explainString2.contains(" output slots: `(`id` + 1)`, ``name``, ``cost``, ``GROUPING_ID``"));
+ explainString2.contains(" output slots: `((`id` + 1))`, ``name``, ``cost``, ``GROUPING_ID``"));
String sql3 = "select /*+ SET_VAR(enable_nereids_planner=false) */ 1 as id_, name, sum(cost) from mycost group by grouping sets((id_, name),());";
String explainString3 = getSQLPlanOrErrorMsg("explain " + sql3);
diff --git a/regression-test/data/datatype_p0/agg_state/max/test_agg_state_max.out b/regression-test/data/datatype_p0/agg_state/max/test_agg_state_max.out
index 3f5d60ed72..ea6bed327d 100644
--- a/regression-test/data/datatype_p0/agg_state/max/test_agg_state_max.out
+++ b/regression-test/data/datatype_p0/agg_state/max/test_agg_state_max.out
@@ -9,6 +9,22 @@
6 6999
7 7999
+-- !select --
+7999
+
+-- !select --
+0 999
+1 1999
+2 2999
+3 3999
+4 4999
+5 5999
+6 6999
+7 7999
+
+-- !select --
+7999
+
-- !select --
0 999
1 1999
@@ -20,3 +36,20 @@
7 7999
100 \N
+-- !select --
+7999
+
+-- !select --
+0 999
+1 1999
+2 2999
+3 3999
+4 4999
+5 5999
+6 6999
+7 7999
+100 \N
+
+-- !select --
+7999
+
diff --git a/regression-test/data/mv_p0/k1ap2spa/k1ap2spa.out b/regression-test/data/mv_p0/k1ap2spa/k1ap2spa.out
index 16fe69c3ff..c7d574c013 100644
--- a/regression-test/data/mv_p0/k1ap2spa/k1ap2spa.out
+++ b/regression-test/data/mv_p0/k1ap2spa/k1ap2spa.out
@@ -1,11 +1,13 @@
-- This file is automatically generated. You should know what you did if you want to edit this
-- !select_star --
+\N 4 \N d
-4 -4 -4 d
1 1 1 a
2 2 2 b
3 -3 \N c
-- !select_mv --
+\N 5
2 2
3 3
4 2
diff --git a/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy b/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
index c022b829e9..bce225a7cd 100644
--- a/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
+++ b/regression-test/suites/datatype_p0/agg_state/max/test_agg_state_max.groovy
@@ -16,9 +16,6 @@
// under the License.
suite("test_agg_state_max") {
- // todo: will core dump now, need fix.
- sql"set enable_nereids_planner=false;"
-
sql """ DROP TABLE IF EXISTS a_table; """
sql """
create table a_table(
@@ -39,8 +36,24 @@ suite("test_agg_state_max") {
select e1/1000,max_state(e1) from
(select 1 k1) as t lateral view explode_numbers(8000) tmp1 as e1;"""
+ sql"set enable_nereids_planner=false;"
+ qt_select """ select k1,max_merge(k2) from a_table group by k1 order by k1;
+ """
+ qt_select """ select max_merge(tmp) from (select k1,max_union(k2) tmp from a_table group by k1)t;
+ """
+ test {
+ sql "select k1,min_merge(k2) from a_table group by k1 order by k1;"
+ exception "not match function"
+ }
+ sql"set enable_nereids_planner=true;"
qt_select """ select k1,max_merge(k2) from a_table group by k1 order by k1;
"""
+ qt_select """ select max_merge(tmp) from (select k1,max_union(k2) tmp from a_table group by k1)t;
+ """
+ test {
+ sql "select k1,min_merge(k2) from a_table group by k1 order by k1;"
+ exception "not match function"
+ }
sql """ DROP TABLE IF EXISTS a_table2; """
sql """
@@ -57,6 +70,14 @@ suite("test_agg_state_max") {
select e1/1000,max_state(e1) from
(select 1 k1) as t lateral view explode_numbers(8000) tmp1 as e1;"""
+ sql"set enable_nereids_planner=false;"
+ qt_select """ select k1,max_merge(k2) from a_table2 group by k1 order by k1;
+ """
+ qt_select """ select max_merge(tmp) from (select k1,max_union(k2) tmp from a_table group by k1)t;
+ """
+ sql"set enable_nereids_planner=true;"
qt_select """ select k1,max_merge(k2) from a_table2 group by k1 order by k1;
"""
+ qt_select """ select max_merge(tmp) from (select k1,max_union(k2) tmp from a_table group by k1)t;
+ """
}
diff --git a/regression-test/suites/mv_p0/k1ap2spa/k1ap2spa.groovy b/regression-test/suites/mv_p0/k1ap2spa/k1ap2spa.groovy
index 24d250ce97..3bfbca6d2b 100644
--- a/regression-test/suites/mv_p0/k1ap2spa/k1ap2spa.groovy
+++ b/regression-test/suites/mv_p0/k1ap2spa/k1ap2spa.groovy
@@ -40,6 +40,7 @@ suite ("k1ap2spa") {
createMV("create materialized view k1ap2spa as select abs(k1)+1,sum(abs(k2+1)) from d_table group by abs(k1)+1;")
sql "insert into d_table select -4,-4,-4,'d';"
+ sql "insert into d_table(k4,k2) values('d',4);"
qt_select_star "select * from d_table order by k1;"
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org