From: Mike Bayer Date: Fri, 19 Mar 2010 15:55:59 +0000 (-0400) Subject: still poking at numerics X-Git-Tag: rel_0_6beta2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32f8a11153b4c15391e9650498ebf2f0626f063c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git still poking at numerics --- diff --git a/lib/sqlalchemy/connectors/pyodbc.py b/lib/sqlalchemy/connectors/pyodbc.py index 82e510754d..5cf00bc923 100644 --- a/lib/sqlalchemy/connectors/pyodbc.py +++ b/lib/sqlalchemy/connectors/pyodbc.py @@ -10,6 +10,8 @@ from sqlalchemy import processors, types as sqltypes class PyODBCNumeric(sqltypes.Numeric): """Turns Decimals with adjusted() < -6 into floats, > 7 into strings""" + convert_large_decimals_to_string = False + def bind_processor(self, dialect): super_process = super(PyODBCNumeric, self).bind_processor(dialect) @@ -19,7 +21,8 @@ class PyODBCNumeric(sqltypes.Numeric): if value.adjusted() < -6: return processors.to_float(value) - elif value.adjusted() > 7: + elif self.convert_large_decimals_to_string and \ + value.adjusted() > 7: return self._large_dec_to_string(value) if super_process: diff --git a/lib/sqlalchemy/dialects/mssql/pyodbc.py b/lib/sqlalchemy/dialects/mssql/pyodbc.py index b22d742dea..8e7e906292 100644 --- a/lib/sqlalchemy/dialects/mssql/pyodbc.py +++ b/lib/sqlalchemy/dialects/mssql/pyodbc.py @@ -16,7 +16,8 @@ from sqlalchemy.connectors.pyodbc import PyODBCConnector, PyODBCNumeric from sqlalchemy import types as sqltypes, util class _MSNumeric_pyodbc(PyODBCNumeric): - pass + convert_large_decimals_to_string = True + class MSExecutionContext_pyodbc(MSExecutionContext): _embedded_scope_identity = False diff --git a/lib/sqlalchemy/dialects/sybase/pyodbc.py b/lib/sqlalchemy/dialects/sybase/pyodbc.py index 8938159304..19ad70fe82 100644 --- a/lib/sqlalchemy/dialects/sybase/pyodbc.py +++ b/lib/sqlalchemy/dialects/sybase/pyodbc.py @@ -34,7 +34,7 @@ from sqlalchemy.connectors.pyodbc import PyODBCConnector, PyODBCNumeric from sqlalchemy import types as sqltypes, util class _SybNumeric_pyodbc(PyODBCNumeric): - pass + convert_large_decimals_to_string = False class SybaseExecutionContext_pyodbc(SybaseExecutionContext): def set_ddl_autocommit(self, connection, value): diff --git a/test/sql/test_types.py b/test/sql/test_types.py index 9c31eefcee..82941f27dc 100644 --- a/test/sql/test_types.py +++ b/test/sql/test_types.py @@ -1211,13 +1211,14 @@ class NumericTest(TestBase): @testing.fails_on('sqlite', 'TODO') @testing.fails_on('oracle', 'TODO') - @testing.fails_on('sybase', 'TODO') + @testing.fails_on('postgresql+pg8000', 'TODO') def test_many_significant_digits(self): numbers = set([ decimal.Decimal("31943874831932418390.01"), + decimal.Decimal("319438950232418390.273596"), ]) self._do_test( - Numeric(precision=25, scale=2), + Numeric(precision=26, scale=6), numbers, numbers )