diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-02-11 15:43:05 -0500 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-02-11 15:43:05 -0500 |
| commit | 0634ea79b1a23a8b88c886a8a3f434ed300691e2 (patch) | |
| tree | 68aa780526e321f55b9215544aa409cb1c9179c7 /lib | |
| parent | 7d693180be8c7f9db79831351751a15d786b86a7 (diff) | |
| download | sqlalchemy-0634ea79b1a23a8b88c886a8a3f434ed300691e2.tar.gz | |
many fixes but still can't get heuristics to work as well as what's existing,
tests still failing
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 4 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/relationships.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/util.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/util.py | 3 |
4 files changed, 11 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index f7a979d0e..17b12e50f 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -18,7 +18,7 @@ from sqlalchemy.sql import operators, expression, visitors from sqlalchemy.orm import attributes, dependency, mapper, \ object_mapper, strategies, configure_mappers, relationships from sqlalchemy.orm.util import CascadeOptions, _class_to_mapper, \ - _orm_annotate, _orm_deannotate + _orm_annotate, _orm_deannotate, _orm_full_deannotate from sqlalchemy.orm.interfaces import MANYTOMANY, MANYTOONE, \ MapperProperty, ONETOMANY, PropComparator, StrategizedProperty @@ -62,7 +62,7 @@ class ColumnProperty(StrategizedProperty): """ self._orig_columns = [expression._labeled(c) for c in columns] - self.columns = [expression._labeled(_orm_deannotate(c)) + self.columns = [expression._labeled(_orm_full_deannotate(c)) for c in columns] self.group = kwargs.pop('group', None) self.deferred = kwargs.pop('deferred', False) diff --git a/lib/sqlalchemy/orm/relationships.py b/lib/sqlalchemy/orm/relationships.py index 413397fda..adba2d542 100644 --- a/lib/sqlalchemy/orm/relationships.py +++ b/lib/sqlalchemy/orm/relationships.py @@ -328,7 +328,11 @@ class JoinCondition(object): _annotate_selfref(lambda col:"foreign" in col._annotations) else: def repl(element): - if self.child_selectable.c.contains_column(element): + if self.child_selectable.c.contains_column(element) and \ + ( + not self.parent_local_selectable.c.contains_column(element) + or self.child_local_selectable.c.contains_column(element) + ): return element._annotate({"remote":True}) self.primaryjoin = visitors.replacement_traverse( diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index f17f675f4..aaff6ce4a 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -379,6 +379,9 @@ def _orm_deannotate(element): values=("_orm_adapt", "parententity") ) +def _orm_full_deannotate(element): + return sql_util._deep_deannotate(element) + class _ORMJoin(expression.Join): """Extend Join to support ORM constructs as input.""" diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py index 511a5b0c2..e4e2c00e1 100644 --- a/lib/sqlalchemy/sql/util.py +++ b/lib/sqlalchemy/sql/util.py @@ -100,8 +100,7 @@ def visit_binary_product(fn, expr): """ stack = [] def visit(element): - if isinstance(element, (expression.FromClause, - expression._ScalarSelect)): + if isinstance(element, (expression._ScalarSelect)): # we dont want to dig into correlated subqueries, # those are just column elements by themselves yield element |
