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

Reply via email to