From: Mike Bayer Date: Sat, 23 Nov 2013 22:19:43 +0000 (-0500) Subject: - evaulate decimal_return_scale statelessly. Don't re-assign to self.decimal_return_... X-Git-Tag: rel_0_9_0~100 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4acfce6c4c1da91901921ddfae7a682771817945;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - evaulate decimal_return_scale statelessly. Don't re-assign to self.decimal_return_scale so that __repr__() is maintained (for alembic tests) --- diff --git a/lib/sqlalchemy/dialects/mysql/base.py b/lib/sqlalchemy/dialects/mysql/base.py index 6ffc1319a6..eec4d8a480 100644 --- a/lib/sqlalchemy/dialects/mysql/base.py +++ b/lib/sqlalchemy/dialects/mysql/base.py @@ -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 diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py index 0c6d257dc2..60267aab9e 100644 --- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py +++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py @@ -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: diff --git a/lib/sqlalchemy/dialects/postgresql/psycopg2.py b/lib/sqlalchemy/dialects/postgresql/psycopg2.py index 9995a1f5a2..d7ce6eb90b 100644 --- a/lib/sqlalchemy/dialects/postgresql/psycopg2.py +++ b/lib/sqlalchemy/dialects/postgresql/psycopg2.py @@ -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 diff --git a/lib/sqlalchemy/sql/sqltypes.py b/lib/sqlalchemy/sql/sqltypes.py index 7cf5a6dca9..7c9a65166a 100644 --- a/lib/sqlalchemy/sql/sqltypes.py +++ b/lib/sqlalchemy/sql/sqltypes.py @@ -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