aboutsummaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorDavies Liu <davies@databricks.com>2016-08-23 09:45:13 -0700
committerDavies Liu <davies.liu@gmail.com>2016-08-23 09:45:13 -0700
commit9afdfc94f49395e69a7959e881c19d787ce00c3e (patch)
treeaccb57cb5c65614c2ccddefa7e06e7a6c8bc0b45 /sql
parent97d461b75badbfa323d7f1508b20600ea189bb95 (diff)
downloadspark-9afdfc94f49395e69a7959e881c19d787ce00c3e.tar.gz
spark-9afdfc94f49395e69a7959e881c19d787ce00c3e.tar.bz2
spark-9afdfc94f49395e69a7959e881c19d787ce00c3e.zip
[SPARK-13286] [SQL] add the next expression of SQLException as cause
## What changes were proposed in this pull request? Some JDBC driver (for example PostgreSQL) does not use the underlying exception as cause, but have another APIs (getNextException) to access that, so it it's included in the error logging, making us hard to find the root cause, especially in batch mode. This PR will pull out the next exception and add it as cause (if it's different) or suppressed (if there is another different cause). ## How was this patch tested? Can't reproduce this on the default JDBC driver, so did not add a regression test. Author: Davies Liu <davies@databricks.com> Closes #14722 from davies/keep_cause.
Diffstat (limited to 'sql')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala
index a33c26d813..cbd504603b 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala
@@ -17,7 +17,7 @@
package org.apache.spark.sql.execution.datasources.jdbc
-import java.sql.{Connection, Driver, DriverManager, PreparedStatement}
+import java.sql.{Connection, Driver, DriverManager, PreparedStatement, SQLException}
import java.util.Properties
import scala.collection.JavaConverters._
@@ -289,7 +289,7 @@ object JdbcUtils extends Logging {
}
val stmt = insertStatement(conn, table, rddSchema, dialect)
val setters: Array[JDBCValueSetter] = rddSchema.fields.map(_.dataType)
- .map(makeSetter(conn, dialect, _)).toArray
+ .map(makeSetter(conn, dialect, _)).toArray
try {
var rowCount = 0
@@ -322,6 +322,17 @@ object JdbcUtils extends Logging {
conn.commit()
}
committed = true
+ } catch {
+ case e: SQLException =>
+ val cause = e.getNextException
+ if (e.getCause != cause) {
+ if (e.getCause == null) {
+ e.initCause(cause)
+ } else {
+ e.addSuppressed(cause)
+ }
+ }
+ throw e
} finally {
if (!committed) {
// The stage must fail. We got here through an exception path, so