diff options
-rw-r--r-- | CHANGES | 5 | ||||
-rw-r--r-- | alembic/operations.py | 2 | ||||
-rw-r--r-- | tests/test_op.py | 16 |
3 files changed, 22 insertions, 1 deletions
@@ -7,6 +7,11 @@ ForeignKey target in column alter operations, courtesy Alexander Kolov. +- [bug] Fixed bug whereby create_unique_constraint() + would include in the constraint columns that + are added to all Table objects using events, + externally to the generation of the constraint. + 0.3.1 ===== - [bug] bulk_insert() fixes: diff --git a/alembic/operations.py b/alembic/operations.py index ece6248..7787f77 100644 --- a/alembic/operations.py +++ b/alembic/operations.py @@ -74,7 +74,7 @@ class Operations(object): t = schema.Table(source, schema.MetaData(), *[schema.Column(n, NULLTYPE) for n in local_cols]) kw['name'] = name - uq = schema.UniqueConstraint(*t.c, **kw) + uq = schema.UniqueConstraint(*[t.c[n] for n in local_cols], **kw) # TODO: need event tests to ensure the event # is fired off here t.append_constraint(uq) diff --git a/tests/test_op.py b/tests/test_op.py index 71d78d9..58c560d 100644 --- a/tests/test_op.py +++ b/tests/test_op.py @@ -201,6 +201,22 @@ def test_add_unique_constraint(): "ALTER TABLE t1 ADD CONSTRAINT uk_test UNIQUE (foo, bar)" ) +def test_add_unique_constraint_auto_cols(): + context = op_fixture() + from sqlalchemy import event, DateTime + + @event.listens_for(Table, "after_parent_attach") + def _table_standard_cols(table, metadata): + table.append_column(Column('created_at', DateTime)) + + try: + op.create_unique_constraint('uk_test', 't1', ['foo', 'bar']) + context.assert_( + "ALTER TABLE t1 ADD CONSTRAINT uk_test UNIQUE (foo, bar)" + ) + finally: + Table.dispatch._clear() + def test_drop_constraint(): context = op_fixture() op.drop_constraint('foo_bar_bat', 't1') |