diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-26 16:40:40 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-02-26 18:18:48 -0500 |
commit | 50fcf349fb0afab78af8bb05066143aea7519359 (patch) | |
tree | b15938fb6ef44803ae4e722057d73b79c1fe604c /lib/sqlalchemy/orm/strategies.py | |
parent | 84a894c635b7b47731a7ae1def0090d57e9b9e79 (diff) | |
download | sqlalchemy-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.py | 47 |
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, |