Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ public interface SparkThrowable {

// Portable error identifier across SQL engines
// If null, error class or SQLSTATE is not set
// Deprecated: Override this method to provide explicit SQL state instead of relying on error class reader
default String getSqlState() {
return SparkThrowableHelper.getSqlState(this.getCondition());
}
Expand Down
103 changes: 83 additions & 20 deletions common/utils/src/main/scala/org/apache/spark/SparkException.scala
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ class SparkException(
cause: Throwable,
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext] = Array.empty)
context: Array[QueryContext] = Array.empty,
sqlState: Option[String] = None)
extends Exception(message, cause) with SparkThrowable {

def this(message: String, cause: Throwable) =
Expand Down Expand Up @@ -71,6 +72,8 @@ class SparkException(

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand Down Expand Up @@ -170,7 +173,8 @@ private[spark] class SparkUpgradeException private(
message: String,
cause: Option[Throwable],
errorClass: Option[String],
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends RuntimeException(message, cause.orNull) with SparkThrowable {

def this(
Expand All @@ -188,6 +192,8 @@ private[spark] class SparkUpgradeException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
Expand All @@ -197,7 +203,8 @@ private[spark] class SparkArithmeticException private(
message: String,
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String] = None)
extends ArithmeticException(message) with SparkThrowable {

def this(
Expand All @@ -221,6 +228,9 @@ private[spark] class SparkArithmeticException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -230,7 +240,8 @@ private[spark] class SparkArithmeticException private(
private[spark] class SparkUnsupportedOperationException private(
message: String,
errorClass: Option[String],
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends UnsupportedOperationException(message) with SparkThrowable {

def this(
Expand Down Expand Up @@ -259,6 +270,8 @@ private[spark] class SparkUnsupportedOperationException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

private[spark] object SparkUnsupportedOperationException {
Expand All @@ -281,14 +294,17 @@ private[spark] object SparkUnsupportedOperationException {
private[spark] class SparkClassNotFoundException(
errorClass: String,
messageParameters: Map[String, String],
cause: Throwable = null)
cause: Throwable = null,
sqlState: Option[String] = None)
extends ClassNotFoundException(
SparkThrowableHelper.getMessage(errorClass, messageParameters), cause)
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
Expand All @@ -297,14 +313,17 @@ private[spark] class SparkClassNotFoundException(
private[spark] class SparkConcurrentModificationException(
errorClass: String,
messageParameters: Map[String, String],
cause: Throwable = null)
cause: Throwable = null,
sqlState: Option[String] = None)
extends ConcurrentModificationException(
SparkThrowableHelper.getMessage(errorClass, messageParameters), cause)
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
Expand All @@ -315,7 +334,8 @@ private[spark] class SparkDateTimeException private(
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext],
cause: Option[Throwable])
cause: Option[Throwable],
sqlState: Option[String] = None)
extends DateTimeException(message, cause.orNull) with SparkThrowable {

def this(
Expand Down Expand Up @@ -355,6 +375,9 @@ private[spark] class SparkDateTimeException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -363,14 +386,17 @@ private[spark] class SparkDateTimeException private(
*/
private[spark] class SparkFileNotFoundException(
errorClass: String,
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends FileNotFoundException(
SparkThrowableHelper.getMessage(errorClass, messageParameters))
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
Expand All @@ -380,7 +406,8 @@ private[spark] class SparkNumberFormatException private(
message: String,
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String] = None)
extends NumberFormatException(message)
with SparkThrowable {

Expand All @@ -405,6 +432,9 @@ private[spark] class SparkNumberFormatException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -416,7 +446,8 @@ private[spark] class SparkIllegalArgumentException private(
cause: Option[Throwable],
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String] = None)
extends IllegalArgumentException(message, cause.orNull)
with SparkThrowable {

Expand Down Expand Up @@ -457,6 +488,9 @@ private[spark] class SparkIllegalArgumentException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -467,7 +501,8 @@ private[spark] class SparkIllegalStateException(
errorClass: String,
messageParameters: Map[String, String],
context: Array[QueryContext] = Array.empty,
cause: Throwable = null)
cause: Throwable = null,
sqlState: Option[String] = None)
extends IllegalStateException(
SparkThrowableHelper.getMessage(errorClass, messageParameters), cause)
with SparkThrowable {
Expand All @@ -476,6 +511,8 @@ private[spark] class SparkIllegalStateException(

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -484,7 +521,8 @@ private[spark] class SparkRuntimeException private(
cause: Option[Throwable],
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String])
extends RuntimeException(message, cause.orNull) with SparkThrowable {

def this(
Expand All @@ -498,13 +536,17 @@ private[spark] class SparkRuntimeException private(
Option(cause),
Option(errorClass),
messageParameters,
context
context,
None
)
}

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -513,7 +555,8 @@ private[spark] class SparkPythonException private(
cause: Option[Throwable],
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String])
extends RuntimeException(message, cause.orNull) with SparkThrowable {

def this(
Expand All @@ -527,13 +570,17 @@ private[spark] class SparkPythonException private(
Option(cause),
Option(errorClass),
messageParameters,
context
context,
None
)
}

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -544,7 +591,8 @@ private[spark] class SparkNoSuchElementException(
errorClass: String,
messageParameters: Map[String, String],
context: Array[QueryContext] = Array.empty,
summary: String = "")
summary: String = "",
sqlState: Option[String] = None)
extends NoSuchElementException(
SparkThrowableHelper.getMessage(errorClass, messageParameters, summary))
with SparkThrowable {
Expand All @@ -553,6 +601,8 @@ private[spark] class SparkNoSuchElementException(

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -561,14 +611,17 @@ private[spark] class SparkNoSuchElementException(
*/
private[spark] class SparkSecurityException(
errorClass: String,
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends SecurityException(
SparkThrowableHelper.getMessage(errorClass, messageParameters))
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
Expand All @@ -578,7 +631,8 @@ private[spark] class SparkArrayIndexOutOfBoundsException private(
message: String,
errorClass: Option[String],
messageParameters: Map[String, String],
context: Array[QueryContext])
context: Array[QueryContext],
sqlState: Option[String] = None)
extends ArrayIndexOutOfBoundsException(message)
with SparkThrowable {

Expand All @@ -603,6 +657,9 @@ private[spark] class SparkArrayIndexOutOfBoundsException private(
override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass.orNull

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getQueryContext: Array[QueryContext] = context
}

Expand All @@ -611,27 +668,33 @@ private[spark] class SparkArrayIndexOutOfBoundsException private(
*/
private[spark] class SparkSQLException(
errorClass: String,
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends SQLException(
SparkThrowableHelper.getMessage(errorClass, messageParameters))
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}

/**
* SQL feature not supported exception thrown from Spark with an error class.
*/
private[spark] class SparkSQLFeatureNotSupportedException(
errorClass: String,
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends SQLFeatureNotSupportedException(
SparkThrowableHelper.getMessage(errorClass, messageParameters))
with SparkThrowable {

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)
}
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ class StreamingQueryException private[sql](
val startOffset: String,
val endOffset: String,
errorClass: String,
messageParameters: Map[String, String])
messageParameters: Map[String, String],
sqlState: Option[String] = None)
extends Exception(message, cause) with SparkThrowable {

private[spark] def this(
Expand Down Expand Up @@ -86,5 +87,7 @@ class StreamingQueryException private[sql](

override def getCondition: String = errorClass

override def getSqlState: String = sqlState.getOrElse(super.getSqlState)

override def getMessageParameters: java.util.Map[String, String] = messageParameters.asJava
}
Loading