Skip to content

Commit

Permalink
[fix](Nereids) add logical project to prevent extra wrong column
Browse files Browse the repository at this point in the history
issue: #30264

fix
  • Loading branch information
iwanttobepowerful committed Jan 30, 2024
1 parent 6e3458b commit b27e6ae
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.apache.doris.nereids.rules.analysis.ResolveOrdinalInOrderByAndGroupBy;
import org.apache.doris.nereids.rules.analysis.SubqueryToApply;
import org.apache.doris.nereids.rules.analysis.UserAuthentication;
import org.apache.doris.nereids.rules.rewrite.MergeProjects;
import org.apache.doris.nereids.rules.rewrite.SemiJoinCommute;

import java.util.List;
Expand Down Expand Up @@ -172,7 +173,8 @@ private static List<RewriteJob> buildAnalyzeJobs(Optional<CustomTableResolver> c
new CollectJoinConstraint()
),
topDown(new LeadingJoin()),
bottomUp(new SubqueryToApply())
bottomUp(new SubqueryToApply()),
topDown(new MergeProjects())
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -134,14 +134,8 @@ public List<Rule> buildRules() {
}
Set<Expression> conjuncts = ImmutableSet.copyOf(newConjuncts.build());
Plan newFilter = new LogicalFilter<>(conjuncts, applyPlan);
if (conjuncts.stream().flatMap(c -> c.children().stream())
.anyMatch(MarkJoinSlotReference.class::isInstance)) {
return new LogicalProject<>(applyPlan.getOutput().stream()
.filter(s -> !(s instanceof MarkJoinSlotReference))
.collect(ImmutableList.toImmutableList()), newFilter);
} else {
return newFilter;
}
return new LogicalProject<>(filter.getOutput().stream().collect(ImmutableList.toImmutableList()),
newFilter);
})
),
RuleType.PROJECT_SUBQUERY_TO_APPLY.build(logicalProject().thenApply(ctx -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
-- !alias_not_exist --
2 5

-- !alias_issue30264 --
a

-- !exists_subquery_with_limit --
1 2
1 3
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ suite ("sub_query_diff_old_optimize") {
DROP TABLE IF EXISTS `sub_query_diff_old_optimize_subquery4`
"""

sql """
DROP TABLE IF EXISTS `sub_query_diff_old_optimize_subquery5`
"""

sql """
create table if not exists sub_query_diff_old_optimize_subquery1
(k1 bigint, k2 bigint)
Expand Down Expand Up @@ -69,6 +73,14 @@ suite ("sub_query_diff_old_optimize") {
properties('replication_num' = '1')
"""

sql """
create table if not exists sub_query_diff_old_optimize_subquery5
(tm varchar(20))
duplicate key(tm)
distributed by hash(tm) buckets 1
properties('replication_num' = '1')
"""

sql """
insert into sub_query_diff_old_optimize_subquery1 values (1,2), (1,3), (2,4), (2,5), (3,3), (3,4), (20,2), (22,3), (24,4)
"""
Expand All @@ -86,6 +98,10 @@ suite ("sub_query_diff_old_optimize") {
insert into sub_query_diff_old_optimize_subquery4 values (5,4), (5,2), (8,3), (5,4), (6,7), (8,9)
"""

sql """
insert into sub_query_diff_old_optimize_subquery5 values ('a')
"""

sql "SET enable_fallback_to_original_planner=false"

test {
Expand Down Expand Up @@ -150,6 +166,10 @@ suite ("sub_query_diff_old_optimize") {
(select k1 as aa from sub_query_diff_old_optimize_subquery3 where sub_query_diff_old_optimize_subquery1.k2 = sub_query_diff_old_optimize_subquery3.v2) sub_query_diff_old_optimize_subquery3) order by k1, k2
"""

qt_alias_issue30264 """
with cte1 as (select * from sub_query_diff_old_optimize_subquery5) select tm from cte1 group by tm having tm > (select 'Apple');
"""

//----------subquery with limit----------
order_qt_exists_subquery_with_limit """
select * from sub_query_diff_old_optimize_subquery1 where exists (select sub_query_diff_old_optimize_subquery3.k3 from sub_query_diff_old_optimize_subquery3 where sub_query_diff_old_optimize_subquery3.v2 = sub_query_diff_old_optimize_subquery1.k2 limit 1);
Expand Down

0 comments on commit b27e6ae

Please sign in to comment.