]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
Added support for autogenerate render of
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 5 Dec 2012 20:36:45 +0000 (15:36 -0500)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 5 Dec 2012 20:36:45 +0000 (15:36 -0500)
ForeignKeyConstraint options onupdate,
ondelete, initially, and deferred.
#92

alembic/autogenerate.py
docs/build/changelog.rst
tests/test_autogenerate.py

index 57227953884a63dfb269a18f269238f303207d7b..11c8789ebb28dd77167f83d441993a34e3b49cbc 100644 (file)
@@ -628,8 +628,16 @@ def _render_foreign_key(constraint, autogen_context):
     opts = []
     if constraint.name:
         opts.append(("name", repr(constraint.name)))
+    if constraint.onupdate:
+        opts.append(("onupdate", repr(constraint.onupdate)))
+    if constraint.ondelete:
+        opts.append(("ondelete", repr(constraint.ondelete)))
+    if constraint.initially:
+        opts.append(("initially", repr(constraint.initially)))
+    if constraint.deferrable:
+        opts.append(("deferrable", repr(constraint.deferrable)))
+
     apply_metadata_schema = constraint.parent.metadata.schema
-    # TODO: deferrable, initially, etc.
     return "%(prefix)sForeignKeyConstraint([%(cols)s], "\
             "[%(refcols)s], %(args)s)" % {
         "prefix": _sqlalchemy_autogenerate_prefix(autogen_context),
index 2d52e19bbc65a7bf8aad693448e1ea304277b390..6059f1281af81294b0657c87bdd632e5ba025fdd 100644 (file)
@@ -9,6 +9,14 @@ Changelog
     :version: 0.4.1
     :released:
 
+    .. change::
+        :tags: bug
+        :tickets: 92
+
+      Added support for autogenerate render of
+      ForeignKeyConstraint options onupdate,
+      ondelete, initially, and deferred.
+
     .. change::
         :tags: bug
         :tickets: 94
index 3b008ac6f60d5df4d0e606b05772862ccfa766b8..63e60afe5893c842bb953a51099dbc9257e6b2e6 100644 (file)
@@ -1,7 +1,7 @@
 from sqlalchemy import MetaData, Column, Table, Integer, String, Text, \
     Numeric, CHAR, ForeignKey, DATETIME, \
     TypeDecorator, CheckConstraint, Unicode, Enum,\
-    UniqueConstraint, Boolean
+    UniqueConstraint, Boolean, ForeignKeyConstraint
 from sqlalchemy.types import NULLTYPE, TIMESTAMP
 from sqlalchemy.dialects import mysql
 from sqlalchemy.engine.reflection import Inspector
@@ -954,6 +954,35 @@ class AutogenRenderTest(TestCase):
             "existing_type=sa.Integer(), nullable=True, schema='foo')"
         )
 
+    def test_render_fk_constraint_kwarg(self):
+        m = MetaData()
+        t1 = Table('t', m, Column('c', Integer))
+        t2 = Table('t2', m, Column('c_rem', Integer))
+
+        fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], onupdate="CASCADE")
+        eq_ignore_whitespace(
+            autogenerate._render_constraint(fk, self.autogen_context),
+            "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], onupdate='CASCADE')"
+        )
+
+        fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], ondelete="CASCADE")
+        eq_ignore_whitespace(
+            autogenerate._render_constraint(fk, self.autogen_context),
+            "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], ondelete='CASCADE')"
+        )
+
+        fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], deferrable=True)
+        eq_ignore_whitespace(
+            autogenerate._render_constraint(fk, self.autogen_context),
+            "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], deferrable=True)"
+        )
+
+        fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], initially="XYZ")
+        eq_ignore_whitespace(
+            autogenerate._render_constraint(fk, self.autogen_context),
+            "sa.ForeignKeyConstraint(['c'], ['t2.c_rem'], initially='XYZ')"
+        )
+
     def test_render_check_constraint_literal(self):
         eq_ignore_whitespace(
             autogenerate._render_check_constraint(