diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-10-14 14:53:28 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-10-14 14:56:45 -0400 |
commit | 621c22ca31eb395c4c47e313a00b1708b76d0017 (patch) | |
tree | 0f02efabbdf130962550416164c2a92074acdc1e | |
parent | 5389bc5d8d6e72bdf7bf937de77201d6d2a58759 (diff) | |
download | sqlalchemy-621c22ca31eb395c4c47e313a00b1708b76d0017.tar.gz |
The ``.unique`` flag on :class:`.Index` could be produced as ``None``
if it was generated from a :class:`.Column` that didn't specify ``unique``
(where it defaults to ``None``). The flag will now always be ``True`` or
``False``. [ticket:2825]
Conflicts:
lib/sqlalchemy/sql/schema.py
-rw-r--r-- | doc/build/changelog/changelog_08.rst | 10 | ||||
-rw-r--r-- | lib/sqlalchemy/schema.py | 7 | ||||
-rw-r--r-- | test/sql/test_metadata.py | 22 |
3 files changed, 38 insertions, 1 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst index f147fcfed..2326d6216 100644 --- a/doc/build/changelog/changelog_08.rst +++ b/doc/build/changelog/changelog_08.rst @@ -11,6 +11,16 @@ :version: 0.8.3 .. change:: + :tags: bug, sql + :tickets: 2825 + :versions: 0.9.0 + + The ``.unique`` flag on :class:`.Index` could be produced as ``None`` + if it was generated from a :class:`.Column` that didn't specify ``unique`` + (where it defaults to ``None``). The flag will now always be ``True`` or + ``False``. + + .. change:: :tags: feature, orm :tickets: 2836 :versions: 0.9.0 diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 641650d32..bdf6bd169 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -939,8 +939,13 @@ class Column(SchemaItem, expression.ColumnClause): self.default = kwargs.pop('default', None) self.server_default = kwargs.pop('server_default', None) self.server_onupdate = kwargs.pop('server_onupdate', None) + + # these default to None because .index and .unique is *not* + # an informational flag about Column - there can still be an + # Index or UniqueConstraint referring to this Column. self.index = kwargs.pop('index', None) self.unique = kwargs.pop('unique', None) + self.system = kwargs.pop('system', False) self.quote = kwargs.pop('quote', None) self.doc = kwargs.pop('doc', None) @@ -1092,7 +1097,7 @@ class Column(SchemaItem, expression.ColumnClause): "To create indexes with a specific name, create an " "explicit Index object external to the Table.") Index(expression._truncated_label('ix_%s' % self._label), - self, unique=self.unique) + self, unique=bool(self.unique)) elif self.unique: if isinstance(self.unique, basestring): raise exc.ArgumentError( diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 3075d3685..c4b73d1d5 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1309,6 +1309,28 @@ class ColumnDefinitionTest(AssertsCompiledSQL, fixtures.TestBase): assert c.name == 'named' assert c.name == c.key + def test_unique_index_flags_default_to_none(self): + c = Column(Integer) + eq_(c.unique, None) + eq_(c.index, None) + + c = Column('c', Integer, index=True) + eq_(c.unique, None) + eq_(c.index, True) + + t = Table('t', MetaData(), c) + eq_(list(t.indexes)[0].unique, False) + + c = Column(Integer, unique=True) + eq_(c.unique, True) + eq_(c.index, None) + + c = Column('c', Integer, index=True, unique=True) + eq_(c.unique, True) + eq_(c.index, True) + + t = Table('t', MetaData(), c) + eq_(list(t.indexes)[0].unique, True) def test_bogus(self): assert_raises(exc.ArgumentError, Column, 'foo', name='bar') |