diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-07-24 17:37:25 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-07-24 23:17:11 -0400 |
| commit | 2c8643b0e98070bbf51bc38d32258526634ee67d (patch) | |
| tree | b7aee41d45e0f6964060abd2a219d9165743555f | |
| parent | 96c4208bf83607120d2f716070ed22ee10312dd0 (diff) | |
| download | sqlalchemy-2c8643b0e98070bbf51bc38d32258526634ee67d.tar.gz | |
Allow Table._reset_exported to silently pass
Fixed bug in :class:`.Table` where the internal method
``_reset_exported()`` would corrupt the state of the object. This
method is intended for selectable objects and is called by the ORM
in some cases; an erroneous mapper configuration would could lead the
ORM to call this on on a :class:`.Table` object.
Change-Id: I63fa34ee0cdf16358bb125c556390df79758bcbc
Fixes: #3755
| -rw-r--r-- | doc/build/changelog/changelog_10.rst | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/schema.py | 3 | ||||
| -rw-r--r-- | test/sql/test_metadata.py | 15 |
4 files changed, 28 insertions, 2 deletions
diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index c977c7366..16a38e662 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -19,6 +19,16 @@ :version: 1.0.15 .. change:: + :tags: bug, sql + :tickets: 3755 + + Fixed bug in :class:`.Table` where the internal method + ``_reset_exported()`` would corrupt the state of the object. This + method is intended for selectable objects and is called by the ORM + in some cases; an erroneous mapper configuration would could lead the + ORM to call this on on a :class:`.Table` object. + + .. change:: :tags: bug, ext :tickets: 3743 diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 858c35344..b76a6f727 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1230,7 +1230,6 @@ class Mapper(InspectionAttr): instrumentation.unregister_class(self.class_) def _configure_pks(self): - self.tables = sql_util.find_tables(self.mapped_table) self._pks_by_table = {} @@ -1316,7 +1315,6 @@ class Mapper(InspectionAttr): col.table not in self._cols_by_table)) def _configure_properties(self): - # Column and other ClauseElement objects which are mapped self.columns = self.c = util.OrderedProperties() diff --git a/lib/sqlalchemy/sql/schema.py b/lib/sqlalchemy/sql/schema.py index ee139827a..55d0b74e6 100644 --- a/lib/sqlalchemy/sql/schema.py +++ b/lib/sqlalchemy/sql/schema.py @@ -598,6 +598,9 @@ class Table(DialectKWArgs, SchemaItem, TableClause): def _init_collections(self): pass + def _reset_exported(self): + pass + @property def _autoincrement_column(self): return self.primary_key._autoincrement_column diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index 92d35e6e5..846e70589 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1231,6 +1231,21 @@ class TableTest(fixtures.TestBase, AssertsCompiledSQL): t.info['bar'] = 'zip' assert t.info['bar'] == 'zip' + def test_reset_exported_passes(self): + + m = MetaData() + + t = Table('t', m, Column('foo', Integer)) + eq_( + list(t.c), [t.c.foo] + ) + + t._reset_exported() + + eq_( + list(t.c), [t.c.foo] + ) + def test_foreign_key_constraints_collection(self): metadata = MetaData() t1 = Table('foo', metadata, Column('a', Integer)) |
