From: Mike Bayer Date: Sun, 17 Jan 2010 21:29:03 +0000 (+0000) Subject: - implement dynamic type_affinity for Oracle.NUMBER X-Git-Tag: rel_0_6beta1~62 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=3188ad60433b60c629b3fe91016f09d7a8a5570e;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - implement dynamic type_affinity for Oracle.NUMBER - standardize type tests on type affinity matches --- diff --git a/lib/sqlalchemy/dialects/oracle/base.py b/lib/sqlalchemy/dialects/oracle/base.py index 3cfdf828b0..a22b01f3db 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 369aa3a6fc..ea1dfa9eab 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): diff --git a/test/engine/test_reflection.py b/test/engine/test_reflection.py index f73d40a411..bc2c896ab2 100644 --- a/test/engine/test_reflection.py +++ b/test/engine/test_reflection.py @@ -699,11 +699,11 @@ class ReflectionTest(TestBase, ComparesTables): for c1, c2 in zip(users.c, users_v.c): eq_(c1.name, c2.name) - assert c1.type._compare_type_affinity(c2.type) + self.assert_types_base(c1, c2) for c1, c2 in zip(addresses.c, addresses_v.c): eq_(c1.name, c2.name) - assert c1.type._compare_type_affinity(c2.type) + self.assert_types_base(c1, c2) finally: dropViews(meta.bind, None) @@ -946,10 +946,10 @@ def createTables(meta, schema=None): Column('test2', sa.Float(5), nullable=False), Column('test3', sa.Text), Column('test4', sa.Numeric(10, 2), nullable = False), - Column('test5', sa.DateTime), + Column('test5', sa.Date), Column('test5-1', sa.TIMESTAMP), parent_user_id, - Column('test6', sa.DateTime, nullable=False), + Column('test6', sa.Date, nullable=False), Column('test7', sa.Text), Column('test8', sa.Binary), Column('test_passivedefault2', sa.Integer, server_default='5'),