summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES5
-rw-r--r--alembic/operations.py2
-rw-r--r--tests/test_op.py16
3 files changed, 22 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index 0f98084..241c57a 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 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')