@@ -117,7 +117,7 @@ class LeftSemiPushdownSuite extends PlanTest {
117
117
comparePlans(optimized, originalQuery.analyze)
118
118
}
119
119
120
- test(" Aggregate: LeftSemiAnti join partial pushdown" ) {
120
+ test(" Aggregate: LeftSemi join partial pushdown" ) {
121
121
val originalQuery = testRelation
122
122
.groupBy(' b )(' b , sum(' c ).as(' sum ))
123
123
.join(testRelation1, joinType = LeftSemi , condition = Some (' b === ' d && ' sum === 10 ))
@@ -132,6 +132,15 @@ class LeftSemiPushdownSuite extends PlanTest {
132
132
comparePlans(optimized, correctAnswer)
133
133
}
134
134
135
+ test(" Aggregate: LeftAnti join no pushdown" ) {
136
+ val originalQuery = testRelation
137
+ .groupBy(' b )(' b , sum(' c ).as(' sum ))
138
+ .join(testRelation1, joinType = LeftAnti , condition = Some (' b === ' d && ' sum === 10 ))
139
+
140
+ val optimized = Optimize .execute(originalQuery.analyze)
141
+ comparePlans(optimized, originalQuery.analyze)
142
+ }
143
+
135
144
test(" LeftSemiAnti join over aggregate - no pushdown" ) {
136
145
val originalQuery = testRelation
137
146
.groupBy(' b )(' b , sum(' c ).as(' sum ))
@@ -174,7 +183,7 @@ class LeftSemiPushdownSuite extends PlanTest {
174
183
comparePlans(optimized, correctAnswer)
175
184
}
176
185
177
- test(" Window: LeftSemiAnti partial pushdown" ) {
186
+ test(" Window: LeftSemi partial pushdown" ) {
178
187
// Attributes from join condition which does not refer to the window partition spec
179
188
// are kept up in the plan as a Filter operator above Window.
180
189
val winExpr = windowExpr(count(' b ), windowSpec(' a :: Nil , ' b .asc :: Nil , UnspecifiedFrame ))
@@ -195,6 +204,25 @@ class LeftSemiPushdownSuite extends PlanTest {
195
204
comparePlans(optimized, correctAnswer)
196
205
}
197
206
207
+ test(" Window: LeftAnti no pushdown" ) {
208
+ // Attributes from join condition which does not refer to the window partition spec
209
+ // are kept up in the plan as a Filter operator above Window.
210
+ val winExpr = windowExpr(count(' b ), windowSpec(' a :: Nil , ' b .asc :: Nil , UnspecifiedFrame ))
211
+
212
+ val originalQuery = testRelation
213
+ .select(' a , ' b , ' c , winExpr.as(' window ))
214
+ .join(testRelation1, joinType = LeftAnti , condition = Some (' a === ' d && ' b > 5 ))
215
+
216
+ val optimized = Optimize .execute(originalQuery.analyze)
217
+
218
+ val correctAnswer = testRelation
219
+ .select(' a , ' b , ' c )
220
+ .window(winExpr.as(' window ) :: Nil , ' a :: Nil , ' b .asc :: Nil )
221
+ .join(testRelation1, joinType = LeftAnti , condition = Some (' a === ' d && ' b > 5 ))
222
+ .select(' a , ' b , ' c , ' window ).analyze
223
+ comparePlans(optimized, correctAnswer)
224
+ }
225
+
198
226
test(" Union: LeftSemiAnti join pushdown" ) {
199
227
val testRelation2 = LocalRelation (' x .int, ' y .int, ' z .int)
200
228
@@ -251,7 +279,7 @@ class LeftSemiPushdownSuite extends PlanTest {
251
279
comparePlans(optimized, correctAnswer)
252
280
}
253
281
254
- test(" Unary: LeftSemiAnti join pushdown - partial pushdown" ) {
282
+ test(" Unary: LeftSemi join pushdown - partial pushdown" ) {
255
283
val testRelationWithArrayType = LocalRelation (' a .int, ' b .int, ' c_arr .array(IntegerType ))
256
284
val originalQuery = testRelationWithArrayType
257
285
.generate(Explode (' c_arr ), alias = Some (" arr" ), outputNames = Seq (" out_col" ))
@@ -267,6 +295,16 @@ class LeftSemiPushdownSuite extends PlanTest {
267
295
comparePlans(optimized, correctAnswer)
268
296
}
269
297
298
+ test(" Unary: LeftAnti join pushdown - no pushdown" ) {
299
+ val testRelationWithArrayType = LocalRelation (' a .int, ' b .int, ' c_arr .array(IntegerType ))
300
+ val originalQuery = testRelationWithArrayType
301
+ .generate(Explode (' c_arr ), alias = Some (" arr" ), outputNames = Seq (" out_col" ))
302
+ .join(testRelation1, joinType = LeftAnti , condition = Some (' b === ' d && ' b === ' out_col ))
303
+
304
+ val optimized = Optimize .execute(originalQuery.analyze)
305
+ comparePlans(optimized, originalQuery.analyze)
306
+ }
307
+
270
308
test(" Unary: LeftSemiAnti join pushdown - no pushdown" ) {
271
309
val testRelationWithArrayType = LocalRelation (' a .int, ' b .int, ' c_arr .array(IntegerType ))
272
310
val originalQuery = testRelationWithArrayType
0 commit comments