This is an automated email from the ASF dual-hosted git repository.
wenchen 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 c28da67 [SPARK-32382][SQL] Override table renaming in JDBC dialects
c28da67 is described below
commit c28da672f862765f80adfcdd21dfd7265608af11
Author: Max Gekk <[email protected]>
AuthorDate: Tue Jul 28 12:34:10 2020 +0000
[SPARK-32382][SQL] Override table renaming in JDBC dialects
### What changes were proposed in this pull request?
Override the default implementation of `JdbcDialect.renameTable()`:
```scala
s"ALTER TABLE $oldTable RENAME TO $newTable"
```
in the following JDBC dialects according to official documentation:
- DB2
- Derby
- MS SQL Server
- Teradata
Other dialects follow the default implementation:
- MySQL: https://dev.mysql.com/doc/refman/8.0/en/alter-table.html
- Oracle:
https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/ALTER-TABLE.html#GUID-552E7373-BF93-477D-9DA3-B2C9386F2877
- PostgreSQL: https://www.postgresql.org/docs/12/sql-altertable.html
### Why are the changes needed?
To have correct implementation of table renaming for all supported JDBC
dialects.
### Does this PR introduce _any_ user-facing change?
Yes
### How was this patch tested?
Manually
Closes #29237 from MaxGekk/jdbc-rename-table.
Authored-by: Max Gekk <[email protected]>
Signed-off-by: Wenchen Fan <[email protected]>
---
sql/core/src/main/scala/org/apache/spark/sql/jdbc/DB2Dialect.scala | 7 +++++++
.../src/main/scala/org/apache/spark/sql/jdbc/DerbyDialect.scala | 5 +++++
.../main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala | 7 +++++++
.../src/main/scala/org/apache/spark/sql/jdbc/TeradataDialect.scala | 5 +++++
4 files changed, 24 insertions(+)
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DB2Dialect.scala
b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DB2Dialect.scala
index ab574df..430ca9e 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DB2Dialect.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DB2Dialect.scala
@@ -51,4 +51,11 @@ private object DB2Dialect extends JdbcDialect {
}
override def isCascadingTruncateTable(): Option[Boolean] = Some(false)
+
+ // scalastyle:off line.size.limit
+ // See
https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000980.html
+ // scalastyle:on line.size.limit
+ override def renameTable(oldTable: String, newTable: String): String = {
+ s"RENAME TABLE $oldTable TO $newTable"
+ }
}
diff --git
a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DerbyDialect.scala
b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DerbyDialect.scala
index d528d5a..9ca8879 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DerbyDialect.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/DerbyDialect.scala
@@ -45,4 +45,9 @@ private object DerbyDialect extends JdbcDialect {
}
override def isCascadingTruncateTable(): Option[Boolean] = Some(false)
+
+ // See
https://db.apache.org/derby/docs/10.5/ref/rrefsqljrenametablestatement.html
+ override def renameTable(oldTable: String, newTable: String): String = {
+ s"RENAME TABLE $oldTable TO $newTable"
+ }
}
diff --git
a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala
b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala
index 72284b5..1c6e8c3 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala
@@ -57,4 +57,11 @@ private object MsSqlServerDialect extends JdbcDialect {
}
override def isCascadingTruncateTable(): Option[Boolean] = Some(false)
+
+ // scalastyle:off line.size.limit
+ // See
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-rename-transact-sql?view=sql-server-ver15
+ // scalastyle:on line.size.limit
+ override def renameTable(oldTable: String, newTable: String): String = {
+ s"EXEC sp_rename $oldTable, $newTable"
+ }
}
diff --git
a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/TeradataDialect.scala
b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/TeradataDialect.scala
index 552d7a4..58fe62c 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/jdbc/TeradataDialect.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/jdbc/TeradataDialect.scala
@@ -50,4 +50,9 @@ private case object TeradataDialect extends JdbcDialect {
cascade: Option[Boolean] = isCascadingTruncateTable): String = {
s"DELETE FROM $table ALL"
}
+
+ // See
https://docs.teradata.com/reader/scPHvjfglIlB8F70YliLAw/wysTNUMsP~0aGzksLCl1kg
+ override def renameTable(oldTable: String, newTable: String): String = {
+ s"RENAME TABLE $oldTable TO $newTable"
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]