summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/loading.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-09-30 21:26:08 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2019-10-01 16:11:34 -0400
commit9a2a0f324c13b5a1b334a3982a766cb9f21f428e (patch)
treef4548faa2cf60f07d2e13e6eb1b137ff1d3e072d /lib/sqlalchemy/orm/loading.py
parenta3c964203e61f8deeb559b15a78cc640dee67012 (diff)
downloadsqlalchemy-9a2a0f324c13b5a1b334a3982a766cb9f21f428e.tar.gz
Cancel polymorphic loading in optimized get
Since optimized_get for inheriting mappers writes a simple SELECT, we need to cancel out any with_polymorphic selectables that interfere with simple column lookup. While adaptation is another option, just removing the with_polymorphic is much simpler. The issue is not noticeable unless the ResultProxy is not allowing "key fallback" column lookups, which will be the case when this behavior is deprecated. Fixes: #4718 Change-Id: I8fa2f5c0434b6a681813a92ac71fe12712f5d634
Diffstat (limited to 'lib/sqlalchemy/orm/loading.py')
-rw-r--r--lib/sqlalchemy/orm/loading.py7
1 files changed, 4 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/loading.py b/lib/sqlalchemy/orm/loading.py
index 94a9b8d22..886240591 100644
--- a/lib/sqlalchemy/orm/loading.py
+++ b/lib/sqlalchemy/orm/loading.py
@@ -23,6 +23,7 @@ from . import strategy_options
from .base import _DEFER_FOR_STATE
from .base import _SET_DEFERRED_EXPIRED
from .util import _none_set
+from .util import aliased
from .util import state_str
from .. import exc as sa_exc
from .. import util
@@ -633,7 +634,6 @@ def _instance_processor(
if mapper.polymorphic_map and not _polymorphic_from and not refresh_state:
# if we are doing polymorphic, dispatch to a different _instance()
# method specific to the subclass mapper
-
def ensure_no_pk(row):
identitykey = (
identity_class,
@@ -957,9 +957,10 @@ def load_scalar_attributes(mapper, state, attribute_names):
# by default
statement = mapper._optimized_get_statement(state, attribute_names)
if statement is not None:
+ wp = aliased(mapper, statement)
result = load_on_ident(
- session.query(mapper)
- .options(strategy_options.Load(mapper).undefer("*"))
+ session.query(wp)
+ .options(strategy_options.Load(wp).undefer("*"))
.from_statement(statement),
None,
only_load_props=attribute_names,