def test_cascade_delete_noorphans(self): sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 2 del u.orders[0] sess.delete(u) sess.flush() assert users.count().scalar() == 0 assert orders.count().scalar() == 1
def test_collection_orphans(self): sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 2 u.orders[:] = [] sess.flush() assert users.count().scalar() == 1 assert orders.count().scalar() == 0
def test_pending_expunge(self): class Order(fixtures.Base): pass class Item(fixtures.Base): pass class Attribute(fixtures.Base): pass mapper(Attribute, attributes) mapper(Item, items, properties=dict( attributes=relation(Attribute, cascade="all,delete-orphan", backref="item") )) mapper(Order, orders, properties=dict( items=relation(Item, cascade="all,delete-orphan", backref="order") )) s = create_session() order = Order(name="order1") s.save(order) attr = Attribute(name="attr1") item = Item(name="item1", attributes=[attr]) order.items.append(item) order.items.remove(item) assert item not in s assert attr not in s s.flush() assert orders.count().scalar() == 1 assert items.count().scalar() == 0 assert attributes.count().scalar() == 0
def test_cascades_onlycollection(self): """test that cascade only reaches instances that are still part of the collection, not those that have been removed""" sess = create_session() u = User(name='jack', orders=[Order(description='someorder'), Order(description='someotherorder')]) sess.save(u) sess.flush() o = u.orders[0] del u.orders[0] sess.delete(u) assert u in sess.deleted assert o not in sess.deleted assert o in sess u2 = User(name='newuser', orders=[o]) sess.save(u2) sess.flush() sess.clear() assert users.count().scalar() == 1 assert orders.count().scalar() == 1 self.assertEquals(sess.query(User).all(), [User(name='newuser', orders=[Order(description='someorder')])])