- [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.
This commit is contained in:
Mike Bayer
2012-04-26 18:07:06 -04:00
parent 2747894d2c
commit 22c36646b8
3 changed files with 22 additions and 1 deletions

View File

@@ -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:

View File

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

View File

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