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.

  • Participants
  • Parent commits 3a8e4e8

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:

File 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)

File tests/test_op.py

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