From 2d01bccbd4c93bfbfa1a9e618fcb795b7106f01c Mon Sep 17 00:00:00 2001 From: maryannxue Date: Wed, 9 Jan 2019 14:31:26 -0800 Subject: [PATCH] [SPARK-26065][FOLLOW-UP][SQL] Fix the Failure when having two Consecutive Hints ## What changes were proposed in this pull request? This is to fix a bug in https://github.com/apache/spark/pull/23036, which would lead to an exception in case of two consecutive hints. ## How was this patch tested? Added a new test. Closes #23501 from maryannxue/query-hint-followup. Authored-by: maryannxue Signed-off-by: gatorsmile --- .../sql/catalyst/optimizer/EliminateResolvedHint.scala | 2 +- .../test/scala/org/apache/spark/sql/JoinHintSuite.scala | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) 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 + ) + } }