]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
add warning about dodgy use of tometadata
authorChris Withers <chris@simplistix.co.uk>
Thu, 16 Sep 2010 20:10:17 +0000 (21:10 +0100)
committerChris Withers <chris@simplistix.co.uk>
Thu, 16 Sep 2010 20:10:17 +0000 (21:10 +0100)
lib/sqlalchemy/schema.py
test/engine/test_metadata.py

index fc5dd33df3f7a11969b798bdf5be8279fd55166e..99e8c2a8c3ee25dcb6efe9ab87612ad03872c605 100644 (file)
@@ -471,7 +471,11 @@ class Table(SchemaItem, expression.TableClause):
             if schema is RETAIN_SCHEMA:
                 schema = self.schema
             key = _get_table_key(self.name, schema)
-            return metadata.tables[key]
+            result = metadata.tables[key]
+            util.warn('tometadata will raise an exception '
+                      'when a table already exists in the '
+                      'target metadata in SQLAlchemy 0.7')
+            return result
         except KeyError:
             args = []
             for c in self.columns:
index a99188f15e7be64697970f25ffc4142be5eeb0a3..ace7ab19629a8586bd636986cd90c4b4a56697af 100644 (file)
@@ -1,4 +1,7 @@
-from sqlalchemy.test.testing import assert_raises, assert_raises_message
+from sqlalchemy.test.testing import assert_raises
+from sqlalchemy.test.testing import assert_raises_message
+from sqlalchemy.test.testing import emits_warning
+
 import pickle
 from sqlalchemy import Integer, String, UniqueConstraint, \
     CheckConstraint, ForeignKey, MetaData, Sequence, \
@@ -284,6 +287,26 @@ class MetaDataTest(TestBase, ComparesTables):
             
         eq_(table_indexes,table_c_indexes)
 
+    @emits_warning('tometadata.*')
+    def test_tometadata_already_there(self):
+        
+        meta1 = MetaData()
+        table1 = Table('mytable', meta1,
+            Column('myid', Integer, primary_key=True),
+        )
+        meta2 = MetaData()
+        table2 = Table('mytable', meta2,
+            Column('yourid', Integer, primary_key=True),
+        )
+
+        meta3 = MetaData()
+        
+        table_c = table1.tometadata(meta2)
+        table_d = table2.tometadata(meta2)
+
+        # d'oh!
+        assert table_c is table_d
+
     def test_tometadata_default_schema(self):
         meta = MetaData()