From: Mike Bayer Date: Wed, 20 Apr 2011 19:49:33 +0000 (-0400) Subject: - Added explicit check for when Column .name X-Git-Tag: rel_0_7_0~48 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0c560edee7d620bc2c4fcd820c1c04a3673d9b88;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Added explicit check for when Column .name is assigned as blank string [ticket:2140] --- diff --git a/CHANGES b/CHANGES index 72fc038c12..faa02e86ee 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,10 @@ CHANGES fixed up some of the error messages tailored in [ticket:2069] +- sql + - Added explicit check for when Column .name + is assigned as blank string [ticket:2140] + - postgresql - Fixed the psycopg2_version parsing in the psycopg2 dialect. diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index acdac9984d..9c6d5bf1c4 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -118,6 +118,8 @@ class ColumnLoader(LoaderStrategy): def setup_query(self, context, entity, path, reduced_path, adapter, column_collection=None, **kwargs): +# import pdb +# pdb.set_trace() for c in self.columns: if adapter: c = adapter.columns[c] diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index 45762490bc..bff3e8d635 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -901,15 +901,17 @@ class Column(SchemaItem, expression.ColumnClause): ["%s=%s" % (k, repr(getattr(self, k))) for k in kwarg]) def _set_parent(self, table): - if self.name is None: + if not self.name: raise exc.ArgumentError( - "Column must be constructed with a name or assign .name " - "before adding to a Table.") + "Column must be constructed with a non-blank name or " + "assign a non-blank .name before adding to a Table.") if self.key is None: self.key = self.name if getattr(self, 'table', None) is not None: - raise exc.ArgumentError("this Column already has a table!") + raise exc.ArgumentError( + "Column object already assigned to Table '%s'" % + self.table.description) if self.key in table._columns: col = table._columns.get(self.key) diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 7ca31c8544..87d8ae5168 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -862,10 +862,32 @@ class ColumnDefinitionTest(AssertsCompiledSQL, fixtures.TestBase): for i, col in enumerate(tbl.c): assert col.name == c[i].name - def test_incomplete(self): - c = self.columns() + def test_name_none(self): + + c = Column(Integer) + assert_raises_message( + exc.ArgumentError, + "Column must be constructed with a non-blank name or assign a " + "non-blank .name ", + Table, 't', MetaData(), c) + + def test_name_blank(self): - assert_raises(exc.ArgumentError, Table, 't', MetaData(), *c) + c = Column('', Integer) + assert_raises_message( + exc.ArgumentError, + "Column must be constructed with a non-blank name or assign a " + "non-blank .name ", + Table, 't', MetaData(), c) + + def test_dupe_column(self): + c = Column('x', Integer) + t = Table('t', MetaData(), c) + + assert_raises_message( + exc.ArgumentError, + "Column object already assigned to Table 't'", + Table, 'q', MetaData(), c) def test_incomplete_key(self): c = Column(Integer)