From: Mike Bayer Date: Thu, 15 Nov 2007 15:10:05 +0000 (+0000) Subject: fixed further issues with row translation [ticket:868] X-Git-Tag: rel_0_4_1~21 X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=e076169d390df8a9e90aa46053db34fd5815598a;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git fixed further issues with row translation [ticket:868] --- diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 2418d13246..55d4db98fe 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -252,7 +252,10 @@ def create_row_adapter(from_, to, equivalent_columns=None): def __init__(self, row): self.row = row def __contains__(self, key): - return key in self.row or (key in map and map[key] in self.row) + if key in map: + return map[key] in self.row + else: + return key in self.row def has_key(self, key): return key in self def __getitem__(self, key): diff --git a/test/orm/eager_relations.py b/test/orm/eager_relations.py index e5d1e853ce..3e811b86bf 100644 --- a/test/orm/eager_relations.py +++ b/test/orm/eager_relations.py @@ -581,6 +581,41 @@ class SelfReferentialEagerTest(ORMTest): ]) == d self.assert_sql_count(testbase.db, go, 1) + def test_with_deferred(self): + class Node(Base): + def append(self, node): + self.children.append(node) + + mapper(Node, nodes, properties={ + 'children':relation(Node, lazy=False, join_depth=3), + 'data':deferred(nodes.c.data) + }) + sess = create_session() + n1 = Node(data='n1') + n1.append(Node(data='n11')) + n1.append(Node(data='n12')) + sess.save(n1) + sess.flush() + sess.clear() + + def go(): + assert Node(data='n1', children=[Node(data='n11'), Node(data='n12')]) == sess.query(Node).first() + self.assert_sql_count(testbase.db, go, 4) + + sess.clear() + + def go(): + assert Node(data='n1', children=[Node(data='n11'), Node(data='n12')]) == sess.query(Node).options(undefer('data')).first() + self.assert_sql_count(testbase.db, go, 3) + + sess.clear() + + def go(): + assert Node(data='n1', children=[Node(data='n11'), Node(data='n12')]) == sess.query(Node).options(undefer('data'), undefer('children.data')).first() + self.assert_sql_count(testbase.db, go, 1) + + + def test_options(self): class Node(Base): def append(self, node):