summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2017-12-20 21:55:51 +0500
committerTim Graham <timograham@gmail.com>2017-12-20 11:55:51 -0500
commitc8a85e3e91bf829671b4a8cbd105fbabce945174 (patch)
tree659ce4e0f1914489744fd7198824d3470069fa64
parentfc9eec7bb7d5e3e6426bb612277bfcecb943e8ac (diff)
Fixed #28932 -- Prevented Oracle from truncating trailing zeros in the fractional part of DecimalField.
Fixes the test added in 6fd6d8383f48ea2fe4e058725fa30529a083e9a5. Regression in 7c1f3901bcdabb1340a621e7df9b24f3acd0d6f3.
-rw-r--r--django/db/backends/oracle/base.py10
1 files changed, 9 insertions, 1 deletions
diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py
index 45c3c4e475..488a1b08ab 100644
--- a/django/db/backends/oracle/base.py
+++ b/django/db/backends/oracle/base.py
@@ -402,6 +402,14 @@ class FormatStylePlaceholderCursor:
return decimal.Decimal(value) if '.' in value else int(value)
@staticmethod
+ def _get_decimal_converter(precision, scale):
+ if scale == 0:
+ return int
+ context = decimal.Context(prec=precision)
+ quantize_value = decimal.Decimal(1).scaleb(-scale)
+ return lambda v: decimal.Decimal(v).quantize(quantize_value, context=context)
+
+ @staticmethod
def _output_type_handler(cursor, name, defaultType, length, precision, scale):
"""
Called for each db column fetched from cursors. Return numbers as the
@@ -421,7 +429,7 @@ class FormatStylePlaceholderCursor:
elif precision > 0:
# NUMBER(p,s) column: decimal-precision fixed point.
# This comes from IntegerField and DecimalField columns.
- outconverter = int if scale == 0 else decimal.Decimal
+ outconverter = FormatStylePlaceholderCursor._get_decimal_converter(precision, scale)
else:
# No type information. This normally comes from a
# mathematical expression in the SELECT list. Guess int