You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2023/06/19 15:45:06 UTC

[doris] branch master updated: [fix](Nereids) subquery not return correct data type (#20985)

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 <10...@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-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org