diff options
author | mike bayer <mike_mp@zzzcomputing.com> | 2021-11-09 23:55:10 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-11-09 23:55:10 +0000 |
commit | 53bed05b2768883aab1ef64427f34ddc49fb5fdc (patch) | |
tree | 53fba82cc6f004bd6213fa8b46d62898650d05ec /lib/sqlalchemy/orm | |
parent | 863a048790c99c0e70abe438744f9858fd6806cb (diff) | |
parent | 52b3d6649525929ee1ec14487a2f007194ed741d (diff) | |
download | sqlalchemy-53bed05b2768883aab1ef64427f34ddc49fb5fdc.tar.gz |
Merge "upgrade deferred loader to regular loader if refresh_state" into main
Diffstat (limited to 'lib/sqlalchemy/orm')
-rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 2a283caad..71c4a6976 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -382,7 +382,26 @@ class DeferredColumnLoader(LoaderStrategy): # dictionary. Normally, the DeferredColumnLoader.setup_query() # sets up that data in the "memoized_populators" dictionary # and "create_row_processor()" here is never invoked. - if not self.is_class_level: + + if ( + context.refresh_state + and context.query._compile_options._only_load_props + and self.key in context.query._compile_options._only_load_props + ): + self.parent_property._get_strategy( + (("deferred", False), ("instrument", True)) + ).create_row_processor( + context, + query_entity, + path, + loadopt, + mapper, + result, + adapter, + populators, + ) + + elif not self.is_class_level: if self.raiseload: set_deferred_for_local_state = ( self.parent_property._raise_column_loader |