From: Mike Bayer Date: Sun, 24 Jul 2016 21:37:25 +0000 (-0400) Subject: Allow Table._reset_exported to silently pass X-Git-Tag: rel_1_0_15~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a736be3feb4cf7edf5fa3c2d1b65a444ffaf5044;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git 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 (cherry picked from commit 149fb5f55a5df3f31f6575919a5a5a2e5ba9cb0c) --- diff --git a/doc/build/changelog/changelog_10.rst b/doc/build/changelog/changelog_10.rst index c977c7366d..16a38e6626 100644 --- a/doc/build/changelog/changelog_10.rst +++ b/doc/build/changelog/changelog_10.rst @@ -18,6 +18,16 @@ .. changelog:: :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 2a1b9e6190..534e5e451a 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1180,7 +1180,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 = {} @@ -1266,7 +1265,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 f9c6d05a91..25f13113c8 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 + @util.memoized_property def _autoincrement_column(self): for col in self.primary_key: diff --git a/test/sql/test_metadata.py b/test/sql/test_metadata.py index d3c2325d77..1849fbef78 100644 --- a/test/sql/test_metadata.py +++ b/test/sql/test_metadata.py @@ -1229,6 +1229,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))