]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- test for postfetch->sync.populate() having importance during an UPDATE
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Aug 2014 20:16:47 +0000 (16:16 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Aug 2014 20:31:10 +0000 (16:31 -0400)
at the per-table level

test/orm/test_naturalpks.py

index a4e982f84bdad662fa1f8d2b641dbda389fcf0b5..709e1c0b1dedacd1f5cc438db46ca314100f61c5 100644 (file)
@@ -1205,3 +1205,77 @@ class JoinedInheritanceTest(fixtures.MappedTest):
 
         eq_(e1.boss_name, 'pointy haired')
         eq_(e2.boss_name, 'pointy haired')
+
+
+class JoinedInheritancePKOnFKTest(fixtures.MappedTest):
+    """Test cascades of pk->non-pk/fk on joined table inh."""
+
+    # mssql doesn't allow ON UPDATE on self-referential keys
+    __unsupported_on__ = ('mssql',)
+
+    __requires__ = 'skip_mysql_on_windows',
+    __backend__ = True
+
+    @classmethod
+    def define_tables(cls, metadata):
+        fk_args = _backend_specific_fk_args()
+
+        Table(
+            'person', metadata,
+            Column('name', String(50), primary_key=True),
+            Column('type', String(50), nullable=False),
+            test_needs_fk=True)
+
+        Table(
+            'engineer', metadata,
+            Column('id', Integer, primary_key=True),
+            Column(
+                'person_name', String(50),
+                ForeignKey('person.name', **fk_args)),
+            Column('primary_language', String(50)),
+            test_needs_fk=True
+        )
+
+    @classmethod
+    def setup_classes(cls):
+
+        class Person(cls.Comparable):
+            pass
+
+        class Engineer(Person):
+            pass
+
+    def _test_pk(self, passive_updates):
+        Person, person, Engineer, engineer = (
+            self.classes.Person, self.tables.person,
+            self.classes.Engineer, self.tables.engineer)
+
+        mapper(
+            Person, person, polymorphic_on=person.c.type,
+            polymorphic_identity='person', passive_updates=passive_updates)
+        mapper(
+            Engineer, engineer, inherits=Person,
+            polymorphic_identity='engineer')
+
+        sess = sa.orm.sessionmaker()()
+
+        e1 = Engineer(name='dilbert', primary_language='java')
+        sess.add(e1)
+        sess.commit()
+        e1.name = 'wally'
+        e1.primary_language = 'c++'
+
+        sess.flush()
+
+        eq_(e1.person_name, 'wally')
+
+        sess.expire_all()
+        eq_(e1.primary_language, "c++")
+
+    @testing.requires.on_update_cascade
+    def test_pk_passive(self):
+        self._test_pk(True)
+
+    #@testing.requires.non_updating_cascade
+    def test_pk_nonpassive(self):
+        self._test_pk(False)