Skip to content

Commit a509e19

Browse files
committed
Support precision and scale of decimal type for JDBC.
1 parent f49284b commit a509e19

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ private[sql] object JDBCRDD extends Logging {
3737
* @param sqlType - A field of java.sql.Types
3838
* @return The Catalyst type corresponding to sqlType.
3939
*/
40-
private def getCatalystType(sqlType: Int): DataType = {
40+
private def getCatalystType(sqlType: Int, precision: Int, scale: Int): DataType = {
4141
val answer = sqlType match {
4242
case java.sql.Types.ARRAY => null
4343
case java.sql.Types.BIGINT => LongType
@@ -49,6 +49,8 @@ private[sql] object JDBCRDD extends Logging {
4949
case java.sql.Types.CLOB => StringType
5050
case java.sql.Types.DATALINK => null
5151
case java.sql.Types.DATE => DateType
52+
case java.sql.Types.DECIMAL
53+
if precision != 0 || scale != 0 => DecimalType(precision, scale)
5254
case java.sql.Types.DECIMAL => DecimalType.Unlimited
5355
case java.sql.Types.DISTINCT => null
5456
case java.sql.Types.DOUBLE => DoubleType
@@ -109,10 +111,11 @@ private[sql] object JDBCRDD extends Logging {
109111
val dataType = rsmd.getColumnType(i + 1)
110112
val typeName = rsmd.getColumnTypeName(i + 1)
111113
val fieldSize = rsmd.getPrecision(i + 1)
114+
val fieldScale = rsmd.getScale(i + 1)
112115
val nullable = rsmd.isNullable(i + 1) != ResultSetMetaData.columnNoNulls
113116
val metadata = new MetadataBuilder().putString("name", columnName)
114117
var columnType = quirks.getCatalystType(dataType, typeName, fieldSize, metadata)
115-
if (columnType == null) columnType = getCatalystType(dataType)
118+
if (columnType == null) columnType = getCatalystType(dataType, fieldSize, fieldScale)
116119
fields(i) = StructField(columnName, columnType, nullable, metadata.build())
117120
i = i + 1
118121
}
@@ -307,6 +310,7 @@ private[sql] class JDBCRDD(
307310
case BooleanType => BooleanConversion
308311
case DateType => DateConversion
309312
case DecimalType.Unlimited => DecimalConversion
313+
case DecimalType.Fixed(d) => DecimalConversion
310314
case DoubleType => DoubleConversion
311315
case FloatType => FloatConversion
312316
case IntegerType => IntegerConversion

0 commit comments

Comments
 (0)