]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed eager calc endless loop, introduced by r3646? this issue should have been...
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 27 Oct 2007 00:50:20 +0000 (00:50 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 27 Oct 2007 00:50:20 +0000 (00:50 +0000)
lib/sqlalchemy/orm/strategies.py
test/orm/eager_relations.py

index e2a5be696cd16d4378dbbb2efd58f735c13eb6a7..e5a757bf4e540e47864ad8f3ba2595b2d10bac86 100644 (file)
@@ -492,9 +492,9 @@ class EagerLoader(AbstractRelationLoader):
             if len(path) / 2 > self.join_depth:
                 return
         else:
-            if self.mapper in path:
+            if self.mapper.base_mapper in path:
                 return
-        
+
         #print "CREATING EAGER PATH FOR", "->".join([str(s) for s in path])
         
         if parentmapper is None:
index a30c4d7faaa209b71ac10e37cab851f5a83714b4..b851a1856a34de4f8cc5e7a3b8b991b9069cbc53 100644 (file)
@@ -566,6 +566,45 @@ class SelfReferentialM2MEagerTest(ORMTest):
 #        l = sess.query(Widget).filter(Widget.name=='w1').all()
 #        print l
         assert [Widget(name='w1', children=[Widget(name='w2')])] == sess.query(Widget).filter(Widget.name=='w1').all()
+    
+class CyclicalInheritingEagerTest(ORMTest):
+    def define_tables(self, metadata):
+        global t1, t2
+        t1 = Table('t1', metadata, 
+            Column('c1', Integer, primary_key=True),
+            Column('c2', String(30)),
+            Column('type', String(30))
+            )
+
+        t2 = Table('t2', metadata, 
+            Column('c1', Integer, primary_key=True),
+            Column('c2', String(30)),
+            Column('type', String(30)),
+            Column('t1.id', Integer, ForeignKey('t1.c1')))
+    
+    def test_basic(self):
+        class T(object):
+            pass
+        
+        class SubT(T):
+            pass
+        
+        class T2(object):
+            pass
+
+        class SubT2(T2):
+            pass
+            
+        mapper(T, t1, polymorphic_on=t1.c.type, polymorphic_identity='t1')
+        mapper(SubT, None, inherits=T, polymorphic_identity='subt1', properties={
+            't2s':relation(SubT2, lazy=False, backref=backref('subt', lazy=False))
+        })
+        mapper(T2, t2, polymorphic_on=t2.c.type, polymorphic_identity='t2')
+        mapper(SubT2, None, inherits=T2, polymorphic_identity='subt2')
+        
+        # testing a particular endless loop condition in eager join setup
+        create_session().query(SubT).all()
+        
         
 if __name__ == '__main__':
     testbase.main()