]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fix and test parsing of MySQL foreign key options within reflection;
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 25 Oct 2013 21:18:40 +0000 (17:18 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 25 Oct 2013 21:18:40 +0000 (17:18 -0400)
this complements the work in :ticket:`2183` where we begin to support
reflection of foreign key options such as ON UPDATE/ON DELETE
cascade. [ticket:2839]

doc/build/changelog/changelog_09.rst
lib/sqlalchemy/dialects/mysql/base.py
test/dialect/mysql/test_reflection.py

index 8a7a8bfc0b9a7e2d7ecff3460b9ca76b87045e44..1e7947cc5b0a2dc7952f4e26190f21adb790a865 100644 (file)
 .. changelog::
     :version: 0.9.0
 
+    .. change::
+        :tags: bug, mysql
+        :tickets: 2839
+
+        Fix and test parsing of MySQL foreign key options within reflection;
+        this complements the work in :ticket:`2183` where we begin to support
+        reflection of foreign key options such as ON UPDATE/ON DELETE
+        cascade.
+
     .. change::
         :tags: bug, orm
         :tickets: 2787
index 07aa76f65a9084498d33cc4dfce108894a44522c..6883be5af631d167e737290301e7cda6bd8a9924 100644 (file)
@@ -2807,7 +2807,7 @@ class MySQLTableDefinitionParser(object):
         #
         # unique constraints come back as KEYs
         kw = quotes.copy()
-        kw['on'] = 'RESTRICT|CASCASDE|SET NULL|NOACTION'
+        kw['on'] = 'RESTRICT|CASCADE|SET NULL|NOACTION'
         self._re_constraint = _re_compile(
             r'  '
             r'CONSTRAINT +'
index cac613d5d3e99e5d87bc752c7b407c07ca121ad2..7494eaf4315898aa5c28a9ab772c4d557a49f2c8 100644 (file)
@@ -298,3 +298,22 @@ class RawReflectionTest(fixtures.TestBase):
         assert regex.match('  PRIMARY KEY USING BTREE (`id`)')
         assert regex.match('  PRIMARY KEY (`id`) USING BTREE')
 
+    def test_fk_reflection(self):
+        regex = self.parser._re_constraint
+
+        m = regex.match('  CONSTRAINT `addresses_user_id_fkey` '
+                        'FOREIGN KEY (`user_id`) '
+                        'REFERENCES `users` (`id`) '
+                        'ON DELETE CASCADE ON UPDATE CASCADE')
+        eq_(m.groups(), ('addresses_user_id_fkey', '`user_id`',
+                            '`users`', '`id`', None, 'CASCADE', 'CASCADE'))
+
+
+        m = regex.match('  CONSTRAINT `addresses_user_id_fkey` '
+                        'FOREIGN KEY (`user_id`) '
+                        'REFERENCES `users` (`id`) '
+                        'ON DELETE CASCADE ON UPDATE SET NULL')
+        eq_(m.groups(), ('addresses_user_id_fkey', '`user_id`',
+                            '`users`', '`id`', None, 'CASCADE', 'SET NULL'))
+
+