]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added unit test for previous checked in lazy fix
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 1 Feb 2007 21:44:04 +0000 (21:44 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 1 Feb 2007 21:44:04 +0000 (21:44 +0000)
test/orm/inheritance5.py

index 8a0ec165f9b861df5a4b104fe89bd4b550996e0a..8a0c909afac521e1dd664e4ea6b69ef965ad7e67 100644 (file)
@@ -435,6 +435,49 @@ class RelationTest5(testbase.ORMTest):
         assert carlist[0].manager is None
         assert carlist[1].manager.person_id == car2.manager.person_id
 
+class RelationTest6(testbase.ORMTest):
+    """test self-referential relationships on a single joined-table inheritance mapper"""
+    def define_tables(self, metadata):
+        global people, managers, data
+        people = Table('people', metadata, 
+           Column('person_id', Integer, Sequence('person_id_seq', optional=True), primary_key=True),
+           Column('name', String(50)),
+           )
+
+        managers = Table('managers', metadata, 
+           Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True),
+           Column('colleague_id', Integer, ForeignKey('managers.person_id')),
+           Column('status', String(30)),
+           )
+
+    def testbasic(self):
+        class Person(AttrSettable):
+            pass
+        class Manager(Person):
+            pass
+
+        mapper(Person, people)
+        # relationship is from people.join(managers) -> people.join(managers).  self referential logic
+        # needs to be used to figure out the lazy clause, meaning create_lazy_clause must go from parent.mapped_table
+        # to parent.mapped_table
+        mapper(Manager, managers, inherits=Person, inherit_condition=people.c.person_id==managers.c.person_id,
+              properties={
+                'colleague':relation(Manager, primaryjoin=managers.c.colleague_id==managers.c.person_id, lazy=True, uselist=False)
+             }
+        )
+
+        sess = create_session()
+        m = Manager(name='manager1')
+        m2 =Manager(name='manager2')
+        m.colleague = m2
+        sess.save(m)
+        sess.flush()
+
+        sess.clear()
+        m = sess.query(Manager).get(m.person_id)
+        m2 = sess.query(Manager).get(m2.person_id)
+        assert m.colleague is m2
+
 class SelectResultsTest(testbase.AssertMixin):
     def setUpAll(self):
         #  cars---owned by---  people (abstract) --- has a --- status