summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/sybase/pyodbc.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-03-18 12:05:20 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-03-18 12:05:20 -0400
commit77fa087d1577dedbb18c197641bf81e6d0862505 (patch)
tree38b3170137e9318e976bad197ae6aafb31de7d26 /lib/sqlalchemy/dialects/sybase/pyodbc.py
parent074cab9e7d01533302e84a489d740accad25476a (diff)
downloadsqlalchemy-77fa087d1577dedbb18c197641bf81e6d0862505.tar.gz
turning the decimals to floats allows the E notation to work with sybase+pyodbc for small E notations
Diffstat (limited to 'lib/sqlalchemy/dialects/sybase/pyodbc.py')
-rw-r--r--lib/sqlalchemy/dialects/sybase/pyodbc.py26
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/sqlalchemy/dialects/sybase/pyodbc.py b/lib/sqlalchemy/dialects/sybase/pyodbc.py
index 1bb09251c..61cf333da 100644
--- a/lib/sqlalchemy/dialects/sybase/pyodbc.py
+++ b/lib/sqlalchemy/dialects/sybase/pyodbc.py
@@ -31,6 +31,26 @@ Currently *not* supported are::
from sqlalchemy.dialects.sybase.base import SybaseDialect, SybaseExecutionContext
from sqlalchemy.connectors.pyodbc import PyODBCConnector
+import decimal
+from sqlalchemy import processors, types as sqltypes
+
+# TODO: should this be part of pyodbc connectors ??? applies to MSSQL too ?
+class _SybNumeric(sqltypes.Numeric):
+ def bind_processor(self, dialect):
+ super_process = super(_SybNumeric, self).bind_processor(dialect)
+
+ def process(value):
+ if self.asdecimal and \
+ isinstance(value, decimal.Decimal) and \
+ value.adjusted() < -6:
+ return processors.to_float(value)
+ elif super_process:
+ return super_process(value)
+ else:
+ return value
+ return process
+
+
class SybaseExecutionContext_pyodbc(SybaseExecutionContext):
def set_ddl_autocommit(self, connection, value):
if value:
@@ -39,7 +59,13 @@ class SybaseExecutionContext_pyodbc(SybaseExecutionContext):
connection.autocommit = False
+
class SybaseDialect_pyodbc(PyODBCConnector, SybaseDialect):
execution_ctx_cls = SybaseExecutionContext_pyodbc
+ colspecs = {
+ sqltypes.Numeric:_SybNumeric,
+ sqltypes.Float:sqltypes.Float,
+ }
+
dialect = SybaseDialect_pyodbc