]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
still poking at numerics
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 19 Mar 2010 15:55:59 +0000 (11:55 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 19 Mar 2010 15:55:59 +0000 (11:55 -0400)
lib/sqlalchemy/connectors/pyodbc.py
lib/sqlalchemy/dialects/mssql/pyodbc.py
lib/sqlalchemy/dialects/sybase/pyodbc.py
test/sql/test_types.py

index 82e510754db0c6bbfa5dc292f61f42b24ca8d1fe..5cf00bc9233e079763621d1a6f10003126169c2c 100644 (file)
@@ -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:
index b22d742dea0064c16a27725859f08d1586e0f38d..8e7e90629269673189c4407d62dbb627e21b5035 100644 (file)
@@ -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
index 89381593048d39a1df1bd6a633135d48b8cbdc01..19ad70fe82fbad7b39f9b56b03462dce918c4215 100644 (file)
@@ -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):
index 9c31eefcee0585b79578798f9b463fa760980ceb..82941f27dc4b861e2cc448634cc233501f2e4d06 100644 (file)
@@ -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
         )