summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-03-19 12:30:22 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2010-03-19 12:30:22 -0400
commit7de2b6923f214674cf139b21125f41c2752094eb (patch)
treea7054ff03d866eb5d935f98c82bc327920831df5 /lib
parente2807dcd36c85c65ad0c72135078e8cb76fb77c4 (diff)
downloadsqlalchemy-7de2b6923f214674cf139b21125f41c2752094eb.tar.gz
- get firebird on board
- a lot of these drivers suck at decimals, not sure what to do
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/dialects/firebird/kinterbasdb.py25
-rw-r--r--lib/sqlalchemy/dialects/oracle/cx_oracle.py47
2 files changed, 49 insertions, 23 deletions
diff --git a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py
index 66d001e0c..9984d32a2 100644
--- a/lib/sqlalchemy/dialects/firebird/kinterbasdb.py
+++ b/lib/sqlalchemy/dialects/firebird/kinterbasdb.py
@@ -28,13 +28,32 @@ __ http://kinterbasdb.sourceforge.net/dist_docs/usage.html#special_issue_concurr
"""
from sqlalchemy.dialects.firebird.base import FBDialect, FBCompiler
-
-
+from sqlalchemy import util, types as sqltypes
+
+class _FBNumeric_kinterbasdb(sqltypes.Numeric):
+ def bind_processor(self, dialect):
+ def process(value):
+ if value is not None:
+ return str(value)
+ else:
+ return value
+ return process
+
class FBDialect_kinterbasdb(FBDialect):
driver = 'kinterbasdb'
supports_sane_rowcount = False
supports_sane_multi_rowcount = False
-
+
+ supports_native_decimal = True
+
+ colspecs = util.update_copy(
+ FBDialect.colspecs,
+ {
+ sqltypes.Numeric:_FBNumeric_kinterbasdb
+ }
+
+ )
+
def __init__(self, type_conv=200, concurrency_level=1, **kwargs):
super(FBDialect_kinterbasdb, self).__init__(**kwargs)
diff --git a/lib/sqlalchemy/dialects/oracle/cx_oracle.py b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
index eee2bb1ba..c6e9cea5d 100644
--- a/lib/sqlalchemy/dialects/oracle/cx_oracle.py
+++ b/lib/sqlalchemy/dialects/oracle/cx_oracle.py
@@ -82,6 +82,12 @@ from sqlalchemy import types as sqltypes, util, exc
from datetime import datetime
import random
+class _OracleNumeric(sqltypes.Numeric):
+ # cx_oracle accepts Decimal objects, but returns
+ # floats
+ def bind_processor(self, dialect):
+ return None
+
class _OracleDate(sqltypes.Date):
def bind_processor(self, dialect):
return None
@@ -188,25 +194,6 @@ class _OracleInterval(oracle.INTERVAL):
class _OracleRaw(oracle.RAW):
pass
-colspecs = {
- sqltypes.Date : _OracleDate, # generic type, assume datetime.date is desired
- oracle.DATE: oracle.DATE, # non generic type - passthru
- sqltypes.LargeBinary : _OracleBinary,
- sqltypes.Boolean : oracle._OracleBoolean,
- sqltypes.Interval : _OracleInterval,
- oracle.INTERVAL : _OracleInterval,
- sqltypes.Text : _OracleText,
- sqltypes.String : _OracleString,
- sqltypes.UnicodeText : _OracleUnicodeText,
- sqltypes.CHAR : _OracleChar,
- sqltypes.Integer : _OracleInteger, # this is only needed for OUT parameters.
- # it would be nice if we could not use it otherwise.
- oracle.NUMBER : oracle.NUMBER, # don't let this get converted
- oracle.RAW: _OracleRaw,
- sqltypes.Unicode: _OracleNVarChar,
- sqltypes.NVARCHAR : _OracleNVarChar,
-}
-
class OracleCompiler_cx_oracle(OracleCompiler):
def bindparam_string(self, name):
if self.preparer._bindparam_requires_quotes(name):
@@ -346,7 +333,27 @@ class OracleDialect_cx_oracle(OracleDialect):
execution_ctx_cls = OracleExecutionContext_cx_oracle
statement_compiler = OracleCompiler_cx_oracle
driver = "cx_oracle"
- colspecs = colspecs
+
+ colspecs = colspecs = {
+ sqltypes.Numeric: _OracleNumeric,
+ sqltypes.Date : _OracleDate, # generic type, assume datetime.date is desired
+ oracle.DATE: oracle.DATE, # non generic type - passthru
+ sqltypes.LargeBinary : _OracleBinary,
+ sqltypes.Boolean : oracle._OracleBoolean,
+ sqltypes.Interval : _OracleInterval,
+ oracle.INTERVAL : _OracleInterval,
+ sqltypes.Text : _OracleText,
+ sqltypes.String : _OracleString,
+ sqltypes.UnicodeText : _OracleUnicodeText,
+ sqltypes.CHAR : _OracleChar,
+ sqltypes.Integer : _OracleInteger, # this is only needed for OUT parameters.
+ # it would be nice if we could not use it otherwise.
+ oracle.NUMBER : oracle.NUMBER, # don't let this get converted
+ oracle.RAW: _OracleRaw,
+ sqltypes.Unicode: _OracleNVarChar,
+ sqltypes.NVARCHAR : _OracleNVarChar,
+ }
+
execute_sequence_format = list