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 aff62655c4 [feature](Nereids) binding slot in order by that not show
in project (#14042)
aff62655c4 is described below
commit aff62655c4eb310ed5eb43aff065cab304f83883
Author: morrySnow <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]