diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-18 12:05:20 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-18 12:05:20 -0400 |
| commit | 77fa087d1577dedbb18c197641bf81e6d0862505 (patch) | |
| tree | 38b3170137e9318e976bad197ae6aafb31de7d26 /lib/sqlalchemy/dialects/sybase | |
| parent | 074cab9e7d01533302e84a489d740accad25476a (diff) | |
| download | sqlalchemy-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')
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/base.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/pyodbc.py | 26 |
2 files changed, 28 insertions, 4 deletions
diff --git a/lib/sqlalchemy/dialects/sybase/base.py b/lib/sqlalchemy/dialects/sybase/base.py index e182cc9e7..5814f70da 100644 --- a/lib/sqlalchemy/dialects/sybase/base.py +++ b/lib/sqlalchemy/dialects/sybase/base.py @@ -85,6 +85,7 @@ RESERVED_WORDS = set([ "within", "work", "writetext", ]) + class _SybaseUnitypeMixin(object): """these types appear to return a buffer object.""" @@ -161,9 +162,6 @@ class SybaseTypeCompiler(compiler.GenericTypeCompiler): def visit_UNIQUEIDENTIFIER(self, type_): return "UNIQUEIDENTIFIER" -colspecs = { -} - ischema_names = { 'integer' : INTEGER, 'unsigned int' : INTEGER, # TODO: unsigned flags @@ -359,7 +357,7 @@ class SybaseDialect(default.DefaultDialect): supports_unicode_binds = False postfetch_lastrowid = True - colspecs = colspecs + colspecs = {} ischema_names = ischema_names type_compiler = SybaseTypeCompiler 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 |
