You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@spark.apache.org by ma...@apache.org on 2022/05/13 16:29:40 UTC
[spark] branch master updated: [SPARK-38751][SQL][TESTS] Test the error class: UNRECOGNIZED_SQL_TYPE
This is an automated email from the ASF dual-hosted git repository.
maxgekk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/spark.git
The following commit(s) were added to refs/heads/master by this push:
new bbf3a2eafa0 [SPARK-38751][SQL][TESTS] Test the error class: UNRECOGNIZED_SQL_TYPE
bbf3a2eafa0 is described below
commit bbf3a2eafa004f712799261ef883dcc457a072fd
Author: panbingkun <pb...@gmail.com>
AuthorDate: Fri May 13 19:29:02 2022 +0300
[SPARK-38751][SQL][TESTS] Test the error class: UNRECOGNIZED_SQL_TYPE
## What changes were proposed in this pull request?
This PR aims to add a test for the error class UNRECOGNIZED_SQL_TYPE to `QueryExecutionErrorsSuite`.
### Why are the changes needed?
The changes improve test coverage, and document expected error messages in tests.
### Does this PR introduce any user-facing change?
No
### How was this patch tested?
By running new test:
```
$ build/sbt "sql/testOnly *QueryExecutionErrorsSuite*"
```
Closes #36463 from panbingkun/SPARK-38751.
Authored-by: panbingkun <pb...@gmail.com>
Signed-off-by: Max Gekk <ma...@gmail.com>
---
.../sql/errors/QueryExecutionErrorsSuite.scala | 89 +++++++++++++++++++++-
1 file changed, 86 insertions(+), 3 deletions(-)
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/errors/QueryExecutionErrorsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/errors/QueryExecutionErrorsSuite.scala
index 7a5592c148a..cf1551298a8 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/errors/QueryExecutionErrorsSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/errors/QueryExecutionErrorsSuite.scala
@@ -19,23 +19,27 @@ package org.apache.spark.sql.errors
import java.io.IOException
import java.net.URL
-import java.util.{Locale, ServiceConfigurationError}
+import java.sql.{Connection, DriverManager, PreparedStatement, ResultSet, ResultSetMetaData}
+import java.util.{Locale, Properties, ServiceConfigurationError}
import org.apache.hadoop.fs.{LocalFileSystem, Path}
import org.apache.hadoop.fs.permission.FsPermission
+import org.mockito.Mockito.{mock, when}
import test.org.apache.spark.sql.connector.JavaSimpleWritableDataSource
-import org.apache.spark.{SparkArithmeticException, SparkClassNotFoundException, SparkException, SparkIllegalArgumentException, SparkIllegalStateException, SparkRuntimeException, SparkSecurityException, SparkUnsupportedOperationException, SparkUpgradeException}
+import org.apache.spark.{SparkArithmeticException, SparkClassNotFoundException, SparkException, SparkIllegalArgumentException, SparkIllegalStateException, SparkRuntimeException, SparkSecurityException, SparkSQLException, SparkUnsupportedOperationException, SparkUpgradeException}
import org.apache.spark.sql.{AnalysisException, DataFrame, QueryTest, SaveMode}
import org.apache.spark.sql.catalyst.util.BadRecordException
import org.apache.spark.sql.connector.SimpleWritableDataSource
import org.apache.spark.sql.execution.QueryExecutionException
+import org.apache.spark.sql.execution.datasources.jdbc.{DriverRegistry, JDBCOptions}
import org.apache.spark.sql.execution.datasources.orc.OrcTest
import org.apache.spark.sql.execution.datasources.parquet.ParquetTest
import org.apache.spark.sql.functions.{lit, lower, struct, sum, udf}
import org.apache.spark.sql.internal.SQLConf
import org.apache.spark.sql.internal.SQLConf.LegacyBehaviorPolicy.EXCEPTION
-import org.apache.spark.sql.types.{DecimalType, StructType, TimestampType}
+import org.apache.spark.sql.jdbc.{JdbcDialect, JdbcDialects}
+import org.apache.spark.sql.types.{DataType, DecimalType, MetadataBuilder, StructType, TimestampType}
import org.apache.spark.sql.util.ArrowUtils
import org.apache.spark.util.Utils
@@ -514,6 +518,85 @@ class QueryExecutionErrorsSuite
"META-INF/services/org.apache.spark.sql.sources.DataSourceRegister")
}
}
+
+ test("UNRECOGNIZED_SQL_TYPE: unrecognized SQL type -100") {
+ Utils.classForName("org.h2.Driver")
+
+ val properties = new Properties()
+ properties.setProperty("user", "testUser")
+ properties.setProperty("password", "testPass")
+
+ val url = "jdbc:h2:mem:testdb0"
+ val urlWithUserAndPass = "jdbc:h2:mem:testdb0;user=testUser;password=testPass"
+ val tableName = "test.table1"
+ val unrecognizedColumnType = -100
+
+ var conn: java.sql.Connection = null
+ try {
+ conn = DriverManager.getConnection(url, properties)
+ conn.prepareStatement("create schema test").executeUpdate()
+ conn.commit()
+
+ conn.prepareStatement(s"create table $tableName (a INT)").executeUpdate()
+ conn.prepareStatement(
+ s"insert into $tableName values (1)").executeUpdate()
+ conn.commit()
+ } finally {
+ if (null != conn) {
+ conn.close()
+ }
+ }
+
+ val testH2DialectUnrecognizedSQLType = new JdbcDialect {
+ override def canHandle(url: String): Boolean = url.startsWith("jdbc:h2")
+
+ override def getCatalystType(sqlType: Int, typeName: String, size: Int,
+ md: MetadataBuilder): Option[DataType] = {
+ sqlType match {
+ case _ => None
+ }
+ }
+
+ override def createConnectionFactory(options: JDBCOptions): Int => Connection = {
+ val driverClass: String = options.driverClass
+
+ (_: Int) => {
+ DriverRegistry.register(driverClass)
+
+ val resultSetMetaData = mock(classOf[ResultSetMetaData])
+ when(resultSetMetaData.getColumnCount).thenReturn(1)
+ when(resultSetMetaData.getColumnType(1)).thenReturn(unrecognizedColumnType)
+
+ val resultSet = mock(classOf[ResultSet])
+ when(resultSet.next()).thenReturn(true).thenReturn(false)
+ when(resultSet.getMetaData).thenReturn(resultSetMetaData)
+
+ val preparedStatement = mock(classOf[PreparedStatement])
+ when(preparedStatement.executeQuery).thenReturn(resultSet)
+
+ val connection = mock(classOf[Connection])
+ when(connection.prepareStatement(s"SELECT * FROM $tableName WHERE 1=0")).
+ thenReturn(preparedStatement)
+
+ connection
+ }
+ }
+ }
+
+ val existH2Dialect = JdbcDialects.get(urlWithUserAndPass)
+ JdbcDialects.unregisterDialect(existH2Dialect)
+
+ JdbcDialects.registerDialect(testH2DialectUnrecognizedSQLType)
+
+ checkErrorClass(
+ exception = intercept[SparkSQLException] {
+ spark.read.jdbc(urlWithUserAndPass, tableName, new Properties()).collect()
+ },
+ errorClass = "UNRECOGNIZED_SQL_TYPE",
+ msg = s"Unrecognized SQL type $unrecognizedColumnType")
+
+ JdbcDialects.unregisterDialect(testH2DialectUnrecognizedSQLType)
+ }
}
class FakeFileSystemSetPermission extends LocalFileSystem {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@spark.apache.org
For additional commands, e-mail: commits-help@spark.apache.org