From: Mike Bayer Date: Sun, 14 Jan 2007 21:10:40 +0000 (+0000) Subject: - default cascade is "save-update, merge" X-Git-Tag: rel_0_3_4~40 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=16f24ebbfc696f53567276731288cc635d2720b1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - default cascade is "save-update, merge" - added another merge unit test --- diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 888ac0442c..980424c4e7 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -93,7 +93,7 @@ class PropertyLoader(StrategizedProperty): if private: self.cascade = mapperutil.CascadeOptions("all, delete-orphan") else: - self.cascade = mapperutil.CascadeOptions("save-update") + self.cascade = mapperutil.CascadeOptions("save-update, merge") self.association = association self.order_by = order_by diff --git a/test/orm/merge.py b/test/orm/merge.py index 1d2f24a7de..7a62b147c8 100644 --- a/test/orm/merge.py +++ b/test/orm/merge.py @@ -60,7 +60,7 @@ class MergeTest(AssertMixin): def test_saved_cascade(self): """test merge of a persistent entity with two child persistent entities.""" mapper(User, users, properties={ - 'addresses':relation(mapper(Address, addresses), cascade="all") + 'addresses':relation(mapper(Address, addresses)) }) sess = create_session() @@ -99,6 +99,40 @@ class MergeTest(AssertMixin): sess.clear() u = sess.query(User).get(7) self.assert_result([u], User, {'user_id':7, 'user_name':'fred2', 'addresses':(Address, [{'email_address':'foo@bar.com'}, {'email_address':'hoho@lalala.com'}])}) + + def test_saved_cascade_2(self): + """tests a more involved merge""" + mapper(Order, orders, properties={ + 'items':relation(mapper(Item, orderitems)) + }) + + mapper(User, users, properties={ + 'addresses':relation(mapper(Address, addresses)), + 'orders':relation(Order) + }) + + sess = create_session() + u = User() + u.user_name='fred' + o = Order() + i1 = Item() + i1.item_name='item 1' + i2 = Item() + i2.item_name = 'item 2' + o.description = 'order description' + o.items.append(i1) + o.items.append(i2) + u.orders.append(o) + + sess.save(u) + sess.flush() + + sess2 = create_session() + u2 = sess2.query(User).get(u.user_id) + u.orders[0].items[1].item_name = 'item 2 modified' + sess2.merge(u) + assert u2.orders[0].items[1].item_name == 'item 2 modified' + if __name__ == "__main__": testbase.main()