summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-01-16 22:06:15 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-01-16 22:06:15 +0000
commit55c0ab5b2b7947bcaeab24a573c646b68d856bad (patch)
treef5e6bda0626b4a0229d6767f1d656f06d02c16a8 /test
parent626e83dc28e5ec157c28a54920827d401726cab7 (diff)
downloadsqlalchemy-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.py52
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()