Skip to content

Commit 7511caa

Browse files
zhulipengRaphaël Luta
authored andcommitted
[SPARK-27159][SQL] update mssql server dialect to support binary type
## What changes were proposed in this pull request? Change the binary type mapping from default blob to varbinary(max) for mssql server. https://docs.microsoft.com/en-us/sql/t-sql/data-types/binary-and-varbinary-transact-sql?view=sql-server-2017 ![image](https://user-images.githubusercontent.com/698621/54351715-0e8c8780-468b-11e9-8931-7ecb85c5ad6b.png) ## How was this patch tested? Unit test. Closes apache#24091 from lipzhu/SPARK-27159. Authored-by: Zhu, Lipeng <lipzhu@ebay.com> Signed-off-by: Sean Owen <sean.owen@databricks.com>
1 parent f1d7797 commit 7511caa

2 files changed

Lines changed: 13 additions & 0 deletions

File tree

sql/core/src/main/scala/org/apache/spark/sql/jdbc/MsSqlServerDialect.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ private object MsSqlServerDialect extends JdbcDialect {
3838
case TimestampType => Some(JdbcType("DATETIME", java.sql.Types.TIMESTAMP))
3939
case StringType => Some(JdbcType("NVARCHAR(MAX)", java.sql.Types.NVARCHAR))
4040
case BooleanType => Some(JdbcType("BIT", java.sql.Types.BIT))
41+
case BinaryType => Some(JdbcType("VARBINARY(MAX)", java.sql.Types.VARBINARY))
4142
case _ => None
4243
}
4344

sql/core/src/test/scala/org/apache/spark/sql/jdbc/JDBCSuite.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,18 @@ class JDBCSuite extends QueryTest
860860
Some(TimestampType))
861861
}
862862

863+
test("MsSqlServerDialect jdbc type mapping") {
864+
val msSqlServerDialect = JdbcDialects.get("jdbc:sqlserver")
865+
assert(msSqlServerDialect.getJDBCType(TimestampType).map(_.databaseTypeDefinition).get ==
866+
"DATETIME")
867+
assert(msSqlServerDialect.getJDBCType(StringType).map(_.databaseTypeDefinition).get ==
868+
"NVARCHAR(MAX)")
869+
assert(msSqlServerDialect.getJDBCType(BooleanType).map(_.databaseTypeDefinition).get ==
870+
"BIT")
871+
assert(msSqlServerDialect.getJDBCType(BinaryType).map(_.databaseTypeDefinition).get ==
872+
"VARBINARY(MAX)")
873+
}
874+
863875
test("table exists query by jdbc dialect") {
864876
val MySQL = JdbcDialects.get("jdbc:mysql://127.0.0.1/db")
865877
val Postgres = JdbcDialects.get("jdbc:postgresql://127.0.0.1/db")

0 commit comments

Comments
 (0)