From: Mike Bayer Date: Thu, 26 Apr 2012 22:07:06 +0000 (-0400) Subject: - [bug] Fixed bug whereby create_unique_constraint() X-Git-Tag: rel_0_3_2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22c36646b82ab1c4d076fc52e4c7e741ca56567c;p=thirdparty%2Fsqlalchemy%2Falembic.git - [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. --- diff --git a/CHANGES b/CHANGES index 0f980847..241c57ac 100644 --- a/CHANGES +++ b/CHANGES @@ -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 ece62486..7787f77a 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 71d78d95..58c560d6 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')