diff --git a/core/src/main/resources/error/error-classes.json b/core/src/main/resources/error/error-classes.json index 3e15334931bd1..29f1f4f0b3007 100644 --- a/core/src/main/resources/error/error-classes.json +++ b/core/src/main/resources/error/error-classes.json @@ -239,12 +239,6 @@ } } }, - "INDEX_OUT_OF_BOUNDS" : { - "message" : [ - "Index must be between 0 and the length of the ArrayData." - ], - "sqlState" : "22023" - }, "INTERNAL_ERROR" : { "message" : [ "" diff --git a/core/src/main/scala/org/apache/spark/SparkException.scala b/core/src/main/scala/org/apache/spark/SparkException.scala index 67aa8cdfcac83..aea796685ee4b 100644 --- a/core/src/main/scala/org/apache/spark/SparkException.scala +++ b/core/src/main/scala/org/apache/spark/SparkException.scala @@ -316,22 +316,6 @@ private[spark] class SparkIllegalArgumentException( override def getQueryContext: Array[QueryContext] = context } -/** - * Index out of bounds exception thrown from Spark with an error class. - */ -private[spark] class SparkIndexOutOfBoundsException( - errorClass: String, - errorSubClass: Option[String] = None, - messageParameters: Array[String]) - extends IndexOutOfBoundsException( - SparkThrowableHelper.getMessage(errorClass, errorSubClass.orNull, messageParameters)) - with SparkThrowable { - - override def getMessageParameters: Array[String] = messageParameters - override def getErrorClass: String = errorClass - override def getErrorSubClass: String = errorSubClass.orNull -} - /** * IO exception thrown from Spark with an error class. */ diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala index f5497665f2f18..51759df901c01 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/util/ArrayData.scala @@ -19,6 +19,7 @@ package org.apache.spark.sql.catalyst.util import scala.reflect.ClassTag +import org.apache.spark.SparkException import org.apache.spark.sql.catalyst.InternalRow import org.apache.spark.sql.catalyst.expressions.{SpecializedGetters, UnsafeArrayData} import org.apache.spark.sql.errors.QueryExecutionErrors @@ -200,7 +201,8 @@ class ArrayDataIndexedSeq[T](arrayData: ArrayData, dataType: DataType) extends I if (0 <= idx && idx < arrayData.numElements()) { accessor(arrayData, idx).asInstanceOf[T] } else { - throw QueryExecutionErrors.indexOutOfBoundsOfArrayDataError(idx) + throw SparkException.internalError( + s"Index $idx must be between 0 and the length of the ArrayData.") } override def length: Int = arrayData.numElements() diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala index f4ec70e81d999..662a10cf3acf9 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryExecutionErrors.scala @@ -1372,11 +1372,6 @@ private[sql] object QueryExecutionErrors extends QueryErrorsBase { """.stripMargin.replaceAll("\n", " ")) } - def indexOutOfBoundsOfArrayDataError(idx: Int): Throwable = { - new SparkIndexOutOfBoundsException( - errorClass = "INDEX_OUT_OF_BOUNDS", None, Array(toSQLValue(idx, IntegerType))) - } - def malformedRecordsDetectedInRecordParsingError(e: BadRecordException): Throwable = { new SparkException("Malformed records are detected in record parsing. " + s"Parse Mode: ${FailFastMode.name}. To process malformed records as null " + diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/ArrayDataIndexedSeqSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/ArrayDataIndexedSeqSuite.scala index 56d2af7cb7e87..b015829e67259 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/ArrayDataIndexedSeqSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/util/ArrayDataIndexedSeqSuite.scala @@ -19,7 +19,7 @@ package org.apache.spark.sql.catalyst.util import scala.util.Random -import org.apache.spark.SparkFunSuite +import org.apache.spark.{SparkException, SparkFunSuite} import org.apache.spark.sql.RandomDataGenerator import org.apache.spark.sql.catalyst.encoders.{ExamplePointUDT, RowEncoder} import org.apache.spark.sql.catalyst.expressions.{SafeProjection, UnsafeProjection} @@ -53,13 +53,15 @@ class ArrayDataIndexedSeqSuite extends SparkFunSuite { } } - intercept[IndexOutOfBoundsException] { - seq(-1) - }.getMessage().contains("must be between 0 and the length of the ArrayData.") - - intercept[IndexOutOfBoundsException] { - seq(seq.length) - }.getMessage().contains("must be between 0 and the length of the ArrayData.") + Seq(-1, seq.length).foreach { index => + checkError( + exception = intercept[SparkException] { + seq(index) + }, + errorClass = "INTERNAL_ERROR", + parameters = Map( + "message" -> s"Index $index must be between 0 and the length of the ArrayData.")) + } } private def testArrayData(): Unit = {