]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed endless loop issue when using lazy="dynamic" on both
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 19 Nov 2007 08:30:52 +0000 (08:30 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 19 Nov 2007 08:30:52 +0000 (08:30 +0000)
sides of a bi-directional relationship [ticket:872]

CHANGES
lib/sqlalchemy/orm/dynamic.py
test/orm/dynamic.py

diff --git a/CHANGES b/CHANGES
index d8ed8746f39408fd7999046c723e4c88ddb0ccfa..a44c402b5ddd5267f32ec6893f0969053e00aa19 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,7 +1,14 @@
 =======
 CHANGES
 =======
+0.4.2
+-----
+
+- orm
 
+   - fixed endless loop issue when using lazy="dynamic" on both 
+     sides of a bi-directional relationship [ticket:872]
+     
 0.4.1
 -----
 
index 993756edeb0fa87cf2083a21709ccf12535cfffa..44eaaa28159dd79117e8e5925403b21b3daa106e 100644 (file)
@@ -47,12 +47,12 @@ class DynamicAttributeImpl(attributes.AttributeImpl):
     def append(self, state, value, initiator):
         if initiator is not self:
             self.get_history(state)._added_items.append(value)
-            self.fire_append_event(state, value, self)
+            self.fire_append_event(state, value, initiator)
     
     def remove(self, state, value, initiator):
         if initiator is not self:
             self.get_history(state)._deleted_items.append(value)
-            self.fire_remove_event(state, value, self)
+            self.fire_remove_event(state, value, initiator)
 
             
 class AppenderQuery(Query):
index 0bb253b198be51c197244e22854dcbd6a2a2f54b..fa8828c20a97b2dd5783fbcf50ba5a2bda2df836 100644 (file)
@@ -9,7 +9,7 @@ from query import QueryTest
 
 class DynamicTest(FixtureTest):
     keep_mappers = False
-    keep_data = True
+    refresh_data = True
     
     def test_basic(self):
         mapper(User, users, properties={
@@ -36,7 +36,23 @@ class DynamicTest(FixtureTest):
         def go():
             assert [User(id=7, addresses=[Address(id=1, email_address='jack@bean.com')])] == q.filter(User.id==7).all()
         self.assert_sql_count(testbase.db, go, 2)
-
+    
+    def test_m2m(self):
+        mapper(Order, orders, properties={
+            'items':relation(Item, secondary=order_items, lazy="dynamic", backref=backref('orders', lazy="dynamic"))
+        })
+        mapper(Item, items)
+        
+        sess = create_session()
+        o1 = Order(id=15, description="order 10")
+        i1 = Item(id=10, description="item 8")
+        o1.items.append(i1)
+        sess.save(o1)
+        sess.flush()
+        
+        assert o1 in i1.orders.all()
+        assert i1 in o1.items.all()
+        
 class FlushTest(FixtureTest):
     def test_basic(self):
         class Fixture(Base):