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 <41606806+sohardforan...@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-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org