]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Added explicit check for when Column .name
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Apr 2011 19:49:33 +0000 (15:49 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 20 Apr 2011 19:49:33 +0000 (15:49 -0400)
is assigned as blank string [ticket:2140]

CHANGES
lib/sqlalchemy/orm/strategies.py
lib/sqlalchemy/schema.py
test/sql/test_metadata.py

diff --git a/CHANGES b/CHANGES
index 72fc038c126ed43a0e19116c14546b8df6411af1..faa02e86eec4760dae9c0199ffc286619ea97157 100644 (file)
--- 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.
index acdac9984dacad4398b07ea3419b8a52621ce494..9c6d5bf1c440dec7671acb8b5569e19115cd244e 100644 (file)
@@ -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]
index 45762490bcf3fcb5ca878c375e370e5eca029e7f..bff3e8d6351d26e87944ebd28bc22e02c6797420 100644 (file)
@@ -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)
index 7ca31c85447d656d05fef2b79ae5ef8a9d1cb9b7..87d8ae51687e18cbc98b11c413355e169e6b9066 100644 (file)
@@ -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)