From 0c560edee7d620bc2c4fcd820c1c04a3673d9b88 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 20 Apr 2011 15:49:33 -0400 Subject: [PATCH] - Added explicit check for when Column .name is assigned as blank string [ticket:2140] --- CHANGES | 4 ++++ lib/sqlalchemy/orm/strategies.py | 2 ++ lib/sqlalchemy/schema.py | 10 ++++++---- test/sql/test_metadata.py | 28 +++++++++++++++++++++++++--- 4 files changed, 37 insertions(+), 7 deletions(-) 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) -- 2.47.2