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_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
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')])])