From b44faa86fa3a57c54947bfd65d665c305970f4d0 Mon Sep 17 00:00:00 2001 From: Kent Yao Date: Thu, 15 Mar 2018 20:10:38 +0800 Subject: [PATCH] fixes #3 handle parse exception --- .../yaooqinn/kyuubi/operation/KyuubiOperation.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/scala/yaooqinn/kyuubi/operation/KyuubiOperation.scala b/src/main/scala/yaooqinn/kyuubi/operation/KyuubiOperation.scala index a98ce2c01..638d0e08e 100644 --- a/src/main/scala/yaooqinn/kyuubi/operation/KyuubiOperation.scala +++ b/src/main/scala/yaooqinn/kyuubi/operation/KyuubiOperation.scala @@ -34,6 +34,7 @@ import org.apache.hive.service.cli._ import org.apache.hive.service.cli.thrift.TProtocolVersion import org.apache.spark.SparkUtils import org.apache.spark.sql.{AnalysisException, DataFrame, Row, SparkSQLUtils} +import org.apache.spark.sql.catalyst.parser.ParseException import org.apache.spark.sql.types._ import yaooqinn.kyuubi.Logging @@ -381,20 +382,21 @@ class KyuubiOperation(session: KyuubiSession, statement: String) extends Logging } catch { case e: HiveSQLException => if (!isClosedOrCanceled) { - setState(OperationState.ERROR) onStatementError(statementId, e.getMessage, SparkUtils.exceptionString(e)) throw e } - case e: AnalysisException => - error(s"Error executing query, currentState ${getStatus.getState}, ", e) + case e: ParseException => + if (!isClosedOrCanceled) { + onStatementError(statementId, e.getMessage, SparkUtils.exceptionString(e)) + throw new HiveSQLException(e.getMessage(), "ParseException", e) + } + case e: AnalysisException => if (!isClosedOrCanceled) { - setState(OperationState.ERROR) onStatementError(statementId, e.getMessage, SparkUtils.exceptionString(e)) throw new HiveSQLException(e.getMessage(), "AnalysisException", e) } case e: Throwable => - error(s"Error executing query, currentState ${getStatus.getState}, ", e) if (!isClosedOrCanceled) { onStatementError(statementId, e.getMessage, SparkUtils.exceptionString(e)) throw new HiveSQLException(e.toString) @@ -408,6 +410,7 @@ class KyuubiOperation(session: KyuubiSession, statement: String) extends Logging private[this] def onStatementError( id: String, errorMessage: String, errorTrace: String): Unit = { + error(s"Error executing query, currentState ${getStatus.getState}, $errorMessage") setState(OperationState.ERROR) KyuubiServerMonitor.getListener(session.getUserName) .onStatementError(id, errorMessage, errorTrace)