summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/sybase
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
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')
-rw-r--r--lib/sqlalchemy/dialects/sybase/base.py6
-rw-r--r--lib/sqlalchemy/dialects/sybase/pyodbc.py26
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