Skip to content

Commit b874527

Browse files
committed
Addressed Review comments on PR. 1. Fixed test cases related to TINYINT and FLOAT in MsSqlServerIntegrationSuite.scala. 2. code cleanup in MsSqlServerDialect.scala 3. Fixed issue in JdbcUtils where tinyInt was being written as Int and failing the 'basic write' test cases in IntegrationSuite.
1 parent 3edc863 commit b874527

File tree

3 files changed

+18
-17
lines changed

3 files changed

+18
-17
lines changed

external/docker-integration-tests/src/test/scala/org/apache/spark/sql/jdbc/MsSqlServerIntegrationSuite.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -118,26 +118,28 @@ class MsSqlServerIntegrationSuite extends DockerJDBCIntegrationSuite {
118118
val row = rows(0)
119119
val types = row.toSeq.map(x => x.getClass.toString)
120120
assert(types.length == 12)
121+
121122
assert(types(0).equals("class java.lang.Boolean"))
122-
assert(types(1).equals("class java.lang.Integer"))
123-
assert(types(2).equals("class java.lang.Integer"))
123+
assert(types(1).equals("class java.lang.Byte"))
124+
assert(types(2).equals("class java.lang.Short"))
124125
assert(types(3).equals("class java.lang.Integer"))
125126
assert(types(4).equals("class java.lang.Long"))
126127
assert(types(5).equals("class java.lang.Double"))
127-
assert(types(6).equals("class java.lang.Double"))
128-
assert(types(7).equals("class java.lang.Double"))
128+
assert(types(6).equals("class java.lang.Float"))
129+
assert(types(7).equals("class java.lang.Float"))
129130
assert(types(8).equals("class java.math.BigDecimal"))
130131
assert(types(9).equals("class java.math.BigDecimal"))
131132
assert(types(10).equals("class java.math.BigDecimal"))
132133
assert(types(11).equals("class java.math.BigDecimal"))
133134
assert(row.getBoolean(0) == false)
134-
assert(row.getInt(1) == 255)
135-
assert(row.getInt(2) == 32767)
135+
136+
assert(row.getByte(1) == 255.toByte)
137+
assert(row.getShort(2) == 32767)
136138
assert(row.getInt(3) == 2147483647)
137139
assert(row.getLong(4) == 9223372036854775807L)
138140
assert(row.getDouble(5) == 1.2345678901234512E14) // float = float(53) has 15-digits precision
139-
assert(row.getDouble(6) == 1.23456788103168E14) // float(24) has 7-digits precision
140-
assert(row.getDouble(7) == 1.23456788103168E14) // real = float(24)
141+
assert(row.getFloat(6) == 1.23456788103168E14) // float(24) has 7-digits precision
142+
assert(row.getFloat(7) == 1.23456788103168E14) // real = float(24)
141143
assert(row.getAs[BigDecimal](8).equals(new BigDecimal("123.00")))
142144
assert(row.getAs[BigDecimal](9).equals(new BigDecimal("12345.12000")))
143145
assert(row.getAs[BigDecimal](10).equals(new BigDecimal("922337203685477.5800")))

sql/core/src/main/scala/org/apache/spark/sql/execution/datasources/jdbc/JdbcUtils.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -554,7 +554,7 @@ object JdbcUtils extends Logging {
554554

555555
case ByteType =>
556556
(stmt: PreparedStatement, row: Row, pos: Int) =>
557-
stmt.setInt(pos + 1, row.getByte(pos))
557+
stmt.setByte(pos + 1, row.getByte(pos))
558558

559559
case BooleanType =>
560560
(stmt: PreparedStatement, row: Row, pos: Int) =>

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

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,12 @@ private object MsSqlServerDialect extends JdbcDialect {
3030
// String is recommend by Microsoft SQL Server for datetimeoffset types in non-MS clients
3131
Option(StringType)
3232
} else {
33-
val answer = sqlType match {
34-
case java.sql.Types.TINYINT => Option(ByteType)
35-
case java.sql.Types.SMALLINT => Option(ShortType)
36-
case java.sql.Types.REAL => Option(FloatType)
37-
case _ => None
33+
sqlType match {
34+
case java.sql.Types.TINYINT => Some(ByteType)
35+
case java.sql.Types.SMALLINT => Some(ShortType)
36+
case java.sql.Types.REAL => Some(FloatType)
37+
case _ => None
3838
}
39-
answer
4039
}
4140
}
4241

@@ -45,8 +44,8 @@ private object MsSqlServerDialect extends JdbcDialect {
4544
case StringType => Some(JdbcType("NVARCHAR(MAX)", java.sql.Types.NVARCHAR))
4645
case BooleanType => Some(JdbcType("BIT", java.sql.Types.BIT))
4746
case BinaryType => Some(JdbcType("VARBINARY(MAX)", java.sql.Types.VARBINARY))
48-
case ByteType => Option(JdbcType("TINYINT", java.sql.Types.TINYINT))
49-
case ShortType => Option(JdbcType("SMALLINT", java.sql.Types.SMALLINT))
47+
case ByteType => Some(JdbcType("TINYINT", java.sql.Types.TINYINT))
48+
case ShortType => Some(JdbcType("SMALLINT", java.sql.Types.SMALLINT))
5049
case _ => None
5150
}
5251

0 commit comments

Comments
 (0)