Commits

Mike Bayer committed b41ad27

- [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.

Comments (0)

Files changed (3)

   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:

alembic/operations.py

         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)
         "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')