@@ -66,11 +66,13 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
6666 case ExtractEquiJoinKeys (
6767 LeftSemi , leftKeys, rightKeys, condition, left, CanBroadcast (right)) =>
6868 joins.BroadcastLeftSemiJoinHash (
69- leftKeys, rightKeys, planLater(left), planLater(right), condition) :: Nil
69+ leftKeys, rightKeys, planLater(left), planLater(right),
70+ reorderPredicates(condition)) :: Nil
7071 // Find left semi joins where at least some predicates can be evaluated by matching join keys
7172 case ExtractEquiJoinKeys (LeftSemi , leftKeys, rightKeys, condition, left, right) =>
7273 joins.LeftSemiJoinHash (
73- leftKeys, rightKeys, planLater(left), planLater(right), condition) :: Nil
74+ leftKeys, rightKeys, planLater(left), planLater(right),
75+ reorderPredicates(condition)) :: Nil
7476 case _ => Nil
7577 }
7678 }
@@ -111,33 +113,39 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
111113
112114 case ExtractEquiJoinKeys (Inner , leftKeys, rightKeys, condition, left, CanBroadcast (right)) =>
113115 Seq (joins.BroadcastHashJoin (
114- leftKeys, rightKeys, Inner , BuildRight , condition, planLater(left), planLater(right)))
116+ leftKeys, rightKeys, Inner , BuildRight , reorderPredicates(condition),
117+ planLater(left), planLater(right)))
115118
116119 case ExtractEquiJoinKeys (Inner , leftKeys, rightKeys, condition, CanBroadcast (left), right) =>
117120 Seq (joins.BroadcastHashJoin (
118- leftKeys, rightKeys, Inner , BuildLeft , condition, planLater(left), planLater(right)))
121+ leftKeys, rightKeys, Inner , BuildLeft , reorderPredicates(condition), planLater(left),
122+ planLater(right)))
119123
120124 case ExtractEquiJoinKeys (Inner , leftKeys, rightKeys, condition, left, right)
121125 if RowOrdering .isOrderable(leftKeys) =>
122126 joins.SortMergeJoin (
123- leftKeys, rightKeys, condition, planLater(left), planLater(right)) :: Nil
127+ leftKeys, rightKeys, reorderPredicates(condition), planLater(left),
128+ planLater(right)) :: Nil
124129
125130 // --- Outer joins --------------------------------------------------------------------------
126131
127132 case ExtractEquiJoinKeys (
128133 LeftOuter , leftKeys, rightKeys, condition, left, CanBroadcast (right)) =>
129134 Seq (joins.BroadcastHashJoin (
130- leftKeys, rightKeys, LeftOuter , BuildRight , condition, planLater(left), planLater(right)))
135+ leftKeys, rightKeys, LeftOuter , BuildRight , reorderPredicates(condition),
136+ planLater(left), planLater(right)))
131137
132138 case ExtractEquiJoinKeys (
133139 RightOuter , leftKeys, rightKeys, condition, CanBroadcast (left), right) =>
134140 Seq (joins.BroadcastHashJoin (
135- leftKeys, rightKeys, RightOuter , BuildLeft , condition, planLater(left), planLater(right)))
141+ leftKeys, rightKeys, RightOuter , BuildLeft , reorderPredicates(condition),
142+ planLater(left), planLater(right)))
136143
137144 case ExtractEquiJoinKeys (joinType, leftKeys, rightKeys, condition, left, right)
138145 if RowOrdering .isOrderable(leftKeys) =>
139146 joins.SortMergeOuterJoin (
140- leftKeys, rightKeys, joinType, condition, planLater(left), planLater(right)) :: Nil
147+ leftKeys, rightKeys, joinType, reorderPredicates(condition), planLater(left),
148+ planLater(right)) :: Nil
141149
142150 // --- Cases where this strategy does not apply ---------------------------------------------
143151
@@ -252,10 +260,12 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
252260 def apply (plan : LogicalPlan ): Seq [SparkPlan ] = plan match {
253261 case j @ logical.Join (CanBroadcast (left), right, Inner | RightOuter , condition) =>
254262 execution.joins.BroadcastNestedLoopJoin (
255- planLater(left), planLater(right), joins.BuildLeft , j.joinType, condition) :: Nil
263+ planLater(left), planLater(right), joins.BuildLeft , j.joinType,
264+ reorderPredicates(condition)) :: Nil
256265 case j @ logical.Join (left, CanBroadcast (right), Inner | LeftOuter | LeftSemi , condition) =>
257266 execution.joins.BroadcastNestedLoopJoin (
258- planLater(left), planLater(right), joins.BuildRight , j.joinType, condition) :: Nil
267+ planLater(left), planLater(right), joins.BuildRight , j.joinType,
268+ reorderPredicates(condition)) :: Nil
259269 case _ => Nil
260270 }
261271 }
@@ -265,7 +275,7 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
265275 case logical.Join (left, right, Inner , None ) =>
266276 execution.joins.CartesianProduct (planLater(left), planLater(right)) :: Nil
267277 case logical.Join (left, right, Inner , Some (condition)) =>
268- execution.Filter (condition,
278+ execution.Filter (reorderPredicates( condition) ,
269279 execution.joins.CartesianProduct (planLater(left), planLater(right))) :: Nil
270280 case _ => Nil
271281 }
@@ -282,7 +292,8 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
282292 }
283293 // This join could be very slow or even hang forever
284294 joins.BroadcastNestedLoopJoin (
285- planLater(left), planLater(right), buildSide, joinType, condition) :: Nil
295+ planLater(left), planLater(right), buildSide, joinType,
296+ reorderPredicates(condition)) :: Nil
286297 case _ => Nil
287298 }
288299 }
@@ -341,7 +352,7 @@ private[sql] abstract class SparkStrategies extends QueryPlanner[SparkPlan] {
341352 case logical.Project (projectList, child) =>
342353 execution.Project (projectList, planLater(child)) :: Nil
343354 case logical.Filter (condition, child) =>
344- execution.Filter (condition, planLater(child)) :: Nil
355+ execution.Filter (reorderPredicates( condition) , planLater(child)) :: Nil
345356 case e @ logical.Expand (_, _, child) =>
346357 execution.Expand (e.projections, e.output, planLater(child)) :: Nil
347358 case logical.Window (projectList, windowExprs, partitionSpec, orderSpec, child) =>
0 commit comments