]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- evaulate decimal_return_scale statelessly. Don't re-assign to self.decimal_return_...
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 23 Nov 2013 22:19:43 +0000 (17:19 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 23 Nov 2013 22:19:43 +0000 (17:19 -0500)
so that __repr__() is maintained (for alembic tests)

lib/sqlalchemy/dialects/mysql/base.py
lib/sqlalchemy/dialects/oracle/cx_oracle.py
lib/sqlalchemy/dialects/postgresql/psycopg2.py
lib/sqlalchemy/sql/sqltypes.py

index 6ffc1319a68fdcd4b003b0412e5755c937c46ce9..eec4d8a480c9a74d2cfa31f2821be12de5356dbf 100644 (file)
@@ -398,8 +398,6 @@ class _FloatType(_NumericType, sqltypes.Float):
             raise exc.ArgumentError(
                 "You must specify both precision and scale or omit "
                 "both altogether.")
-        if scale is not None:
-            kw.setdefault('decimal_return_scale', scale)
         super(_FloatType, self).__init__(precision=precision, asdecimal=asdecimal, **kw)
         self.scale = scale
 
index 0c6d257dc28a26a148437634cbce0bea1bd60766..60267aab9ed622ea7fda320020278dbfe32c216f 100644 (file)
@@ -232,7 +232,7 @@ class _OracleNumeric(sqltypes.Numeric):
 
         if dialect.supports_native_decimal:
             if self.asdecimal:
-                fstring = "%%.%df" % self.decimal_return_scale
+                fstring = "%%.%df" % self._effective_decimal_return_scale
 
                 def to_decimal(value):
                     if value is None:
index 9995a1f5a2702447c186eeea9b21e6010574fb1c..d7ce6eb90b8978c4d25d116f7c4b8ec4ed31d089 100644 (file)
@@ -192,7 +192,8 @@ class _PGNumeric(sqltypes.Numeric):
         if self.asdecimal:
             if coltype in _FLOAT_TYPES:
                 return processors.to_decimal_processor_factory(
-                                decimal.Decimal, self.decimal_return_scale)
+                                decimal.Decimal,
+                                self._effective_decimal_return_scale)
             elif coltype in _DECIMAL_TYPES or coltype in _INT_TYPES:
                 # pg8000 returns Decimal natively for 1700
                 return None
index 7cf5a6dca920a0026ed58b3f4b8dca330e06e78e..7c9a65166a893a6cc28d82f729680d3a575de780 100644 (file)
@@ -503,12 +503,18 @@ class Numeric(_DateAffinity, TypeEngine):
         """
         self.precision = precision
         self.scale = scale
-        self.decimal_return_scale = decimal_return_scale \
-                                    if decimal_return_scale is not None \
-                                    else self.scale if self.scale is not None \
-                                    else self._default_decimal_return_scale
+        self.decimal_return_scale = decimal_return_scale
         self.asdecimal = asdecimal
 
+    @property
+    def _effective_decimal_return_scale(self):
+        if self.decimal_return_scale is not None:
+            return self.decimal_return_scale
+        elif getattr(self, "scale", None) is not None:
+            return self.scale
+        else:
+            return self._default_decimal_return_scale
+
     def get_dbapi_type(self, dbapi):
         return dbapi.NUMBER
 
@@ -626,9 +632,7 @@ class Float(Numeric):
         """
         self.precision = precision
         self.asdecimal = asdecimal
-        self.decimal_return_scale = decimal_return_scale \
-                                    if decimal_return_scale is not None \
-                                    else self._default_decimal_return_scale
+        self.decimal_return_scale = decimal_return_scale
         if kwargs:
             util.warn_deprecated("Additional keyword arguments "
                                 "passed to Float ignored.")
@@ -636,7 +640,8 @@ class Float(Numeric):
     def result_processor(self, dialect, coltype):
         if self.asdecimal:
             return processors.to_decimal_processor_factory(
-                                    decimal.Decimal, self.decimal_return_scale)
+                                    decimal.Decimal,
+                                    self._effective_decimal_return_scale)
         else:
             return None