diff options
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 10 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/util.py | 32 |
3 files changed, 3 insertions, 50 deletions
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 7198cc830..c83e03599 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -381,7 +381,6 @@ class RelationProperty(StrategizedProperty): self.join_depth = join_depth self.local_remote_pairs = _local_remote_pairs self.extension = extension - self.__join_cache = {} self.comparator_factory = comparator_factory or RelationProperty.Comparator self.comparator = self.comparator_factory(self, None) util.set_creation_order(self) @@ -1004,12 +1003,6 @@ class RelationProperty(StrategizedProperty): return self.mapper.common_parent(self.parent) def _create_joins(self, source_polymorphic=False, source_selectable=None, dest_polymorphic=False, dest_selectable=None, of_type=None): - key = util.WeakCompositeKey(source_polymorphic, source_selectable, dest_polymorphic, dest_selectable, of_type) - try: - return self.__join_cache[key] - except KeyError: - pass - if source_selectable is None: if source_polymorphic and self.parent.with_polymorphic: source_selectable = self.parent._with_polymorphic_selectable @@ -1076,10 +1069,9 @@ class RelationProperty(StrategizedProperty): else: target_adapter = None - self.__join_cache[key] = ret = (primaryjoin, secondaryjoin, + return (primaryjoin, secondaryjoin, (source_selectable or self.parent.local_table), (dest_selectable or self.mapper.local_table), secondary, target_adapter) - return ret def _get_join(self, parent, primary=True, secondary=True, polymorphic_parent=True): """deprecated. use primary_join_against(), secondary_join_against(), full_join_against()""" diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 5f820565f..7195310cd 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -594,7 +594,6 @@ class EagerLoader(AbstractRelationLoader): def init(self): super(EagerLoader, self).init() - self.clauses = {} self.join_depth = self.parent_property.join_depth def init_class_attribute(self): @@ -669,14 +668,8 @@ class EagerLoader(AbstractRelationLoader): towrap = context.eager_joins.setdefault(entity_key, default_towrap) - # create AliasedClauses object to build up the eager query. this is cached after 1st creation. - # this also allows ORMJoin to cache the aliased joins it produces since we pass the same - # args each time in the typical case. - path_key = util.WeakCompositeKey(*path) - try: - clauses = self.clauses[path_key] - except KeyError: - self.clauses[path_key] = clauses = mapperutil.ORMAdapter(mapperutil.AliasedClass(self.mapper), + # create AliasedClauses object to build up the eager query. + clauses = mapperutil.ORMAdapter(mapperutil.AliasedClass(self.mapper), equivalents=self.mapper._equivalent_columns) if adapter: diff --git a/lib/sqlalchemy/util.py b/lib/sqlalchemy/util.py index 619888135..110ef21d5 100644 --- a/lib/sqlalchemy/util.py +++ b/lib/sqlalchemy/util.py @@ -1178,38 +1178,6 @@ class _TLocalRegistry(ScopedRegistry): except AttributeError: pass -class WeakCompositeKey(object): - """an weak-referencable, hashable collection which is strongly referenced - until any one of its members is garbage collected. - - """ - keys = set() - - __slots__ = 'args', '__weakref__' - - def __init__(self, *args): - self.args = [self.__ref(arg) for arg in args] - WeakCompositeKey.keys.add(self) - - def __ref(self, arg): - if isinstance(arg, type): - return weakref.ref(arg, self.__remover) - else: - return lambda: arg - - def __remover(self, wr): - WeakCompositeKey.keys.discard(self) - - def __hash__(self): - return hash(tuple(self)) - - def __cmp__(self, other): - return cmp(tuple(self), tuple(other)) - - def __iter__(self): - return iter(arg() for arg in self.args) - - class _symbol(object): def __init__(self, name): """Construct a new named symbol.""" |
