This is an automated email from the ASF dual-hosted git repository. morrysnow 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 e7b070c9ec [fix](Nereids) subquery not return correct data type (#20985) e7b070c9ec is described below commit e7b070c9ec441a0ad3f2fbd977374fad276ba74a Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Mon Jun 19 23:44:58 2023 +0800 [fix](Nereids) subquery not return correct data type (#20985) if we do type coercion on subquery, it return datatype after type coercion error info ``` Both side of binary arithmetic is not numeric. left type is DECIMALV3(2, 1) and right type is DECIMAL(27, 9)') ``` --- .../org/apache/doris/nereids/trees/expressions/InSubquery.java | 9 +++++---- .../org/apache/doris/nereids/trees/expressions/ListQuery.java | 3 ++- .../apache/doris/nereids/trees/expressions/ScalarSubquery.java | 3 ++- .../org/apache/doris/nereids/trees/expressions/SubqueryExpr.java | 2 +- .../src/test/java/org/apache/doris/planner/PlannerTest.java | 3 +++ 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InSubquery.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InSubquery.java index e6487e0c81..8f9732a2f7 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InSubquery.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/InSubquery.java @@ -19,6 +19,7 @@ package org.apache.doris.nereids.trees.expressions; import org.apache.doris.nereids.exceptions.UnboundException; import org.apache.doris.nereids.trees.expressions.visitor.ExpressionVisitor; +import org.apache.doris.nereids.types.BooleanType; import org.apache.doris.nereids.types.DataType; import com.google.common.base.Preconditions; @@ -40,7 +41,7 @@ public class InSubquery extends SubqueryExpr { super(Objects.requireNonNull(listQuery.getQueryPlan(), "subquery can not be null")); this.compareExpr = Objects.requireNonNull(compareExpression, "compareExpr can not be null"); this.listQuery = Objects.requireNonNull(listQuery, "listQuery can not be null"); - this.isNot = Objects.requireNonNull(isNot, "isNot can not be null"); + this.isNot = isNot; } public InSubquery(Expression compareExpr, ListQuery listQuery, List<Slot> correlateSlots, boolean isNot) { @@ -60,12 +61,12 @@ public class InSubquery extends SubqueryExpr { typeCoercionExpr); this.compareExpr = Objects.requireNonNull(compareExpr, "compareExpr can not be null"); this.listQuery = Objects.requireNonNull(listQuery, "listQuery can not be null"); - this.isNot = Objects.requireNonNull(isNot, "isNot can not be null"); + this.isNot = isNot; } @Override public DataType getDataType() throws UnboundException { - return listQuery.getDataType(); + return BooleanType.INSTANCE; } @Override @@ -75,7 +76,7 @@ public class InSubquery extends SubqueryExpr { @Override public String toSql() { - return this.compareExpr.toSql() + " IN (INSUBQUERY) " + super.toSql(); + return this.compareExpr.toSql() + " IN (" + super.toSql() + ")"; } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ListQuery.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ListQuery.java index bccc090016..a617f7741e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ListQuery.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ListQuery.java @@ -33,6 +33,7 @@ import java.util.Optional; * just for subquery. */ public class ListQuery extends SubqueryExpr implements LeafExpression { + public ListQuery(LogicalPlan subquery) { super(Objects.requireNonNull(subquery, "subquery can not be null")); } @@ -44,7 +45,7 @@ public class ListQuery extends SubqueryExpr implements LeafExpression { @Override public DataType getDataType() { Preconditions.checkArgument(queryPlan.getOutput().size() == 1); - return queryPlan.getOutput().get(0).getDataType(); + return typeCoercionExpr.orElse(queryPlan.getOutput().get(0)).getDataType(); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ScalarSubquery.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ScalarSubquery.java index a17cb0701f..873a11c59f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ScalarSubquery.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/ScalarSubquery.java @@ -33,6 +33,7 @@ import java.util.Optional; * A subquery that will return only one row and one column. */ public class ScalarSubquery extends SubqueryExpr implements LeafExpression { + public ScalarSubquery(LogicalPlan subquery) { super(Objects.requireNonNull(subquery, "subquery can not be null")); } @@ -52,7 +53,7 @@ public class ScalarSubquery extends SubqueryExpr implements LeafExpression { @Override public DataType getDataType() throws UnboundException { Preconditions.checkArgument(queryPlan.getOutput().size() == 1); - return queryPlan.getOutput().get(0).getDataType(); + return typeCoercionExpr.orElse(queryPlan.getOutput().get(0)).getDataType(); } @Override diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java index 759634623b..b783918209 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/SubqueryExpr.java @@ -33,9 +33,9 @@ import java.util.Optional; * Subquery Expression. */ public abstract class SubqueryExpr extends Expression { + protected final LogicalPlan queryPlan; protected final List<Slot> correlateSlots; - protected final Optional<Expression> typeCoercionExpr; public SubqueryExpr(LogicalPlan subquery) { diff --git a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java index 3893e69fce..7cf92fc505 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java @@ -36,6 +36,9 @@ public class PlannerTest extends TestWithFeService { @Override protected void runBeforeAll() throws Exception { + + connectContext.getSessionVariable().setEnableNereidsPlanner(false); + // Create database `db1`. createDatabase("db1"); --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org