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 f1e5a136fa79 [SPARK-46393][SQL] Classify exceptions in the JDBC table
catalog
f1e5a136fa79 is described below
commit f1e5a136fa79449878bb3bd2cc304c9dde020ce8
Author: Max Gekk <[email protected]>
AuthorDate: Thu Dec 14 11:01:34 2023 +0300
[SPARK-46393][SQL] Classify exceptions in the JDBC table catalog
### What changes were proposed in this pull request?
In the PR, I propose to handle exceptions from JDBC drivers in the JDBC
table catalog, classify them and converted to appropriate Spark exception w/ an
error class. This PR covers the following functions where such errors haven't
been classified yet:
- list tables
- namespace exists
- list namespaces
### Why are the changes needed?
To unify Spark exceptions, and migrate onto new error framework.
### Does this PR introduce _any_ user-facing change?
Yes, if user code expects that Spark SQL bypass Java exceptions from JDBC
drivers.
### How was this patch tested?
By existing test suites:
```
$ build/sbt "test:testOnly *JDBCV2Suite"
$ build/sbt "test:testOnly *JDBCTableCatalogSuite"
```
### Was this patch authored or co-authored using generative AI tooling?
No.
Closes #44335 from MaxGekk/classifyException-JDBCTableCatalog.
Authored-by: Max Gekk <[email protected]>
Signed-off-by: Max Gekk <[email protected]>
---
.../execution/datasources/v2/jdbc/JDBCTableCatalog.scala | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git
a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalog.scala
b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalog.scala
index 0084abb392ef..6c773d4fb1b0 100644
---
a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalog.scala
+++
b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/v2/jdbc/JDBCTableCatalog.scala
@@ -65,8 +65,10 @@ class JDBCTableCatalog extends TableCatalog
checkNamespace(namespace)
JdbcUtils.withConnection(options) { conn =>
val schemaPattern = if (namespace.length == 1) namespace.head else null
- val rs = conn.getMetaData
- .getTables(null, schemaPattern, "%", Array("TABLE"))
+ val rs = JdbcUtils.classifyException(
+ s"Failed get tables from: ${namespace.mkString(".")}", dialect) {
+ conn.getMetaData.getTables(null, schemaPattern, "%", Array("TABLE"))
+ }
new Iterator[Identifier] {
def hasNext = rs.next()
def next() = Identifier.of(namespace, rs.getString("TABLE_NAME"))
@@ -179,14 +181,18 @@ class JDBCTableCatalog extends TableCatalog
override def namespaceExists(namespace: Array[String]): Boolean = namespace
match {
case Array(db) =>
JdbcUtils.withConnection(options) { conn =>
- JdbcUtils.schemaExists(conn, options, db)
+ JdbcUtils.classifyException(s"Failed namespace exists:
${namespace.mkString}", dialect) {
+ JdbcUtils.schemaExists(conn, options, db)
+ }
}
case _ => false
}
override def listNamespaces(): Array[Array[String]] = {
JdbcUtils.withConnection(options) { conn =>
- JdbcUtils.listSchemas(conn, options)
+ JdbcUtils.classifyException(s"Failed list namespaces", dialect) {
+ JdbcUtils.listSchemas(conn, options)
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]