godfreyhe commented on code in PR #20303: URL: https://github.com/apache/flink/pull/20303#discussion_r939529014
########## flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/planner/plan/rules/logical/FlinkJoinToMultiJoinRuleTest.scala: ########## @@ -50,19 +50,214 @@ class FlinkJoinToMultiJoinRuleTest extends TableTestBase { } @Test - def testDoesNotMatchSemiJoin(): Unit = { + def testInnerJoinInnerJoin(): Unit = { + // Can translate join to multi join. + val sqlQuery = "SELECT * FROM T1, T2, T3 WHERE a = c AND a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testInnerJoinLeftOuterJoin(): Unit = { + val sqlQuery = "SELECT * FROM T1 JOIN T2 ON a =c LEFT OUTER JOIN T3 ON a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testInnerJoinRightOuterJoin(): Unit = { + // Cannot translate to one multi join set because right outer join left will generate null. + val sqlQuery = "SELECT * FROM T1 JOIN T2 ON a =c RIGHT OUTER JOIN T3 ON a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testLeftOuterJoinLeftOuterJoin(): Unit = { + // Can translate join to multi join. + val sqlQuery = + "SELECT * FROM T1 LEFT OUTER JOIN T2 ON a = c LEFT OUTER JOIN (SELECT * FROM T3) ON a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testLeftOuterJoinRightOuterJoin(): Unit = { + // Cannot translate join to multi join. + val sqlQuery = + "SELECT * FROM T1 LEFT OUTER JOIN T2 ON a = c RIGHT OUTER JOIN (SELECT * FROM T3) ON a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testLeftOuterJoinInnerJoin(): Unit = { + val sqlQuery = + "SELECT * FROM T1 LEFT OUTER JOIN T2 ON a = c JOIN (SELECT * FROM T3) ON a = e" + util.verifyRelPlan(sqlQuery) + } + + @Test + def testRightOuterJoinRightOuterJoin(): Unit = { Review Comment: please add another case which could reorder for all right outer joins, such as: SELECT * FROM T3 RIGHT OUTER JOIN (SELECT * FROM T1 RIGHT OUTER JOIN T2 ON a = c) ON c = e This case can not reorder, because the second join condition is from generate-null side -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: issues-unsubscr...@flink.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org