From d5b86bbb8a91935df94dc5fbc12d6d7cee2d998d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Sat, 27 Oct 2007 00:50:20 +0000 Subject: [PATCH] - fixed eager calc endless loop, introduced by r3646? this issue should have been present before 3646 though. --- lib/sqlalchemy/orm/strategies.py | 4 ++-- test/orm/eager_relations.py | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index e2a5be696c..e5a757bf4e 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -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: diff --git a/test/orm/eager_relations.py b/test/orm/eager_relations.py index a30c4d7faa..b851a1856a 100644 --- a/test/orm/eager_relations.py +++ b/test/orm/eager_relations.py @@ -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() -- 2.47.3