summaryrefslogtreecommitdiff
path: root/test/sql/test_metadata.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-10-18 20:01:45 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-10-18 20:01:45 -0400
commit73669c7284548d0e5ab2147f66174c301e732650 (patch)
treed3d201b4528d41f661a39430801785b228c10760 /test/sql/test_metadata.py
parent71e043aaae1ff9cbf0597846b4cfdf645a46ebdf (diff)
downloadsqlalchemy-73669c7284548d0e5ab2147f66174c301e732650.tar.gz
- The :meth:`.Table.tometadata` method now produces copies of
all :attr:`.SchemaItem.info` dictionaries from all :class:`.SchemaItem` objects within the structure including columns, constraints, foreign keys, etc. As these dictionaries are copies, they are independent of the original dictionary. Previously, only the ``.info`` dictionary of :class:`.Column` was transferred within this operation, and it was only linked in place, not copied. [ticket:2716]
Diffstat (limited to 'test/sql/test_metadata.py')
-rw-r--r--test/sql/test_metadata.py42
1 files changed, 41 insertions, 1 deletions
diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py
index 883d9308c..d0a79a7bb 100644
--- a/test/sql/test_metadata.py
+++ b/test/sql/test_metadata.py
@@ -494,6 +494,47 @@ class MetaDataTest(fixtures.TestBase, ComparesTables):
eq_(str(table_c.join(table2_c).onclause),
'myschema.mytable.myid = myschema.othertable.myid')
+ def test_tometadata_copy_info(self):
+ m = MetaData()
+ fk = ForeignKey('t2.id')
+ c = Column('c', Integer, fk)
+ ck = CheckConstraint('c > 5')
+ t = Table('t', m, c, ck)
+
+ m.info['minfo'] = True
+ fk.info['fkinfo'] = True
+ c.info['cinfo'] = True
+ ck.info['ckinfo'] = True
+ t.info['tinfo'] = True
+ t.primary_key.info['pkinfo'] = True
+ fkc = [const for const in t.constraints if
+ isinstance(const, ForeignKeyConstraint)][0]
+ fkc.info['fkcinfo'] = True
+
+ m2 = MetaData()
+ t2 = t.tometadata(m2)
+
+ m.info['minfo'] = False
+ fk.info['fkinfo'] = False
+ c.info['cinfo'] = False
+ ck.info['ckinfo'] = False
+ t.primary_key.info['pkinfo'] = False
+ fkc.info['fkcinfo'] = False
+
+ eq_(m2.info, {})
+ eq_(t2.info, {"tinfo": True})
+ eq_(t2.c.c.info, {"cinfo": True})
+ eq_(list(t2.c.c.foreign_keys)[0].info, {"fkinfo": True})
+ eq_(t2.primary_key.info, {"pkinfo": True})
+
+ fkc2 = [const for const in t2.constraints
+ if isinstance(const, ForeignKeyConstraint)][0]
+ eq_(fkc2.info, {"fkcinfo": True})
+
+ ck2 = [const for const in
+ t2.constraints if isinstance(const, CheckConstraint)][0]
+ eq_(ck2.info, {"ckinfo": True})
+
def test_tometadata_kwargs(self):
meta = MetaData()
@@ -1877,7 +1918,6 @@ class ColumnOptionsTest(fixtures.TestBase):
c.info['bar'] = 'zip'
assert c.info['bar'] == 'zip'
-
class CatchAllEventsTest(fixtures.TestBase):
def teardown(self):