summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-02-25 18:47:37 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-02-25 18:47:37 -0500
commit2bdf5103c804c8d0c033734d4c100172c665a4a3 (patch)
tree0dda8590a8e2b6a1bc1763e377691346a8077d44
parent3bda44515a1c1cae4ff77a6adda60870c8ca3e55 (diff)
downloadsqlalchemy-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.py42
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: