diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-08-15 14:27:12 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-08-15 14:27:12 -0400 |
commit | d768ec2c266ec462a8ff0b782516c494c451f2db (patch) | |
tree | 72874a7fff8c8886da86bbe1fff4d519b9009d2d | |
parent | b0411e80df13d347104a60c512aeb18b6479bb12 (diff) | |
download | sqlalchemy-d768ec2c266ec462a8ff0b782516c494c451f2db.tar.gz |
- don't add the parent attach event within _on_table_attach
if we already have a table; this prevents reentrant calls and
we aren't supporting columns/etc being moved around between different parents
-rw-r--r-- | lib/sqlalchemy/sql/schema.py | 3 | ||||
-rw-r--r-- | test/sql/test_metadata.py | 14 |
2 files changed, 16 insertions, 1 deletions
diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index 8099dca75..c8e815d24 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -1269,7 +1269,8 @@ class Column(SchemaItem, ColumnClause): def _on_table_attach(self, fn): if self.table is not None: fn(self, self.table) - event.listen(self, 'after_parent_attach', fn) + else: + event.listen(self, 'after_parent_attach', fn) def copy(self, **kw): """Create a copy of this ``Column``, unitialized. diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index ff2755ab1..4a484dbac 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -349,6 +349,20 @@ class MetaDataTest(fixtures.TestBase, ComparesTables): assert t.c.x.default is s2 assert m1._sequences['x_seq'] is s2 + + def test_sequence_attach_to_table(self): + m1 = MetaData() + s1 = Sequence("s") + t = Table('a', m1, Column('x', Integer, s1)) + assert s1.metadata is m1 + + def test_sequence_attach_to_existing_table(self): + m1 = MetaData() + s1 = Sequence("s") + t = Table('a', m1, Column('x', Integer)) + t.c.x._init_items(s1) + assert s1.metadata is m1 + def test_pickle_metadata_sequence_implicit(self): m1 = MetaData() Table('a', m1, |