.. changelog::
:version: 1.0.11
+ .. change::
+ :tags: bug, ext
+ :tickets: 3612
+ :versions: 1.1.0b1
+
+ Fixed bug in baked loader system where the systemwide monkeypatch
+ for setting up baked lazy loaders would interfere with other
+ loader strategies that rely on lazy loading as a fallback, e.g.
+ joined and subquery eager loaders, leading to ``IndexError``
+ exceptions at mapper configuration time.
+
.. change::
:tags: bug, orm
:tickets: 3611
Python overhead for these operations.
"""
- strategies.LazyLoader._strategy_keys[:] = []
BakedLazyLoader._strategy_keys[:] = []
properties.RelationshipProperty.strategy_for(
properties.RelationshipProperty.strategy_for(
lazy="baked_select")(BakedLazyLoader)
+ strategies.LazyLoader._strategy_keys[:] = BakedLazyLoader._strategy_keys[:]
+
def unbake_lazy_loaders():
"""Disable the use of baked queries for all lazyloaders systemwide.
return strategy
def _get_strategy_by_cls(self, cls):
- return self._get_strategy(cls._strategy_keys[0])
+ try:
+ return self._get_strategy(cls._strategy_keys[0])
+ except IndexError:
+ import pdb
+ pdb.set_trace()
def setup(
self, context, entity, path, adapter, **kwargs):
u1._sa_instance_state
)
+ def test_systemwide_loaders_loadable_via_lazyloader(self):
+ from sqlalchemy.orm import configure_mappers
+ from sqlalchemy.orm.strategies import LazyLoader
+
+ baked.bake_lazy_loaders()
+ try:
+ User, Address = self._o2m_fixture(lazy='joined')
+
+ configure_mappers()
+
+ is_(
+ User.addresses.property.
+ _get_strategy_by_cls(LazyLoader).__class__,
+ BakedLazyLoader
+ )
+ finally:
+ baked.unbake_lazy_loaders()
+
def test_invocation_systemwide_loaders(self):
baked.bake_lazy_loaders()
try: