aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDilip Biswal <dbiswal@us.ibm.com>2017-03-08 17:33:49 -0800
committerXiao Li <gatorsmile@gmail.com>2017-03-08 17:33:49 -0800
commitd809ceed9762d5bbb04170e45f38751713112dd8 (patch)
tree066b3cfd931db03ab5b6203a9adca6226c327aa6
parenta3648b5d4f99ff9461d02f53e9ec71787a3abf51 (diff)
downloadspark-d809ceed9762d5bbb04170e45f38751713112dd8.tar.gz
spark-d809ceed9762d5bbb04170e45f38751713112dd8.tar.bz2
spark-d809ceed9762d5bbb04170e45f38751713112dd8.zip
[MINOR][SQL] The analyzer rules are fired twice for cases when AnalysisException is raised from analyzer.
## What changes were proposed in this pull request? In general we have a checkAnalysis phase which validates the logical plan and throws AnalysisException on semantic errors. However we also can throw AnalysisException from a few analyzer rules like ResolveSubquery. I found that we fire up the analyzer rules twice for the queries that throw AnalysisException from one of the analyzer rules. This is a very minor fix. We don't have to strictly fix it. I just got confused seeing the rule getting fired two times when i was not expecting it. ## How was this patch tested? Tested manually. Author: Dilip Biswal <dbiswal@us.ibm.com> Closes #17214 from dilipbiswal/analyis_twice.
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/QueryExecution.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/QueryExecution.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/QueryExecution.scala
index 6ec2f4d840..9a3656ddc7 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/QueryExecution.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/QueryExecution.scala
@@ -46,9 +46,14 @@ class QueryExecution(val sparkSession: SparkSession, val logical: LogicalPlan) {
protected def planner = sparkSession.sessionState.planner
def assertAnalyzed(): Unit = {
- try sparkSession.sessionState.analyzer.checkAnalysis(analyzed) catch {
+ // Analyzer is invoked outside the try block to avoid calling it again from within the
+ // catch block below.
+ analyzed
+ try {
+ sparkSession.sessionState.analyzer.checkAnalysis(analyzed)
+ } catch {
case e: AnalysisException =>
- val ae = new AnalysisException(e.message, e.line, e.startPosition, Some(analyzed))
+ val ae = new AnalysisException(e.message, e.line, e.startPosition, Option(analyzed))
ae.setStackTrace(e.getStackTrace)
throw ae
}