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