]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed the call to get_committed_value() on CompositeProperty.
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Nov 2009 04:54:56 +0000 (04:54 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Nov 2009 04:54:56 +0000 (04:54 +0000)
[ticket:1504]

CHANGES
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/orm/properties.py
test/orm/inheritance/test_basic.py

diff --git a/CHANGES b/CHANGES
index 1a4c7e1cae9e45541f728552da839deb3cec6bd3..f3bbd113ab955353a5e82c74ed8700b2e7302bad 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -659,6 +659,9 @@ CHANGES
       duplicate extensions, such as backref populators,
       from being inserted into the list.
       [ticket:1585]
+
+    - Fixed the call to get_committed_value() on CompositeProperty.
+      [ticket:1504]
       
 - sql
     - Fixed the "numeric" paramstyle, which apparently is the
index 6bc55c831526de86c66ed7a9e421574d18d220b3..d6bb2b2e698d0d028e5ca6c65d7a42ad00b9b580 100644 (file)
@@ -1628,7 +1628,7 @@ class Mapper(object):
 
             if polymorphic_on is not None:
                 discriminator = row[polymorphic_on]
-                if discriminator is not None:
+                if discriminator is not None or None in polymorphic_instances:
                     _instance = polymorphic_instances[discriminator]
                     if _instance:
                         return _instance(row, result)
index 1ca71390c4677ae165b89e51140b782843a885a3..1fd7d48a997ab2c600e37e78d2d16bb2de12ac7b 100644 (file)
@@ -161,7 +161,8 @@ class CompositeProperty(ColumnProperty):
         return self.get_col_value(column, obj)
 
     def getcommitted(self, state, column, passive=False):
-        obj = state.get_impl(self.key).get_committed_value(state, passive=passive)
+        # TODO: no coverage here
+        obj = state.get_impl(self.key).get_committed_value(state, state.dict, passive=passive)
         return self.get_col_value(column, obj)
 
     def setattr(self, state, value, column):
index a682d38cb1cec5522a6d862b8c41094ce44f1e2a..99c6bf6bd2cb307cf9e0bd58d062501b3e57e1f2 100644 (file)
@@ -101,6 +101,19 @@ class FalseDiscriminatorTest(_base.MappedTest):
         assert d1.type is False
         sess.expunge_all()
         assert sess.query(Ding).one() is not None
+
+    def test_none_on_sub(self):
+        class Ding(object):pass
+        class Bat(Ding):pass
+        mapper(Ding, t1, polymorphic_on=t1.c.type, polymorphic_identity=False)
+        mapper(Bat, inherits=Ding, polymorphic_identity=True)
+        sess = create_session()
+        d1 = Ding()
+        sess.add(d1)
+        sess.flush()
+        assert d1.type is False
+        sess.expunge_all()
+        assert sess.query(Ding).one() is not None
         
 class PolymorphicSynonymTest(_base.MappedTest):
     @classmethod