summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2010-01-17 21:29:03 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2010-01-17 21:29:03 +0000
commit3188ad60433b60c629b3fe91016f09d7a8a5570e (patch)
tree0fdc0c4dec942a548f3b297f3a5ce84c1c2438ef /lib/sqlalchemy
parent8f4871eaf25c2335823a4116d593e6782ff5d743 (diff)
downloadsqlalchemy-3188ad60433b60c629b3fe91016f09d7a8a5570e.tar.gz
- implement dynamic type_affinity for Oracle.NUMBER
- standardize type tests on type affinity matches
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/dialects/oracle/base.py8
-rw-r--r--lib/sqlalchemy/test/testing.py9
2 files changed, 11 insertions, 6 deletions
diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py
index 3cfdf828b..a22b01f3d 100644
--- a/lib/sqlalchemy/dialects/oracle/base.py
+++ b/lib/sqlalchemy/dialects/oracle/base.py
@@ -140,6 +140,14 @@ class NUMBER(sqltypes.Numeric, sqltypes.Integer):
asdecimal = bool(scale and scale > 0)
super(NUMBER, self).__init__(precision=precision, scale=scale, asdecimal=asdecimal)
+
+ @property
+ def _type_affinity(self):
+ if bool(self.scale and self.scale > 0):
+ return sqltypes.Numeric
+ else:
+ return sqltypes.Integer
+
class DOUBLE_PRECISION(sqltypes.Numeric):
__visit_name__ = 'DOUBLE_PRECISION'
diff --git a/lib/sqlalchemy/test/testing.py b/lib/sqlalchemy/test/testing.py
index 369aa3a6f..ea1dfa9ea 100644
--- a/lib/sqlalchemy/test/testing.py
+++ b/lib/sqlalchemy/test/testing.py
@@ -657,12 +657,9 @@ class ComparesTables(object):
assert reflected_table.primary_key.columns[c.name] is not None
def assert_types_base(self, c1, c2):
- base_mro = sqltypes.TypeEngine.__mro__
- assert len(
- set(type(c1.type).__mro__).difference(base_mro).intersection(
- set(type(c2.type).__mro__).difference(base_mro)
- )
- ) > 0, "On column %r, type '%s' doesn't correspond to type '%s'" % (c1.name, c1.type, c2.type)
+ assert c1.type._compare_type_affinity(c2.type),\
+ "On column %r, type '%s' doesn't correspond to type '%s'" % \
+ (c1.name, c1.type, c2.type)
class AssertsExecutionResults(object):
def assert_result(self, result, class_, *objects):