From: Mike Bayer Date: Tue, 15 Jun 2010 21:56:17 +0000 (-0400) Subject: - Column.copy() takes along the "unique" attribute X-Git-Tag: rel_0_6_2~39 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a8e53a4f31757809e59826ffbc8989c00ed520b1;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Column.copy() takes along the "unique" attribute among others, fixes [ticket:1829] regarding declarative mixins --- diff --git a/CHANGES b/CHANGES index a479afa9a6..84cac88906 100644 --- a/CHANGES +++ b/CHANGES @@ -52,6 +52,10 @@ CHANGES _constructor to return Column, for the purposes of making "configurational" column classes that aren't involved in proxying, etc. + + - Column.copy() takes along the "unique" attribute + among others, fixes [ticket:1829] regarding declarative + mixins - firebird - Fixed incorrect signature in do_execute(), error diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 6a69739d1e..b19e2d8baf 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -849,6 +849,7 @@ class Column(SchemaItem, expression.ColumnClause): key = self.key, primary_key = self.primary_key, nullable = self.nullable, + unique = self.unique, quote=self.quote, index=self.index, autoincrement=self.autoincrement, diff --git a/test/engine/test_metadata.py b/test/engine/test_metadata.py index 25a9a6d140..4c7eee97b5 100644 --- a/test/engine/test_metadata.py +++ b/test/engine/test_metadata.py @@ -40,13 +40,14 @@ class MetaDataTest(TestBase, ComparesTables): def test_uninitialized_column_copy(self): for col in [ Column('foo', String(), nullable=False), + Column('baz', String(), unique=True), Column(Integer(), primary_key=True), Column('bar', Integer(), Sequence('foo_seq'), primary_key=True, key='bar'), Column(Integer(), ForeignKey('bat.blah')), Column('bar', Integer(), ForeignKey('bat.blah'), primary_key=True, key='bar'), ]: c2 = col.copy() - for attr in ('name', 'type', 'nullable', 'primary_key', 'key'): + for attr in ('name', 'type', 'nullable', 'primary_key', 'key', 'unique'): eq_(getattr(col, attr), getattr(c2, attr)) eq_(len(col.foreign_keys), len(c2.foreign_keys)) if col.default: diff --git a/test/ext/test_declarative.py b/test/ext/test_declarative.py index 1579935047..87793658df 100644 --- a/test/ext/test_declarative.py +++ b/test/ext/test_declarative.py @@ -1898,6 +1898,17 @@ class DeclarativeMixinTest(DeclarativeTestBase): eq_(obj.id,1) eq_(obj.name,'testing') eq_(obj.foo(),'bar1') + + def test_unique_column(self): + + class MyMixin(object): + id = Column(Integer, primary_key=True) + value = Column(String, unique=True) + + class MyModel(Base, MyMixin): + __tablename__ = 'test' + + assert MyModel.__table__.c.value.unique def test_hierarchical_bases(self):