summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm/strategies.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-02-26 16:40:40 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2015-02-26 18:18:48 -0500
commit50fcf349fb0afab78af8bb05066143aea7519359 (patch)
treeb15938fb6ef44803ae4e722057d73b79c1fe604c /lib/sqlalchemy/orm/strategies.py
parent84a894c635b7b47731a7ae1def0090d57e9b9e79 (diff)
downloadsqlalchemy-row_proc_integration.tar.gz
- polymorphic loading, working very rudimentallyrow_proc_integration
running orm2010, the whole approach adds callcounts. code is more complex, less reliable, pretty much a total bust. will try to see if create_row_processor can remain but be called against either "result" or a context namespace ahead of time, and if this somehow can be used to simplify the need to call upon strategy lookup twice.
Diffstat (limited to 'lib/sqlalchemy/orm/strategies.py')
-rw-r--r--lib/sqlalchemy/orm/strategies.py47
1 files changed, 33 insertions, 14 deletions
diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py
index 085faaa2d..aab455771 100644
--- a/lib/sqlalchemy/orm/strategies.py
+++ b/lib/sqlalchemy/orm/strategies.py
@@ -26,6 +26,7 @@ from .session import _state_session
import itertools
import operator
+
def _register_attribute(
strategy, mapper, useobject,
compare_function=None,
@@ -112,8 +113,8 @@ class UninstrumentedColumnLoader(LoaderStrategy):
self.columns = self.parent_property.columns
def setup_query(
- self, context, entity, path, loadopt, adapter,
- column_collection=None, **kwargs):
+ self, context, query_entity, path, mapper,
+ adapter, column_collection, populators, loadopt, **kw):
for c in self.columns:
if adapter:
c = adapter.columns[c]
@@ -133,8 +134,8 @@ class ColumnLoader(LoaderStrategy):
self.is_composite = hasattr(self.parent_property, 'composite_class')
def setup_query(
- self, context, entity, path, loadopt,
- adapter, column_collection, populators, **kwargs):
+ self, context, query_entity, path, mapper,
+ adapter, column_collection, populators, loadopt, **kw):
for c in self.columns:
if adapter:
c = adapter.columns[c]
@@ -148,11 +149,19 @@ class ColumnLoader(LoaderStrategy):
# querying out every column.
def quick_populate(index):
- populators["quick"].append(
- (self.key, operator.itemgetter(index))
- )
+ if index == -1:
+ populators["expire"].append((self.key, True))
+ else:
+ populators["quick"].append(
+ (self.key, operator.itemgetter(index))
+ )
context.column_processors.append((self.columns[0], quick_populate))
+ def setup_for_missing_attribute(
+ self, context, query_entity, path, mapper,
+ populators, loadopt, **kw):
+ populators["expire"].append((self.key, True))
+
def init_class_attribute(self, mapper):
self.is_class_level = True
coltype = self.columns[0].type
@@ -194,8 +203,9 @@ class DeferredColumnLoader(LoaderStrategy):
)
def setup_query(
- self, context, entity, path, loadopt, adapter,
- populators, only_load_props=None, **kwargs):
+ self, context, query_entity, path, mapper,
+ adapter, column_collection, populators, loadopt,
+ only_load_props=None, **kw):
if (
(
@@ -216,10 +226,19 @@ class DeferredColumnLoader(LoaderStrategy):
)
):
self.parent_property._get_strategy_by_cls(ColumnLoader).\
- setup_query(context, entity,
- path, loadopt, adapter,
- populators=populators, **kwargs)
- elif not self.is_class_level:
+ setup_query(
+ context, query_entity,
+ path, mapper, adapter,
+ populators, loadopt, **kw)
+ else:
+ self.setup_for_missing_attribute(
+ context, query_entity, path, mapper, populators, loadopt, **kw
+ )
+
+ def setup_for_missing_attribute(
+ self, context, query_entity, path, mapper, populators,
+ loadopt, **kw):
+ if not self.is_class_level:
set_deferred_for_local_state = \
InstanceState._instance_level_callable_processor(
self.parent.class_manager,
@@ -1432,7 +1451,7 @@ class JoinedLoader(AbstractRelationshipLoader):
if eager_adapter is not False:
key = self.key
- _instance = loading.instance_processor(
+ _instance = loading._instance_processor(
self.mapper,
context,
result,