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 2022/12/19 16:48:17 UTC

[doris] branch master updated: [Fix](Nereids)fix be core when select constant expression (#15157)

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 918698151a [Fix](Nereids)fix be core when select constant expression (#15157)
918698151a is described below

commit 918698151af292782a8624e8db607ef9d452f834
Author: mch_ucchi <41...@users.noreply.github.com>
AuthorDate: Tue Dec 20 00:48:11 2022 +0800

    [Fix](Nereids)fix be core when select constant expression (#15157)
    
    fix be core when select !2
---
 .../doris/nereids/trees/expressions/Expression.java  | 20 +++++++++++++++++++-
 .../nereids/rules/analysis/CheckAnalysisTest.java    | 13 +++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
index 8c388b20d2..6668bd2ad2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/expressions/Expression.java
@@ -55,12 +55,30 @@ public abstract class Expression extends AbstractTreeNode<Expression> implements
         super(Optional.empty(), children);
     }
 
+    /**
+     * check input data types
+     */
     public TypeCheckResult checkInputDataTypes() {
         if (this instanceof ExpectsInputTypes) {
             ExpectsInputTypes expectsInputTypes = (ExpectsInputTypes) this;
             return checkInputDataTypes(children, expectsInputTypes.expectedInputTypes());
+        } else {
+            List<String> errorMessages = Lists.newArrayList();
+            // check all of its children recursively.
+            for (int i = 0; i < this.children.size(); ++i) {
+                Expression expression = this.children.get(i);
+                TypeCheckResult childResult = expression.checkInputDataTypes();
+                if (childResult != TypeCheckResult.SUCCESS) {
+                    errorMessages.add(String.format("argument %d type check fail: %s",
+                            i + 1, childResult.getMessage()));
+                }
+            }
+            if (errorMessages.isEmpty()) {
+                return TypeCheckResult.SUCCESS;
+            } else {
+                return new TypeCheckResult(false, StringUtils.join(errorMessages, ", "));
+            }
         }
-        return TypeCheckResult.SUCCESS;
     }
 
     private TypeCheckResult checkInputDataTypes(List<Expression> inputs, List<AbstractDataType> inputTypes) {
diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckAnalysisTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckAnalysisTest.java
index 045a6f026e..8fe7f97dde 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckAnalysisTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/analysis/CheckAnalysisTest.java
@@ -18,13 +18,18 @@
 package org.apache.doris.nereids.rules.analysis;
 
 import org.apache.doris.nereids.CascadesContext;
+import org.apache.doris.nereids.exceptions.AnalysisException;
+import org.apache.doris.nereids.trees.expressions.Alias;
 import org.apache.doris.nereids.trees.expressions.And;
+import org.apache.doris.nereids.trees.expressions.Not;
 import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral;
 import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
 import org.apache.doris.nereids.trees.plans.GroupPlan;
 import org.apache.doris.nereids.trees.plans.Plan;
 import org.apache.doris.nereids.trees.plans.logical.LogicalFilter;
+import org.apache.doris.nereids.trees.plans.logical.LogicalOneRowRelation;
 
+import com.google.common.collect.ImmutableList;
 import mockit.Mocked;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -42,4 +47,12 @@ public class CheckAnalysisTest {
         Assertions.assertThrows(RuntimeException.class, () ->
                 checkAnalysis.buildRules().forEach(rule -> rule.transform(plan, cascadesContext)));
     }
+
+    @Test
+    public void testCheckNotWithChildrenWithErrorType() {
+        Plan plan = new LogicalOneRowRelation(
+                ImmutableList.of(new Alias(new Not(new IntegerLiteral(2)), "not_2")));
+        CheckAnalysis checkAnalysis = new CheckAnalysis();
+        Assertions.assertThrows(AnalysisException.class, () -> checkAnalysis.build().transform(plan, cascadesContext));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org