1414package com .facebook .presto .nativeworker ;
1515
1616import com .facebook .presto .Session ;
17+ import com .facebook .presto .sql .analyzer .FeaturesConfig ;
1718import com .facebook .presto .testing .QueryRunner ;
1819import com .facebook .presto .tests .AbstractTestQueryFramework ;
20+ import com .google .common .collect .ImmutableMap ;
1921import org .testng .annotations .DataProvider ;
2022import org .testng .annotations .Test ;
2123
2830import static com .facebook .presto .nativeworker .NativeQueryRunnerUtils .createOrdersEx ;
2931import static com .facebook .presto .nativeworker .NativeQueryRunnerUtils .createPartitionedNation ;
3032import static com .facebook .presto .nativeworker .NativeQueryRunnerUtils .createRegion ;
33+ import static com .facebook .presto .sql .planner .assertions .PlanMatchPattern .anyTree ;
34+ import static com .facebook .presto .sql .planner .assertions .PlanMatchPattern .exchange ;
35+ import static com .facebook .presto .sql .planner .assertions .PlanMatchPattern .semiJoin ;
36+ import static com .facebook .presto .sql .planner .assertions .PlanMatchPattern .tableScan ;
37+ import static com .facebook .presto .sql .planner .plan .ExchangeNode .Scope .REMOTE_STREAMING ;
38+ import static com .facebook .presto .sql .planner .plan .ExchangeNode .Type .REPARTITION ;
39+ import static com .facebook .presto .sql .planner .plan .ExchangeNode .Type .REPLICATE ;
3140
3241public abstract class AbstractTestNativeJoinQueries
3342 extends AbstractTestQueryFramework
@@ -47,6 +56,12 @@ protected void createTables()
4756 createBucketedCustomer (queryRunner );
4857 }
4958
59+ @ Override
60+ protected FeaturesConfig createFeaturesConfig ()
61+ {
62+ return new FeaturesConfig ().setNativeExecutionEnabled (true );
63+ }
64+
5065 @ Test (dataProvider = "joinTypeProvider" )
5166 public void testInnerJoin (Session joinTypeSession )
5267 {
@@ -67,6 +82,35 @@ public void testBucketedInnerJoin(Session joinTypeSession)
6782 "WHERE b.name=c.name AND \" $bucket\" = 5" );
6883 }
6984
85+ @ Test
86+ public void testSemiJoinPlan ()
87+ {
88+ String sql = "SELECT orderkey FROM orders WHERE orderdate IN (SELECT shipdate FROM lineitem)" ;
89+ assertPlan (
90+ partitionedJoin (),
91+ sql ,
92+ anyTree (
93+ semiJoin ("orderdate" , "shipdate" , "orderkey_1" ,
94+ exchange (REMOTE_STREAMING , REPARTITION ,
95+ tableScan ("orders" , ImmutableMap .of (
96+ "orderkey" , "orderkey" ,
97+ "orderdate" , "orderdate" ))),
98+ exchange (REMOTE_STREAMING , REPARTITION ,
99+ tableScan ("lineitem" , ImmutableMap .of (
100+ "shipdate" , "shipdate" ))))));
101+ assertPlan (
102+ broadcastJoin (),
103+ sql ,
104+ anyTree (
105+ semiJoin ("orderdate" , "shipdate" , "orderkey_1" ,
106+ tableScan ("orders" , ImmutableMap .of (
107+ "orderkey" , "orderkey" ,
108+ "orderdate" , "orderdate" )),
109+ exchange (REMOTE_STREAMING , REPLICATE ,
110+ tableScan ("lineitem" , ImmutableMap .of (
111+ "shipdate" , "shipdate" ))))));
112+ }
113+
70114 @ Test (dataProvider = "joinTypeProvider" )
71115 public void testSemiJoin (Session joinTypeSession )
72116 {
0 commit comments