summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/sqlalchemy/sql/compiler.py18
-rw-r--r--lib/sqlalchemy/sql/elements.py1
-rw-r--r--lib/sqlalchemy/sql/selectable.py1
3 files changed, 12 insertions, 8 deletions
diff --git a/lib/sqlalchemy/sql/compiler.py b/lib/sqlalchemy/sql/compiler.py
index da810e9fe..384cf27c2 100644
--- a/lib/sqlalchemy/sql/compiler.py
+++ b/lib/sqlalchemy/sql/compiler.py
@@ -1297,7 +1297,6 @@ class SQLCompiler(Compiled):
cloned = {}
column_translate = [{}]
-
def visit(element, **kw):
if element in column_translate[-1]:
return column_translate[-1][element]
@@ -1316,8 +1315,9 @@ class SQLCompiler(Compiled):
right = visit(newelem.right, **kw)
selectable_ = selectable.Select(
- [right.element],
- use_labels=True).alias()
+ [right.element],
+ use_labels=True).alias()
+
for c in selectable_.c:
c._key_label = c.key
c._label = c.name
@@ -1352,14 +1352,16 @@ class SQLCompiler(Compiled):
newelem.onclause = visit(newelem.onclause, **kw)
- elif newelem.is_selectable and newelem._is_from_container:
- # if we hit an Alias or CompoundSelect, put a marker in the
- # stack.
+ elif newelem._is_from_container:
+ # if we hit an Alias, CompoundSelect or ScalarSelect, put a
+ # marker in the stack.
kw['transform_clue'] = 'select_container'
newelem._copy_internals(clone=visit, **kw)
elif newelem.is_selectable and newelem._is_select:
- barrier_select = kw.get('transform_clue', None) == 'select_container'
- # if we're still descended from an Alias/CompoundSelect, we're
+ barrier_select = kw.get('transform_clue', None) == \
+ 'select_container'
+ # if we're still descended from an
+ # Alias/CompoundSelect/ScalarSelect, we're
# in a FROM clause, so start with a new translate collection
if barrier_select:
column_translate.append({})
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index 4f58f6141..ab07efee3 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -231,6 +231,7 @@ class ClauseElement(Visitable):
is_clause_element = True
_order_by_label_element = None
+ _is_from_container = False
def _clone(self):
"""Create a shallow copy of this ClauseElement.
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py
index 0d8162ba3..a57f1ecc3 100644
--- a/lib/sqlalchemy/sql/selectable.py
+++ b/lib/sqlalchemy/sql/selectable.py
@@ -3050,6 +3050,7 @@ class Select(HasPrefixes, GenerativeSelect):
class ScalarSelect(Generative, Grouping):
_from_objects = []
+ _is_from_container = True
def __init__(self, element):
self.element = element