@@ -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
@@ -61,6 +63,8 @@ private[sql] object JDBCRDD extends Logging {
6163 case java.sql.Types .NCHAR => StringType
6264 case java.sql.Types .NCLOB => StringType
6365 case java.sql.Types .NULL => null
66+ case java.sql.Types .NUMERIC
67+ if precision != 0 || scale != 0 => DecimalType (precision, scale)
6468 case java.sql.Types .NUMERIC => DecimalType .Unlimited
6569 case java.sql.Types .NVARCHAR => StringType
6670 case java.sql.Types .OTHER => null
@@ -109,10 +113,11 @@ private[sql] object JDBCRDD extends Logging {
109113 val dataType = rsmd.getColumnType(i + 1 )
110114 val typeName = rsmd.getColumnTypeName(i + 1 )
111115 val fieldSize = rsmd.getPrecision(i + 1 )
116+ val fieldScale = rsmd.getScale(i + 1 )
112117 val nullable = rsmd.isNullable(i + 1 ) != ResultSetMetaData .columnNoNulls
113118 val metadata = new MetadataBuilder ().putString(" name" , columnName)
114119 var columnType = quirks.getCatalystType(dataType, typeName, fieldSize, metadata)
115- if (columnType == null ) columnType = getCatalystType(dataType)
120+ if (columnType == null ) columnType = getCatalystType(dataType, fieldSize, fieldScale )
116121 fields(i) = StructField (columnName, columnType, nullable, metadata.build())
117122 i = i + 1
118123 }
@@ -307,6 +312,7 @@ private[sql] class JDBCRDD(
307312 case BooleanType => BooleanConversion
308313 case DateType => DateConversion
309314 case DecimalType .Unlimited => DecimalConversion
315+ case DecimalType .Fixed (d) => DecimalConversion
310316 case DoubleType => DoubleConversion
311317 case FloatType => FloatConversion
312318 case IntegerType => IntegerConversion
0 commit comments