summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/sql/compiler.py12
-rw-r--r--lib/sqlalchemy/sql/selectable.py5
2 files changed, 9 insertions, 8 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index 0ead0994f..99defd861 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -580,11 +580,11 @@ class SQLCompiler(Compiled):
if self.stack and self.dialect.supports_simple_order_by_label:
selectable = self.stack[-1]['selectable']
- with_cols, only_froms = selectable._label_resolve_dict
+ with_cols, only_froms, only_cols = selectable._label_resolve_dict
if within_columns_clause:
resolve_dict = only_froms
else:
- resolve_dict = with_cols
+ resolve_dict = only_cols
# this can be None in the case that a _label_reference()
# were subject to a replacement operation, in which case
@@ -593,11 +593,11 @@ class SQLCompiler(Compiled):
order_by_elem = element.element._order_by_label_element
if order_by_elem is not None and order_by_elem.name in \
- resolve_dict:
-
+ resolve_dict and \
+ order_by_elem.shares_lineage(
+ resolve_dict[order_by_elem.name]):
kwargs['render_label_as_label'] = \
element.element._order_by_label_element
-
return self.process(
element.element, within_columns_clause=within_columns_clause,
**kwargs)
@@ -611,7 +611,7 @@ class SQLCompiler(Compiled):
)
selectable = self.stack[-1]['selectable']
- with_cols, only_froms = selectable._label_resolve_dict
+ with_cols, only_froms, only_cols = selectable._label_resolve_dict
try:
if within_columns_clause:
col = only_froms[element.element]
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index f7dbd8231..1840d646d 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -2275,7 +2275,7 @@ class CompoundSelect(GenerativeSelect):
d = dict(
(c.key, c) for c in self.c
)
- return d, d
+ return d, d, d
@classmethod
def _create_union(cls, *selects, **kwargs):
@@ -2948,10 +2948,11 @@ class Select(HasPrefixes, HasSuffixes, GenerativeSelect):
only_froms = dict(
(c.key, c) for c in
_select_iterables(self.froms) if c._allow_label_resolve)
+ only_cols = with_cols.copy()
for key, value in only_froms.items():
with_cols.setdefault(key, value)
- return with_cols, only_froms
+ return with_cols, only_froms, only_cols
def is_derived_from(self, fromclause):
if self in fromclause._cloned_set: