Example #1
0
 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
Example #2
0
    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
Example #3
0
    def test_delete_unloaded_collections(self):
        """test that unloaded collections are still included in a delete-cascade by default."""

        sess = create_session()
        u = User(name='jack', addresses=[Address(email_address="address1"), Address(email_address="address2")])
        sess.save(u)
        sess.flush()
        sess.clear()
        assert addresses.count().scalar() == 2
        assert users.count().scalar() == 1
        
        u = sess.query(User).get(u.id)
        
        assert 'addresses' not in u.__dict__
        sess.delete(u)
        sess.flush()
        assert addresses.count().scalar() == 0
        assert users.count().scalar() == 0
Example #4
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')])])