From 5b85286c69310d18b3a41513e01c25043f616f88 Mon Sep 17 00:00:00 2001 From: "zhongjian.xzj" Date: Fri, 22 Dec 2023 13:11:43 +0800 Subject: [PATCH 1/2] [nereids] fix join fd computing bug --- .../apache/doris/nereids/trees/plans/logical/LogicalJoin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java index c771f0372e1744..773dbce5fc256e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/logical/LogicalJoin.java @@ -423,8 +423,8 @@ public FunctionalDependencies computeFuncDeps(Supplier> outputSupplie // TODO: consider Null-safe hash condition when left and rigth is not nullable boolean isLeftUnique = left().getLogicalProperties() .getFunctionalDependencies().isUnique(keys.first); - boolean isRightUnique = left().getLogicalProperties() - .getFunctionalDependencies().isUnique(keys.first); + boolean isRightUnique = right().getLogicalProperties() + .getFunctionalDependencies().isUnique(keys.second); Builder fdBuilder = new Builder(); if (joinType.isInnerJoin()) { // inner join propagate uniforms slots From 379185e00d3dea7fcb6aee99b1901c2634e5f279 Mon Sep 17 00:00:00 2001 From: "zhongjian.xzj" Date: Fri, 22 Dec 2023 14:31:43 +0800 Subject: [PATCH 2/2] [nereids] fix join fd computing bug --- .../doris/nereids/rules/rewrite/EliminateJoinByFkTest.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateJoinByFkTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateJoinByFkTest.java index 1faaca4f3f5550..721e94b144d05c 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateJoinByFkTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/rules/rewrite/EliminateJoinByFkTest.java @@ -107,7 +107,8 @@ void testNullWithPredicate() throws Exception { @Test void testMultiJoin() throws Exception { - addConstraint("Alter table foreign_null add constraint uk unique (id3)\n"); + addConstraint("Alter table foreign_null add constraint uk_id3 unique (id3)\n"); + addConstraint("Alter table foreign_not_null add constraint uk_id2 unique (id2)\n"); String sql = "select id1 from " + "foreign_null inner join foreign_not_null on id2 = id3\n" + "inner join pri on id1 = id3"; @@ -116,6 +117,7 @@ void testMultiJoin() throws Exception { .rewrite() .nonMatch(logicalOlapScan().when(scan -> scan.getTable().getName().equals("pri"))) .printlnTree(); - dropConstraint("Alter table foreign_null drop constraint uk\n"); + dropConstraint("Alter table foreign_null drop constraint uk_id3\n"); + dropConstraint("Alter table foreign_not_null drop constraint uk_id2"); } }