This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch branch-1.2-unstable in repository https://gitbox.apache.org/repos/asf/doris.git
commit 0ef2377d220b73e3a17b0f36517123a6dc82e035 Author: morrySnow <101034200+morrys...@users.noreply.github.com> AuthorDate: Wed Nov 9 13:25:41 2022 +0800 [feature](Nereids) binding slot in order by that not show in project (#14042) 1. binding slot in order by that not show in project, such as: SELECT c1 FROM t WHERE c2 > 0 ORDER BY c3 2. not check unbound when bind slot reference. Instead, do it in analysis check. --- .../doris/nereids/jobs/batch/AnalyzeRulesJob.java | 4 +-- .../nereids/processor/post/PlanPostProcessors.java | 2 +- .../org/apache/doris/nereids/rules/RuleType.java | 7 +++-- .../nereids/rules/analysis/BindSlotReference.java | 11 ++++++-- .../nereids/rules/analysis/CheckAnalysis.java | 21 +++++++++++++- ...egateFunctions.java => FillUpMissingSlots.java} | 31 ++++++++++++++++++--- .../datasets/clickbench/AnalyzeClickBenchTest.java | 16 +++++------ .../nereids/datasets/tpch/AnalyzeTPCHTest.java | 5 ++-- .../doris/nereids/datasets/tpch/TPCHUtils.java | 32 +++++++++++----------- ...ctionsTest.java => FillUpMissingSlotsTest.java} | 2 +- .../doris/nereids/util/LogicalPlanBuilder.java | 17 ++++-------- 11 files changed, 95 insertions(+), 53 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java index ce5c589a80..db7528d4bc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/jobs/batch/AnalyzeRulesJob.java @@ -21,9 +21,9 @@ import org.apache.doris.nereids.CascadesContext; import org.apache.doris.nereids.rules.analysis.BindFunction; import org.apache.doris.nereids.rules.analysis.BindRelation; import org.apache.doris.nereids.rules.analysis.BindSlotReference; +import org.apache.doris.nereids.rules.analysis.FillUpMissingSlots; import org.apache.doris.nereids.rules.analysis.ProjectToGlobalAggregate; import org.apache.doris.nereids.rules.analysis.RegisterCTE; -import org.apache.doris.nereids.rules.analysis.ResolveAggregateFunctions; import org.apache.doris.nereids.rules.analysis.Scope; import org.apache.doris.nereids.rules.analysis.UserAuthentication; @@ -55,7 +55,7 @@ public class AnalyzeRulesJob extends BatchRulesJob { new ProjectToGlobalAggregate() )), topDownBatch(ImmutableList.of( - new ResolveAggregateFunctions() + new FillUpMissingSlots() )) )); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java index f6bf96856d..b0f822cac1 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/processor/post/PlanPostProcessors.java @@ -52,8 +52,8 @@ public class PlanPostProcessors { Builder<PlanPostProcessor> builder = ImmutableList.builder(); if (cascadesContext.getConnectContext().getSessionVariable().isEnableNereidsRuntimeFilter()) { builder.add(new RuntimeFilterGenerator()); - builder.add(new Validator()); } + builder.add(new Validator()); return builder.build(); } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java index b094375c82..bbe81e49c9 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/RuleType.java @@ -46,9 +46,10 @@ public enum RuleType { BINDING_FILTER_FUNCTION(RuleTypeClass.REWRITE), BINDING_HAVING_FUNCTION(RuleTypeClass.REWRITE), BINDING_SORT_FUNCTION(RuleTypeClass.REWRITE), - RESOLVE_HAVING_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), - RESOLVE_SORT_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), - RESOLVE_SORT_HAVING_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), + FILL_UP_HAVING_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), + FILL_UP_SORT_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), + FILL_UP_SORT_HAVING_AGGREGATE_FUNCTIONS(RuleTypeClass.REWRITE), + FILL_UP_SORT_PROJECT(RuleTypeClass.REWRITE), RESOLVE_PROJECT_ALIAS(RuleTypeClass.REWRITE), RESOLVE_AGGREGATE_ALIAS(RuleTypeClass.REWRITE), diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java index 07b1763afa..59cacf524b 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/BindSlotReference.java @@ -160,12 +160,15 @@ public class BindSlotReference implements AnalysisRuleFactory { }) ), RuleType.BINDING_SORT_SLOT.build( - logicalSort().when(Plan::canBind).thenApply(ctx -> { - LogicalSort<GroupPlan> sort = ctx.root; + logicalSort(logicalProject()).when(Plan::canBind).thenApply(ctx -> { + LogicalSort<LogicalProject<GroupPlan>> sort = ctx.root; List<OrderKey> sortItemList = sort.getOrderKeys() .stream() .map(orderKey -> { Expression item = bind(orderKey.getExpr(), sort.children(), sort, ctx.cascadesContext); + if (item.containsType(UnboundSlot.class)) { + item = bind(item, sort.child().children(), sort, ctx.cascadesContext); + } return new OrderKey(item, orderKey.isAsc(), orderKey.isNullFirst()); }).collect(Collectors.toList()); @@ -291,7 +294,9 @@ public class BindSlotReference implements AnalysisRuleFactory { List<Slot> bounded = boundedOpt.get(); switch (bounded.size()) { case 0: - throw new AnalysisException(String.format("Cannot find column %s.", unboundSlot.toSql())); + // just return, give a chance to bind on another slot. + // if unbound finally, check will throw exception + return unboundSlot; case 1: if (!foundInThisScope) { getScope().getOuterScope().get().getCorrelatedSlots().add(bounded.get(0)); diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java index 4064294dd8..9d50db7c36 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/CheckAnalysis.java @@ -17,6 +17,7 @@ package org.apache.doris.nereids.rules.analysis; +import org.apache.doris.nereids.analyzer.UnboundSlot; import org.apache.doris.nereids.exceptions.AnalysisException; import org.apache.doris.nereids.rules.Rule; import org.apache.doris.nereids.rules.RuleType; @@ -24,7 +25,11 @@ import org.apache.doris.nereids.trees.expressions.Expression; import org.apache.doris.nereids.trees.expressions.typecoercion.TypeCheckResult; import org.apache.doris.nereids.trees.plans.Plan; +import org.apache.commons.lang.StringUtils; + import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; /** * Check analysis rule to check semantic correct after analysis by Nereids. @@ -32,7 +37,7 @@ import java.util.Optional; public class CheckAnalysis extends OneAnalysisRuleFactory { @Override public Rule build() { - return any().then(this::checkExpressionInputTypes).toRule(RuleType.CHECK_ANALYSIS); + return any().then(plan -> checkExpressionInputTypes(checkBound(plan))).toRule(RuleType.CHECK_ANALYSIS); } private Plan checkExpressionInputTypes(Plan plan) { @@ -46,4 +51,18 @@ public class CheckAnalysis extends OneAnalysisRuleFactory { } return plan; } + + private Plan checkBound(Plan plan) { + Set<UnboundSlot> unboundSlots = plan.getExpressions().stream() + .<Set<UnboundSlot>>map(e -> e.collect(UnboundSlot.class::isInstance)) + .flatMap(Set::stream) + .collect(Collectors.toSet()); + if (!unboundSlots.isEmpty()) { + throw new AnalysisException(String.format("Cannot find column %s.", + StringUtils.join(unboundSlots.stream() + .map(UnboundSlot::toSql) + .collect(Collectors.toSet()), ", "))); + } + return plan; + } } diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveAggregateFunctions.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java similarity index 86% rename from fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveAggregateFunctions.java rename to fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java index 7034b489bd..9215363e95 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/ResolveAggregateFunctions.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/rules/analysis/FillUpMissingSlots.java @@ -37,6 +37,7 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalSort; import org.apache.doris.nereids.util.ExpressionUtils; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Streams; @@ -44,16 +45,17 @@ import com.google.common.collect.Streams; import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; /** * Resolve having clause to the aggregation. */ -public class ResolveAggregateFunctions implements AnalysisRuleFactory { +public class FillUpMissingSlots implements AnalysisRuleFactory { @Override public List<Rule> buildRules() { return ImmutableList.of( - RuleType.RESOLVE_SORT_AGGREGATE_FUNCTIONS.build( + RuleType.FILL_UP_SORT_AGGREGATE_FUNCTIONS.build( logicalSort(logicalAggregate()) .when(sort -> sort.getExpressions().stream() .anyMatch(e -> e.containsType(AggregateFunction.class))) @@ -72,7 +74,7 @@ public class ResolveAggregateFunctions implements AnalysisRuleFactory { }); }) ), - RuleType.RESOLVE_SORT_HAVING_AGGREGATE_FUNCTIONS.build( + RuleType.FILL_UP_SORT_HAVING_AGGREGATE_FUNCTIONS.build( logicalSort(logicalHaving(logicalAggregate())) .when(sort -> sort.getExpressions().stream() .anyMatch(e -> e.containsType(AggregateFunction.class))) @@ -91,7 +93,7 @@ public class ResolveAggregateFunctions implements AnalysisRuleFactory { }); }) ), - RuleType.RESOLVE_HAVING_AGGREGATE_FUNCTIONS.build( + RuleType.FILL_UP_HAVING_AGGREGATE_FUNCTIONS.build( logicalHaving(logicalAggregate()).then(having -> { LogicalAggregate<GroupPlan> aggregate = having.child(); Resolver resolver = new Resolver(aggregate); @@ -102,6 +104,27 @@ public class ResolveAggregateFunctions implements AnalysisRuleFactory { return new LogicalFilter<>(newPredicates, a); }); }) + ), + RuleType.FILL_UP_SORT_PROJECT.build( + logicalSort(logicalProject()) + .when(sort -> sort.getExpressions().stream() + .map(Expression::getInputSlots) + .flatMap(Set::stream) + .anyMatch(s -> !sort.child().getOutputSet().contains(s))) + .then(sort -> { + final Builder<NamedExpression> projectionsBuilder = ImmutableList.builder(); + projectionsBuilder.addAll(sort.child().getProjects()); + Set<Slot> notExistedInProject = sort.getExpressions().stream() + .map(Expression::getInputSlots) + .flatMap(Set::stream) + .filter(s -> !sort.child().getOutputSet().contains(s)) + .collect(Collectors.toSet()); + projectionsBuilder.addAll(notExistedInProject); + return new LogicalProject(sort.child().getOutput(), + new LogicalSort<>(sort.getOrderKeys(), + new LogicalProject<>(projectionsBuilder.build(), + sort.child().child()))); + }) ) ); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/clickbench/AnalyzeClickBenchTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/clickbench/AnalyzeClickBenchTest.java index 65a18b8591..8a3ead9f75 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/clickbench/AnalyzeClickBenchTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/clickbench/AnalyzeClickBenchTest.java @@ -140,20 +140,20 @@ public class AnalyzeClickBenchTest extends ClickBenchTestBase { checkAnalyze(ClickBenchUtils.Q23); } - // @Test - // public void q24() { - // checkAnalyze(ClickBenchUtils.Q24); - // } + @Test + public void q24() { + checkAnalyze(ClickBenchUtils.Q24); + } @Test public void q25() { checkAnalyze(ClickBenchUtils.Q25); } - // @Test - // public void q26() { - // checkAnalyze(ClickBenchUtils.Q26); - // } + @Test + public void q26() { + checkAnalyze(ClickBenchUtils.Q26); + } @Test public void q27() { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java index ae0dfc754e..7be4a60328 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/AnalyzeTPCHTest.java @@ -182,11 +182,10 @@ public class AnalyzeTPCHTest extends TPCHTestBase { checkAnalyze(TPCHUtils.Q21_rewrite); } - // NOTE: not support '1 for 2' syntax - /*@Test + @Test public void q22() { checkAnalyze(TPCHUtils.Q22); - }*/ + } @Test public void q22_rewrite() { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java index ee8c4b25e4..61be0f086e 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/datasets/tpch/TPCHUtils.java @@ -21,7 +21,7 @@ import org.apache.doris.utframe.TestWithFeService; public class TPCHUtils { - public static final String Q1 = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=false, enable_projection=false) */\n" + public static final String Q1 = "select\n" + " l_returnflag,\n" + " l_linestatus,\n" + " sum(l_quantity) as sum_qty,\n" @@ -88,7 +88,7 @@ public class TPCHUtils { + " p_partkey\n" + "limit 100;"; - public static final String Q2_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=1, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=false, enable_projection=true) */\n" + public static final String Q2_rewrite = "select\n" + " s_acctbal,\n" + " s_name,\n" + " n_name,\n" @@ -152,7 +152,7 @@ public class TPCHUtils { + " o_orderdate\n" + "limit 10;"; - public static String Q3_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=false, enable_projection=true) */\n" + public static String Q3_rewrite = "select \n" + " l_orderkey,\n" + " sum(l_extendedprice * (1 - l_discount)) as revenue,\n" + " o_orderdate,\n" @@ -198,7 +198,7 @@ public class TPCHUtils { + "order by\n" + " o_orderpriority;"; - public static String Q4_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=1, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=false, enable_projection=true) */\n" + public static String Q4_rewrite = "select \n" + " o_orderpriority,\n" + " count(*) as order_count\n" + "from\n" @@ -398,7 +398,7 @@ public class TPCHUtils { + " revenue desc\n" + "limit 20;"; - public static final String Q11 = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=2, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q11 = "select \n" + " ps_partkey,\n" + " sum(ps_supplycost * ps_availqty) as value\n" + "from\n" @@ -454,7 +454,7 @@ public class TPCHUtils { + "order by\n" + " l_shipmode;"; - public static final String Q12_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=2, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q12_rewrite = "select \n" + " l_shipmode,\n" + " sum(case\n" + " when o_orderpriority = '1-URGENT'\n" @@ -518,7 +518,7 @@ public class TPCHUtils { + " and l_shipdate >= date '1995-09-01'\n" + " and l_shipdate < date '1995-10-01';"; - public static final String Q14_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q14_rewrite = "select \n" + " 100.00 * sum(case\n" + " when p_type like 'PROMO%'\n" + " then l_extendedprice * (1 - l_discount)\n" @@ -563,7 +563,7 @@ public class TPCHUtils { + "order by\n" + "\ts_suppkey;"; - public static final String Q15_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=4, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q15_rewrite = "select \n" + " s_suppkey,\n" + " s_name,\n" + " s_address,\n" @@ -632,7 +632,7 @@ public class TPCHUtils { + " l_partkey = p_partkey\n" + " );"; - public static final String Q17_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=1, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q17_rewrite = "select \n" + " sum(l_extendedprice) / 7.0 as avg_yearly\n" + "from\n" + " lineitem join [broadcast]\n" @@ -686,7 +686,7 @@ public class TPCHUtils { + " o_orderdate\n" + "limit 100;"; - public static final String Q18_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q18_rewrite = "select \n" + " c_name,\n" + " c_custkey,\n" + " t3.o_orderkey,\n" @@ -799,7 +799,7 @@ public class TPCHUtils { + "order by\n" + " s_name;"; - public static final String Q20_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q20_rewrite = "select \n" + "s_name, s_address from\n" + "supplier left semi join\n" + "(\n" @@ -866,7 +866,7 @@ public class TPCHUtils { + " s_name\n" + "limit 100;"; - public static final String Q21_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=true, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q21_rewrite = "select \n" + "s_name, count(*) as numwait\n" + "from orders join\n" + "(\n" @@ -905,12 +905,12 @@ public class TPCHUtils { + "from\n" + " (\n" + " select\n" - + " substring(c_phone from 1 for 2) as cntrycode,\n" + + " substring(c_phone, 1, 2) as cntrycode,\n" + " c_acctbal\n" + " from\n" + " customer\n" + " where\n" - + " substring(c_phone from 1 for 2) in\n" + + " substring(c_phone, 1, 2) in\n" + " ('13', '31', '23', '29', '30', '18', '17')\n" + " and c_acctbal > (\n" + " select\n" @@ -919,7 +919,7 @@ public class TPCHUtils { + " customer\n" + " where\n" + " c_acctbal > 0.00\n" - + " and substring(c_phone from 1 for 2) in\n" + + " and substring(c_phone, 1, 2) in\n" + " ('13', '31', '23', '29', '30', '18', '17')\n" + " )\n" + " and not exists (\n" @@ -936,7 +936,7 @@ public class TPCHUtils { + "order by\n" + " cntrycode;"; - public static final String Q22_rewrite = "select /*+SET_VAR(exec_mem_limit=8589934592, parallel_fragment_exec_instance_num=8, enable_vectorized_engine=true, batch_size=4096, disable_join_reorder=false, enable_cost_based_join_reorder=true, enable_projection=true) */\n" + public static final String Q22_rewrite = "select \n" + " cntrycode,\n" + " count(*) as numcust,\n" + " sum(c_acctbal) as totacctbal\n" diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/ResolveAggregateFunctionsTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/FillUpMissingSlotsTest.java similarity index 99% rename from fe/fe-core/src/test/java/org/apache/doris/nereids/parser/ResolveAggregateFunctionsTest.java rename to fe/fe-core/src/test/java/org/apache/doris/nereids/parser/FillUpMissingSlotsTest.java index 10bbe7ae6f..c63310e518 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/ResolveAggregateFunctionsTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/FillUpMissingSlotsTest.java @@ -48,7 +48,7 @@ import org.junit.jupiter.api.Test; import java.util.stream.Collectors; -public class ResolveAggregateFunctionsTest extends AnalyzeCheckTestBase implements PatternMatchSupported { +public class FillUpMissingSlotsTest extends AnalyzeCheckTestBase implements PatternMatchSupported { @Override public void runBeforeAll() throws Exception { diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java index 2535a4ac41..fb9f9a7b49 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/util/LogicalPlanBuilder.java @@ -61,11 +61,6 @@ public class LogicalPlanBuilder { return from(scan); } - public LogicalPlanBuilder projectWithExprs(List<NamedExpression> projectExprs) { - LogicalProject<LogicalPlan> project = new LogicalProject<>(projectExprs, this.plan); - return from(project); - } - public LogicalPlanBuilder project(List<Integer> slotsIndex) { List<NamedExpression> projectExprs = Lists.newArrayList(); for (Integer index : slotsIndex) { @@ -143,26 +138,26 @@ public class LogicalPlanBuilder { for (Integer index : outputExprsIndex) { outputBuilder.add(this.plan.getOutput().get(index)); } - ImmutableList<NamedExpression> outputExpresList = outputBuilder.build(); + ImmutableList<NamedExpression> outputExprsList = outputBuilder.build(); - LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExpresList, this.plan); + LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExprsList, this.plan); return from(agg); } public LogicalPlanBuilder aggGroupUsingIndex(List<Integer> groupByKeysIndex, - List<NamedExpression> outputExpresList) { + List<NamedExpression> outputExprsList) { Builder<Expression> groupByBuilder = ImmutableList.builder(); for (Integer index : groupByKeysIndex) { groupByBuilder.add(this.plan.getOutput().get(index)); } ImmutableList<Expression> groupByKeys = groupByBuilder.build(); - LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExpresList, this.plan); + LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExprsList, this.plan); return from(agg); } - public LogicalPlanBuilder agg(List<Expression> groupByKeys, List<NamedExpression> outputExpresList) { - LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExpresList, this.plan); + public LogicalPlanBuilder agg(List<Expression> groupByKeys, List<NamedExpression> outputExprsList) { + LogicalAggregate<Plan> agg = new LogicalAggregate<>(groupByKeys, outputExprsList, this.plan); return from(agg); } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org