@@ -36,6 +36,7 @@ class FilterPushdownSuite extends PlanTest {
3636      Batch (" Filter Pushdown"  , Once ,
3737        CombineFilters ,
3838        PushPredicateThroughProject ,
39+         BooleanSimplification ,
3940        PushPredicateThroughJoin ,
4041        PushPredicateThroughGenerate ,
4142        ColumnPruning ,
@@ -156,11 +157,9 @@ class FilterPushdownSuite extends PlanTest {
156157        .where(' a  ===  1  &&  ' a  ===  2 )
157158        .select(' a ).analyze
158159
159- 
160160    comparePlans(optimized, correctAnswer)
161161  }
162162
163- 
164163  test(" joins: push to either side"  ) {
165164    val  x  =  testRelation.subquery(' x )
166165    val  y  =  testRelation.subquery(' y )
@@ -198,6 +197,25 @@ class FilterPushdownSuite extends PlanTest {
198197    comparePlans(optimized, correctAnswer)
199198  }
200199
200+   test(" joins: push to one side after transformCondition"  ) {
201+     val  x  =  testRelation.subquery(' x )
202+     val  y  =  testRelation1.subquery(' y )
203+ 
204+     val  originalQuery  =  {
205+       x.join(y)
206+        .where((" x.a"  .attr ===  1  &&  " y.d"  .attr ===  " x.b"  .attr) || 
207+               (" x.a"  .attr ===  1  &&  " y.d"  .attr ===  " x.c"  .attr))
208+     }
209+ 
210+     val  optimized  =  Optimize .execute(originalQuery.analyze)
211+     val  left  =  testRelation.where(' a  ===  1 )
212+     val  right  =  testRelation1
213+     val  correctAnswer  = 
214+       left.join(right, condition =  Some (" d"  .attr ===  " b"  .attr ||  " d"  .attr ===  " c"  .attr)).analyze
215+ 
216+     comparePlans(optimized, correctAnswer)
217+   }
218+ 
201219  test(" joins: rewrite filter to push to either side"  ) {
202220    val  x  =  testRelation.subquery(' x )
203221    val  y  =  testRelation.subquery(' y )
@@ -563,17 +581,16 @@ class FilterPushdownSuite extends PlanTest {
563581    //  push down invalid
564582    val  originalQuery1  =  {
565583      x.select(' a , ' b )
566-          .sortBy(SortOrder (' a , Ascending ))
567-          .select(' b )
584+        .sortBy(SortOrder (' a , Ascending ))
585+        .select(' b )
568586    }
569587
570588    val  optimized1  =  Optimize .execute(originalQuery1.analyze)
571589    val  correctAnswer1  = 
572590      x.select(' a , ' b )
573-          .sortBy(SortOrder (' a , Ascending ))
574-          .select(' b ).analyze
591+        .sortBy(SortOrder (' a , Ascending ))
592+        .select(' b ).analyze
575593
576594    comparePlans(optimized1, analysis.EliminateSubQueries (correctAnswer1))
577- 
578595  }
579596}
0 commit comments