diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-16 22:06:15 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-01-16 22:06:15 +0000 |
| commit | 55c0ab5b2b7947bcaeab24a573c646b68d856bad (patch) | |
| tree | f5e6bda0626b4a0229d6767f1d656f06d02c16a8 /test | |
| parent | 626e83dc28e5ec157c28a54920827d401726cab7 (diff) | |
| download | sqlalchemy-55c0ab5b2b7947bcaeab24a573c646b68d856bad.tar.gz | |
- dynamic relations, when referenced, create a strong
reference to the parent object so that the query
still has a parent to call against even if the
parent is only created (and otherwise dereferenced)
within the scope of a single expression [ticket:938]
Diffstat (limited to 'test')
| -rw-r--r-- | test/orm/dynamic.py | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/orm/dynamic.py b/test/orm/dynamic.py index f188a478f..199eb474f 100644 --- a/test/orm/dynamic.py +++ b/test/orm/dynamic.py @@ -213,5 +213,57 @@ for autoflush in (False, True): for saveuser in (False, True): create_backref_test(autoflush, saveuser) +class DontDereferenceTest(ORMTest): + def define_tables(self, metadata): + global users_table, addresses_table + + users_table = Table('users', metadata, + Column('id', Integer, primary_key=True), + Column('name', String(40)), + Column('fullname', String(100)), + Column('password', String(15))) + + addresses_table = Table('addresses', metadata, + Column('id', Integer, primary_key=True), + Column('email_address', String(100), nullable=False), + Column('user_id', Integer, ForeignKey('users.id'))) + def test_no_deref(self): + mapper(User, users_table, properties={ + 'addresses': relation(Address, backref='user', lazy='dynamic') + }) + + mapper(Address, addresses_table) + + session = create_session() + user = User() + user.name = 'joe' + user.fullname = 'Joe User' + user.password = 'Joe\'s secret' + address = Address() + address.email_address = 'joe@joesdomain.example' + address.user = user + session.save(user) + session.flush() + session.clear() + + def query1(): + session = create_session(metadata.bind) + user = session.query(User).first() + return user.addresses.all() + + def query2(): + session = create_session(metadata.bind) + return session.query(User).first().addresses.all() + + def query3(): + session = create_session(metadata.bind) + user = session.query(User).first() + return session.query(User).first().addresses.all() + + self.assertEquals(query1(), [Address(email_address='joe@joesdomain.example')] ) + self.assertEquals(query2(), [Address(email_address='joe@joesdomain.example')] ) + self.assertEquals(query3(), [Address(email_address='joe@joesdomain.example')] ) + + if __name__ == '__main__': testenv.main() |
