diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2016-06-02 14:42:38 -0400 |
|---|---|---|
| committer | Gerrit Code Review <gerrit2@ln3.zzzcomputing.com> | 2016-06-02 14:42:38 -0400 |
| commit | dc9e35f08d3954fca82d042bf70f8275d51e6f80 (patch) | |
| tree | 31b0f2951c0e13700f123c86cdb6ba85e206e51f | |
| parent | 31699bd1866bbfc36f1501e5e1b54d3c06cf3b4c (diff) | |
| parent | afb466fb8bd9c2f8709e79fd0fce422b83ff1d6b (diff) | |
| download | sqlalchemy-dc9e35f08d3954fca82d042bf70f8275d51e6f80.tar.gz | |
Merge "Skip UniqueConstraint marked by unique=True in tometadata"
| -rw-r--r-- | doc/build/changelog/changelog_10.rst | 8 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/schema.py | 8 | ||||
| -rw-r--r-- | test/sql/test_metadata.py | 28 |
3 files changed, 43 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index 5f9521c47..b59ab392e 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -19,6 +19,14 @@ :version: 1.0.14 .. change:: + :tags: bug, sql + :tickets: 3721 + + Fixed bug whereby :meth:`.Table.tometadata` would make a duplicate + :class:`.UniqueConstraint` for each :class:`.Column` object that + featured the ``unique=True`` parameter. + + .. change:: :tags: bug, engine, postgresql :tickets: 3716 diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 64692644c..cb01a49e3 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -852,8 +852,14 @@ class Table(DialectKWArgs, SchemaItem, TableClause): schema if referred_schema == self.schema else None) table.append_constraint( c.copy(schema=fk_constraint_schema, target_table=table)) - elif not c._type_bound: + # skip unique constraints that would be generated + # by the 'unique' flag on Column + if isinstance(c, UniqueConstraint) and \ + len(c.columns) == 1 and \ + list(c.columns)[0].unique: + continue + table.append_constraint( c.copy(schema=schema, target_table=table)) for index in self.indexes: diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 449956fcd..344cfefa5 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1113,6 +1113,34 @@ class ToMetaDataTest(fixtures.TestBase, ComparesTables): eq_(str(table_c.join(table2_c).onclause), 'mytable.myid = othertable.myid') + def test_unique_true_flag(self): + meta = MetaData() + + table = Table('mytable', meta, Column('x', Integer, unique=True)) + + m2 = MetaData() + + t2 = table.tometadata(m2) + + eq_( + len([ + const for const + in t2.constraints + if isinstance(const, UniqueConstraint)]), + 1 + ) + + def test_index_true_flag(self): + meta = MetaData() + + table = Table('mytable', meta, Column('x', Integer, index=True)) + + m2 = MetaData() + + t2 = table.tometadata(m2) + + eq_(len(t2.indexes), 1) + class InfoTest(fixtures.TestBase): def test_metadata_info(self): |
