From: Mike Bayer Date: Thu, 15 Jun 2017 20:06:23 +0000 (-0400) Subject: Merge test case from 770e1e399cb0c91db73a551e1962ccbb57f42e76, X-Git-Tag: rel_1_1_11~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d3a61c6081bd53541b9e833ba254676e9acef49;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git Merge test case from 770e1e399cb0c91db73a551e1962ccbb57f42e76, which applies to a 1.2 regression Change-Id: Ic99508dbf48e63b97975cb06fcb84e73135e0f4f --- diff --git a/test/orm/test_options.py b/test/orm/test_options.py index 556f73c4b8..737f3cd6f3 100644 --- a/test/orm/test_options.py +++ b/test/orm/test_options.py @@ -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