diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/EliminateResolvedHint.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/EliminateResolvedHint.scala index bbe4eee4b4..a136f04936 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/EliminateResolvedHint.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/optimizer/EliminateResolvedHint.scala @@ -34,7 +34,7 @@ object EliminateResolvedHint extends Rule[LogicalPlan] { val rightHint = mergeHints(collectHints(j.right)) j.copy(hint = JoinHint(leftHint, rightHint)) } - pulledUp.transform { + pulledUp.transformUp { case h: ResolvedHint => h.child } } diff --git a/sql/core/src/test/scala/org/apache/spark/sql/JoinHintSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/JoinHintSuite.scala index 3652895ff4..55f210cb04 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/JoinHintSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/JoinHintSuite.scala @@ -190,4 +190,13 @@ class JoinHintSuite extends PlanTest with SharedSQLContext { Some(HintInfo(broadcast = true))) :: Nil ) } + + test("nested hint") { + verifyJoinHint( + df.hint("broadcast").hint("broadcast").filter('id > 2).join(df, "id"), + JoinHint( + Some(HintInfo(broadcast = true)), + None) :: Nil + ) + } }