diff options
Diffstat (limited to 'lib/sqlalchemy/orm/strategies.py')
-rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 49 |
1 files changed, 19 insertions, 30 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index aa52d91da..e31b3ae6d 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -158,7 +158,6 @@ class ColumnLoader(LoaderStrategy): def create_row_processor( self, context, path, loadopt, mapper, result, adapter, populators): - key = self.key # look through list of columns represented here # to see which, if any, is present in the row. for col in self.columns: @@ -166,14 +165,10 @@ class ColumnLoader(LoaderStrategy): col = adapter.columns[col] getter = result._getter(col) if getter: - def fetch_col(state, dict_, row): - dict_[key] = getter(row) - populators.new.append((self.key, fetch_col)) + populators["quick"].append((self.key, getter)) break else: - def expire_for_non_present_col(state, dict_, row): - state._expire_attribute_pre_commit(dict_, key) - populators.new.append((self.key, expire_for_non_present_col)) + populators["expire"].append((self.key, True)) @log.class_logger @@ -196,8 +191,6 @@ class DeferredColumnLoader(LoaderStrategy): if adapter: col = adapter.columns[col] - key = self.key - # TODO: put a result-level contains here getter = result._getter(col) if getter: @@ -209,14 +202,10 @@ class DeferredColumnLoader(LoaderStrategy): elif not self.is_class_level: set_deferred_for_local_state = InstanceState._row_processor( mapper.class_manager, - LoadDeferredColumns(key), key) - populators.new.append((self.key, set_deferred_for_local_state)) + LoadDeferredColumns(self.key), self.key) + populators["new"].append((self.key, set_deferred_for_local_state)) else: - def reset_col_for_deferred(state, dict_, row): - # reset state on the key so that deferred callables - # fire off on next access. - state._reset(dict_, key) - populators.new.append((self.key, reset_col_for_deferred)) + populators["expire"].append((self.key, False)) def init_class_attribute(self, mapper): self.is_class_level = True @@ -342,7 +331,7 @@ class NoLoader(AbstractRelationshipLoader): result, adapter, populators): def invoke_no_load(state, dict_, row): state._initialize(self.key) - populators.new.append((self.key, invoke_no_load)) + populators["new"].append((self.key, invoke_no_load)) @log.class_logger @@ -639,7 +628,7 @@ class LazyLoader(AbstractRelationshipLoader): mapper.class_manager, LoadLazyAttribute(key), key) - populators.new.append((self.key, set_lazy_callable)) + populators["new"].append((self.key, set_lazy_callable)) elif context.populate_existing or mapper.always_refresh: def reset_for_lazy_callable(state, dict_, row): # we are the primary manager for this attribute on @@ -652,7 +641,7 @@ class LazyLoader(AbstractRelationshipLoader): # any existing state. state._reset(dict_, key) - populators.new.append((self.key, reset_for_lazy_callable)) + populators["new"].append((self.key, reset_for_lazy_callable)) class LoadLazyAttribute(object): @@ -689,7 +678,7 @@ class ImmediateLoader(AbstractRelationshipLoader): def load_immediate(state, dict_, row): state.get_impl(self.key).get(state, dict_) - populators.delayed.append((self.key, load_immediate)) + populators["delayed"].append((self.key, load_immediate)) @log.class_logger @@ -1046,9 +1035,9 @@ class SubqueryLoader(AbstractRelationshipLoader): state.get_impl(self.key).\ set_committed_value(state, dict_, collection) - populators.new.append((self.key, load_collection_from_subq)) + populators["new"].append((self.key, load_collection_from_subq)) if context.invoke_all_eagers: - populators.eager.append((self.key, collections.loader)) + populators["eager"].append((self.key, collections.loader)) def _create_scalar_loader( self, context, collections, local_cols, populators): @@ -1067,9 +1056,9 @@ class SubqueryLoader(AbstractRelationshipLoader): state.get_impl(self.key).\ set_committed_value(state, dict_, scalar) - populators.new.append((self.key, load_scalar_from_subq)) + populators["new"].append((self.key, load_scalar_from_subq)) if context.invoke_all_eagers: - populators.eager.append((self.key, collections.loader)) + populators["eager"].append((self.key, collections.loader)) @log.class_logger @@ -1491,11 +1480,11 @@ class JoinedLoader(AbstractRelationshipLoader): def load_collection_from_joined_exec(state, dict_, row): _instance(row) - populators.new.append((self.key, load_collection_from_joined_new_row)) - populators.existing.append( + populators["new"].append((self.key, load_collection_from_joined_new_row)) + populators["existing"].append( (self.key, load_collection_from_joined_existing_row)) if context.invoke_all_eagers: - populators.eager.append( + populators["eager"].append( (self.key, load_collection_from_joined_exec)) def _create_scalar_loader(self, context, key, _instance, populators): @@ -1519,11 +1508,11 @@ class JoinedLoader(AbstractRelationshipLoader): def load_scalar_from_joined_exec(state, dict_, row): _instance(row) - populators.new.append((self.key, load_scalar_from_joined_new_row)) - populators.existing.append( + populators["new"].append((self.key, load_scalar_from_joined_new_row)) + populators["existing"].append( (self.key, load_scalar_from_joined_existing_row)) if context.invoke_all_eagers: - populators.eager.append((self.key, load_scalar_from_joined_exec)) + populators["eager"].append((self.key, load_scalar_from_joined_exec)) def single_parent_validator(desc, prop): |