Skip to content

Commit e08ab5b

Browse files
committed
Only resorts to FIXED_DECIMAL when the value can be held in a long
1 parent 4db713d commit e08ab5b

File tree

4 files changed

+16
-3
lines changed

4 files changed

+16
-3
lines changed

sql/core/src/main/scala/org/apache/spark/sql/columnar/ColumnAccessor.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ private[sql] object ColumnAccessor {
129129
case BinaryType => new BinaryColumnAccessor(dup)
130130
case DateType => new DateColumnAccessor(dup)
131131
case TimestampType => new TimestampColumnAccessor(dup)
132-
case DecimalType.Fixed(precision, scale) =>
132+
case DecimalType.Fixed(precision, scale) if precision < 19 =>
133133
new FixedDecimalColumnAccessor(dup, precision, scale)
134134
case _ => new GenericColumnAccessor(dup)
135135
}

sql/core/src/main/scala/org/apache/spark/sql/columnar/ColumnBuilder.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private[sql] object ColumnBuilder {
161161
case BinaryType => new BinaryColumnBuilder
162162
case DateType => new DateColumnBuilder
163163
case TimestampType => new TimestampColumnBuilder
164-
case DecimalType.Fixed(precision, scale) =>
164+
case DecimalType.Fixed(precision, scale) if precision < 19 =>
165165
new FixedDecimalColumnBuilder(precision, scale)
166166
case _ => new GenericColumnBuilder
167167
}

sql/core/src/main/scala/org/apache/spark/sql/columnar/ColumnType.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -454,7 +454,8 @@ private[sql] object ColumnType {
454454
case BinaryType => BINARY
455455
case DateType => DATE
456456
case TimestampType => TIMESTAMP
457-
case DecimalType.Fixed(precision, scale) => FIXED_DECIMAL(precision, scale)
457+
case DecimalType.Fixed(precision, scale) if precision < 19 =>
458+
FIXED_DECIMAL(precision, scale)
458459
case _ => GENERIC
459460
}
460461
}

sql/core/src/test/scala/org/apache/spark/sql/columnar/ColumnTypeSuite.scala

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,4 +216,16 @@ class ColumnTypeSuite extends FunSuite with Logging {
216216
if (sb.nonEmpty) sb.setLength(sb.length - 1)
217217
sb.toString()
218218
}
219+
220+
test("column type for decimal types with different precision") {
221+
(1 to 18).foreach { i =>
222+
assertResult(FIXED_DECIMAL(i, 0)) {
223+
ColumnType(DecimalType(i, 0))
224+
}
225+
}
226+
227+
assertResult(GENERIC) {
228+
ColumnType(DecimalType(19, 0))
229+
}
230+
}
219231
}

0 commit comments

Comments
 (0)