]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Merge test case from 770e1e399cb0c91db73a551e1962ccbb57f42e76,
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Jun 2017 20:06:23 +0000 (16:06 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 15 Jun 2017 20:06:23 +0000 (16:06 -0400)
which applies to a 1.2 regression

Change-Id: Ic99508dbf48e63b97975cb06fcb84e73135e0f4f

test/orm/test_options.py

index 556f73c4b8b3900757b3d6638fe2db701e5c6efd..737f3cd6f321dc9142bc73430b2f4558babf4bde 100644 (file)
@@ -9,7 +9,9 @@ import sqlalchemy as sa
 from sqlalchemy import testing
 from sqlalchemy.testing.assertions import eq_, assert_raises_message
 from test.orm import _fixtures
-
+from sqlalchemy import Column, Integer, String, ForeignKey
+from sqlalchemy.orm import subqueryload
+from sqlalchemy.testing import fixtures
 
 class QueryTest(_fixtures.FixtureTest):
     run_setup_mappers = 'once'
@@ -517,6 +519,53 @@ class OptionsTest(PathTest, QueryTest):
         ])
 
 
+class FromSubclassOptionsTest(PathTest, fixtures.DeclarativeMappedTest):
+    # test for regression to #3963
+    run_setup_mappers = 'once'
+    run_inserts = 'once'
+    run_deletes = None
+
+    @classmethod
+    def setup_mappers(cls):
+        Base = cls.DeclarativeBasic
+
+        class BaseCls(Base):
+            __tablename__ = 'basecls'
+            id = Column(Integer, primary_key=True)
+
+            type = Column(String)
+            related_id = Column(ForeignKey('related.id'))
+            related = relationship("Related")
+
+        class SubClass(BaseCls):
+            __tablename__ = 'subcls'
+            id = Column(ForeignKey('basecls.id'), primary_key=True)
+
+        class Related(Base):
+            __tablename__ = 'related'
+            id = Column(Integer, primary_key=True)
+
+            sub_related_id = Column(ForeignKey('sub_related.id'))
+            sub_related = relationship('SubRelated')
+
+        class SubRelated(Base):
+            __tablename__ = 'sub_related'
+            id = Column(Integer, primary_key=True)
+
+    def test_with_current_nonmatching_entity_subclasses(self):
+        BaseCls, SubClass, Related, SubRelated = self.classes(
+            'BaseCls', 'SubClass', 'Related', 'SubRelated')
+        sess = Session()
+
+        q = sess.query(Related)._with_current_path(
+            self._make_path_registry(
+                [inspect(SubClass), 'related'])
+        )
+
+        opt = subqueryload(SubClass.related).subqueryload(Related.sub_related)
+        self._assert_path_result(opt, q, [(Related, "sub_related")])
+
+
 class OptionsNoPropTest(_fixtures.FixtureTest):
     """test the error messages emitted when using property
     options in conjunction with column-only entities, or