diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2020-03-22 16:47:04 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@bbpush.zzzcomputing.com> | 2020-03-22 16:47:04 +0000 |
| commit | fd74bd8eea3f3696c43ca0336ed4e437036c43c5 (patch) | |
| tree | a3fb9cd1194ed83e0721c886e2b8ccafc47d50ee /test | |
| parent | 7ff3e3f2e73e7f17c0a352dacf5c0ccfa2ef7be9 (diff) | |
| parent | becab22dcbe9d68b0671a9246e022c9810f7e319 (diff) | |
| download | sqlalchemy-fd74bd8eea3f3696c43ca0336ed4e437036c43c5.tar.gz | |
Merge "Test instance for matching class hierarchy on get_from_identity"
Diffstat (limited to 'test')
| -rw-r--r-- | test/orm/inheritance/test_relationship.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/test/orm/inheritance/test_relationship.py b/test/orm/inheritance/test_relationship.py index 9bbee1e2c..b7d49829e 100644 --- a/test/orm/inheritance/test_relationship.py +++ b/test/orm/inheritance/test_relationship.py @@ -19,6 +19,7 @@ from sqlalchemy.testing import AssertsCompiledSQL from sqlalchemy.testing import eq_ from sqlalchemy.testing import fixtures from sqlalchemy.testing import is_ +from sqlalchemy.testing.entities import ComparableEntity from sqlalchemy.testing.schema import Column from sqlalchemy.testing.schema import Table @@ -2682,3 +2683,75 @@ class BetweenSubclassJoinWExtraJoinedLoad( "seen AS seen_1 ON people.id = seen_1.id LEFT OUTER JOIN " "seen AS seen_2 ON people_1.id = seen_2.id", ) + + +class M2ODontLoadSiblingTest(fixtures.DeclarativeMappedTest): + """test for #5210""" + + @classmethod + def setup_classes(cls): + Base = cls.DeclarativeBasic + + class Parent(Base, ComparableEntity): + __tablename__ = "parents" + + id = Column(Integer, primary_key=True) + child_type = Column(String(50), nullable=False) + + __mapper_args__ = { + "polymorphic_on": child_type, + } + + class Child1(Parent): + __tablename__ = "children_1" + + id = Column(Integer, ForeignKey(Parent.id), primary_key=True) + + __mapper_args__ = { + "polymorphic_identity": "child1", + } + + class Child2(Parent): + __tablename__ = "children_2" + + id = Column(Integer, ForeignKey(Parent.id), primary_key=True) + + __mapper_args__ = { + "polymorphic_identity": "child2", + } + + class Other(Base): + __tablename__ = "others" + + id = Column(Integer, primary_key=True) + parent_id = Column(Integer, ForeignKey(Parent.id)) + + parent = relationship(Parent) + child2 = relationship(Child2, viewonly=True) + + @classmethod + def insert_data(cls): + Other, Child1 = cls.classes("Other", "Child1") + s = Session() + obj = Other(parent=Child1()) + s.add(obj) + s.commit() + + def test_load_m2o_emit_query(self): + Other, Child1 = self.classes("Other", "Child1") + s = Session() + + obj = s.query(Other).first() + + is_(obj.child2, None) + eq_(obj.parent, Child1()) + + def test_load_m2o_use_get(self): + Other, Child1 = self.classes("Other", "Child1") + s = Session() + + obj = s.query(Other).first() + c1 = s.query(Child1).first() + + is_(obj.child2, None) + is_(obj.parent, c1) |
