summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2017-10-08 21:43:09 -0400
committerGerrit Code Review <gerrit@ci.zzzcomputing.com>2017-10-08 21:43:09 -0400
commit1230016bf06b16eb509cb75bc0c9e9a2903e6962 (patch)
treee0a64387a48370d5705bc23e81fda2c72eb1d862 /lib/sqlalchemy/sql
parent4bb8397ae3a9d65bd18eb1d7c951bf5121ea280a (diff)
parent1281e6e6c41ad3d7240fe50f4fecab4083b79975 (diff)
downloadsqlalchemy-1230016bf06b16eb509cb75bc0c9e9a2903e6962.tar.gz
Merge "Don't include SelectBase when searching for surface column elements"
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/util.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/sqlalchemy/sql/util.py b/lib/sqlalchemy/sql/util.py
index 281d5f6a3..0c122949b 100644
--- a/lib/sqlalchemy/sql/util.py
+++ b/lib/sqlalchemy/sql/util.py
@@ -18,7 +18,7 @@ from collections import deque
from .elements import BindParameter, ColumnClause, ColumnElement, \
Null, UnaryExpression, literal_column, Label, _label_reference, \
_textual_label_reference
-from .selectable import ScalarSelect, Join, FromClause, FromGrouping
+from .selectable import SelectBase, ScalarSelect, Join, FromClause, FromGrouping
from .schema import Column
join_condition = util.langhelpers.public_factory(
@@ -235,17 +235,21 @@ def surface_selectables(clause):
stack.append(elem.element)
-def surface_column_elements(clause):
+def surface_column_elements(clause, include_scalar_selects=True):
"""traverse and yield only outer-exposed column elements, such as would
be addressable in the WHERE clause of a SELECT if this element were
in the columns clause."""
+ filter_ = (FromGrouping, )
+ if not include_scalar_selects:
+ filter_ += (SelectBase, )
+
stack = deque([clause])
while stack:
elem = stack.popleft()
yield elem
for sub in elem.get_children():
- if isinstance(sub, FromGrouping):
+ if isinstance(sub, filter_):
continue
stack.append(sub)