]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
fixed further issues with row translation [ticket:868]
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Nov 2007 15:10:05 +0000 (15:10 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Nov 2007 15:10:05 +0000 (15:10 +0000)
lib/sqlalchemy/orm/util.py
test/orm/eager_relations.py

index 2418d13246522d94ea6156a7aee9f2fd00de335b..55d4db98fee66b1767ed9094111c42a5b4f189d0 100644 (file)
@@ -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):
index e5d1e853ce21307ac8db6dd8ab8c7d45f966ae4a..3e811b86bf19a0ee681438f5807770d75fc32e6e 100644 (file)
@@ -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):