]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- implement dynamic type_affinity for Oracle.NUMBER
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jan 2010 21:29:03 +0000 (21:29 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 17 Jan 2010 21:29:03 +0000 (21:29 +0000)
- standardize type tests on type affinity matches

lib/sqlalchemy/dialects/oracle/base.py
lib/sqlalchemy/test/testing.py
test/engine/test_reflection.py

index 3cfdf828b0390c7987d424e968cf1be0170bf087..a22b01f3db5e2cb222bc348d7084ccfe8fb6ce93 100644 (file)
@@ -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'
index 369aa3a6fcf5b5a1933def612761425a0847673e..ea1dfa9eab548be44a69783553918cfff58f53f2 100644 (file)
@@ -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):
index f73d40a411575a89c0b748907d6b894e8d00fc6e..bc2c896ab26cff578c88c864b4d5caba9b883db9 100644 (file)
@@ -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'),