diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-14 16:41:21 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-03-14 16:41:21 -0400 |
commit | ce7ce28f3c11774c61668663fe60ff41080de90a (patch) | |
tree | 7e010a9e8262d400d4456ca4978ffa089fc206a3 | |
parent | 623c7e76ef04c5656d7a116287a39e318f6744b1 (diff) | |
download | alembic-ce7ce28f3c11774c61668663fe60ff41080de90a.tar.gz |
- Added support for the ``initially``, ``match`` keyword arguments
as well as dialect-specific keyword arguments to
:meth:`.Operations.create_foreign_key`.
fixes #190
-rw-r--r-- | alembic/operations.py | 17 | ||||
-rw-r--r-- | docs/build/changelog.rst | 7 | ||||
-rw-r--r-- | tests/test_op.py | 35 |
3 files changed, 53 insertions, 6 deletions
diff --git a/alembic/operations.py b/alembic/operations.py index 828b420..f1d06a5 100644 --- a/alembic/operations.py +++ b/alembic/operations.py @@ -73,7 +73,8 @@ class Operations(object): local_cols, remote_cols, onupdate=None, ondelete=None, deferrable=None, source_schema=None, - referent_schema=None): + referent_schema=None, initially=None, + match=None, **dialect_kw): m = self._metadata() if source == referent: t1_cols = local_cols + remote_cols @@ -95,7 +96,10 @@ class Operations(object): name=name, onupdate=onupdate, ondelete=ondelete, - deferrable=deferrable + deferrable=deferrable, + initially=initially, + match=match, + **dialect_kw ) t1.append_constraint(f) @@ -514,10 +518,12 @@ class Operations(object): schema) ) + def create_foreign_key(self, name, source, referent, local_cols, remote_cols, onupdate=None, ondelete=None, - deferrable=None, source_schema=None, - referent_schema=None): + deferrable=None, initially=None, match=None, + source_schema=None, referent_schema=None, + **dialect_kw): """Issue a "create foreign key" instruction using the current migration context. @@ -567,7 +573,8 @@ class Operations(object): local_cols, remote_cols, onupdate=onupdate, ondelete=ondelete, deferrable=deferrable, source_schema=source_schema, - referent_schema=referent_schema) + referent_schema=referent_schema, + initially=initially, match=match, **dialect_kw) ) def create_unique_constraint(self, name, source, local_cols, diff --git a/docs/build/changelog.rst b/docs/build/changelog.rst index 0b142df..8fae97e 100644 --- a/docs/build/changelog.rst +++ b/docs/build/changelog.rst @@ -6,6 +6,13 @@ Changelog :version: 0.6.4 .. change:: + :tags: bug + :tickets: 190 + + Added support for the ``initially``, ``match`` keyword arguments + as well as dialect-specific keyword arguments to + :meth:`.Operations.create_foreign_key`. + :tags: feature :tickets: 163 diff --git a/tests/test_op.py b/tests/test_op.py index a243aeb..1b82af3 100644 --- a/tests/test_op.py +++ b/tests/test_op.py @@ -6,7 +6,8 @@ from sqlalchemy.sql import column, func, text from sqlalchemy import event from alembic import op -from . import op_fixture, assert_raises_message, requires_094 +from . import op_fixture, assert_raises_message, requires_094, eq_ +import mock @event.listens_for(Table, "after_parent_attach") def _add_cols(table, metadata): @@ -397,6 +398,38 @@ def test_add_foreign_key_deferrable(): "REFERENCES t2 (bat, hoho) DEFERRABLE" ) +def test_add_foreign_key_initially(): + context = op_fixture() + op.create_foreign_key('fk_test', 't1', 't2', + ['foo', 'bar'], ['bat', 'hoho'], + initially='INITIAL') + context.assert_( + "ALTER TABLE t1 ADD CONSTRAINT fk_test FOREIGN KEY(foo, bar) " + "REFERENCES t2 (bat, hoho) INITIALLY INITIAL" + ) + +def test_add_foreign_key_match(): + context = op_fixture() + op.create_foreign_key('fk_test', 't1', 't2', + ['foo', 'bar'], ['bat', 'hoho'], + match='SIMPLE') + context.assert_( + "ALTER TABLE t1 ADD CONSTRAINT fk_test FOREIGN KEY(foo, bar) " + "REFERENCES t2 (bat, hoho) MATCH SIMPLE" + ) + +def test_add_foreign_key_dialect_kw(): + context = op_fixture() + with mock.patch("alembic.operations.sa_schema.ForeignKeyConstraint") as fkc: + op.create_foreign_key('fk_test', 't1', 't2', + ['foo', 'bar'], ['bat', 'hoho'], + foobar_arg='xyz') + eq_(fkc.mock_calls[0], + mock.call(['foo', 'bar'], ['t2.bat', 't2.hoho'], + onupdate=None, ondelete=None, name='fk_test', + foobar_arg='xyz', + deferrable=None, initially=None, match=None)) + def test_add_foreign_key_self_referential(): context = op_fixture() op.create_foreign_key("fk_test", "t1", "t1", ["foo"], ["bar"]) |