diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-19 21:37:42 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-03-19 21:37:42 -0400 |
| commit | 1398268c42667d5feb148cf5f6e27aeaecfe35e9 (patch) | |
| tree | 8401af0c07dada3a76a897581703fc4babaebaa4 /lib/sqlalchemy/dialects/sybase/pyodbc.py | |
| parent | 60c9d3daae7586bd12c4ec77a10f3bc0275ca1de (diff) | |
| download | sqlalchemy-1398268c42667d5feb148cf5f6e27aeaecfe35e9.tar.gz | |
re-split PyODBCNumeric among Sybase and MS-SQL, they can't be shared.
MS-SQL really needs the pure string approach else crashes occur on
windows.
Diffstat (limited to 'lib/sqlalchemy/dialects/sybase/pyodbc.py')
| -rw-r--r-- | lib/sqlalchemy/dialects/sybase/pyodbc.py | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/lib/sqlalchemy/dialects/sybase/pyodbc.py b/lib/sqlalchemy/dialects/sybase/pyodbc.py index 19ad70fe8..e34f2605c 100644 --- a/lib/sqlalchemy/dialects/sybase/pyodbc.py +++ b/lib/sqlalchemy/dialects/sybase/pyodbc.py @@ -29,12 +29,34 @@ Currently *not* supported are:: """ from sqlalchemy.dialects.sybase.base import SybaseDialect, SybaseExecutionContext -from sqlalchemy.connectors.pyodbc import PyODBCConnector, PyODBCNumeric +from sqlalchemy.connectors.pyodbc import PyODBCConnector +import decimal +from sqlalchemy import types as sqltypes, util, processors -from sqlalchemy import types as sqltypes, util +class _SybNumeric_pyodbc(sqltypes.Numeric): + """Turns Decimals with adjusted() < -6 into floats. + + It's not yet known how to get decimals with many + significant digits or very large adjusted() into Sybase + via pyodbc. + + """ + + def bind_processor(self, dialect): + super_process = super(_SybNumeric_pyodbc, self).bind_processor(dialect) + + def process(value): + if self.asdecimal and \ + isinstance(value, decimal.Decimal): -class _SybNumeric_pyodbc(PyODBCNumeric): - convert_large_decimals_to_string = False + if value.adjusted() < -6: + return processors.to_float(value) + + if super_process: + return super_process(value) + else: + return value + return process class SybaseExecutionContext_pyodbc(SybaseExecutionContext): def set_ddl_autocommit(self, connection, value): @@ -43,8 +65,6 @@ class SybaseExecutionContext_pyodbc(SybaseExecutionContext): else: connection.autocommit = False - - class SybaseDialect_pyodbc(PyODBCConnector, SybaseDialect): execution_ctx_cls = SybaseExecutionContext_pyodbc |
