diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-25 18:47:37 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-25 18:47:37 -0500 |
commit | 2bdf5103c804c8d0c033734d4c100172c665a4a3 (patch) | |
tree | 0dda8590a8e2b6a1bc1763e377691346a8077d44 | |
parent | 3bda44515a1c1cae4ff77a6adda60870c8ca3e55 (diff) | |
download | sqlalchemy-2bdf5103c804c8d0c033734d4c100172c665a4a3.tar.gz |
- basic idea for deferred. behavioral change: if a string SQL
is sent, we aren't undeferring based on column presence alone;
has to be explicitly undeferred.
-rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 42 |
1 files changed, 11 insertions, 31 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index b7c5dc213..0723a33e8 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -119,11 +119,6 @@ class UninstrumentedColumnLoader(LoaderStrategy): c = adapter.columns[c] column_collection.append(c) - def create_row_processor( - self, context, path, loadopt, - mapper, result, adapter, populators): - pass - @log.class_logger @properties.ColumnProperty.strategy_for(instrument=True, deferred=False) @@ -188,30 +183,6 @@ class DeferredColumnLoader(LoaderStrategy): self.columns = self.parent_property.columns self.group = self.parent_property.group - def create_row_processor( - self, context, path, loadopt, - mapper, result, adapter, populators): - col = self.columns[0] - if adapter: - col = adapter.columns[col] - - # TODO: put a result-level contains here - getter = result._getter(col) - if getter: - self.parent_property._get_strategy_by_cls(ColumnLoader).\ - create_row_processor( - context, path, loadopt, mapper, result, - adapter, populators) - - elif not self.is_class_level: - set_deferred_for_local_state = \ - InstanceState._instance_level_callable_processor( - mapper.class_manager, - LoadDeferredColumns(self.key), self.key) - populators["new"].append((self.key, set_deferred_for_local_state)) - else: - populators["expire"].append((self.key, False)) - def init_class_attribute(self, mapper): self.is_class_level = True @@ -224,7 +195,7 @@ class DeferredColumnLoader(LoaderStrategy): def setup_query( self, context, entity, path, loadopt, adapter, - only_load_props=None, **kwargs): + populators, only_load_props=None, **kwargs): if ( ( @@ -246,7 +217,16 @@ class DeferredColumnLoader(LoaderStrategy): ): self.parent_property._get_strategy_by_cls(ColumnLoader).\ setup_query(context, entity, - path, loadopt, adapter, **kwargs) + path, loadopt, adapter, + populators=populators, **kwargs) + elif not self.is_class_level: + set_deferred_for_local_state = \ + InstanceState._instance_level_callable_processor( + self.parent.class_manager, + LoadDeferredColumns(self.key), self.key) + populators["new"].append((self.key, set_deferred_for_local_state)) + else: + populators["expire"].append((self.key, False)) def _load_for_state(self, state, passive): if not state.key: |