From 3188ad60433b60c629b3fe91016f09d7a8a5570e Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sun, 17 Jan 2010 21:29:03 +0000 Subject: - implement dynamic type_affinity for Oracle.NUMBER - standardize type tests on type affinity matches --- lib/sqlalchemy/dialects/oracle/base.py | 8 ++++++++ lib/sqlalchemy/test/testing.py | 9 +++------ 2 files changed, 11 insertions(+), 6 deletions(-) (limited to 'lib/sqlalchemy') 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): -- cgit v1.2.1