diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2017-10-08 21:43:09 -0400 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci.zzzcomputing.com> | 2017-10-08 21:43:09 -0400 |
| commit | 1230016bf06b16eb509cb75bc0c9e9a2903e6962 (patch) | |
| tree | e0a64387a48370d5705bc23e81fda2c72eb1d862 /lib/sqlalchemy/sql | |
| parent | 4bb8397ae3a9d65bd18eb1d7c951bf5121ea280a (diff) | |
| parent | 1281e6e6c41ad3d7240fe50f4fecab4083b79975 (diff) | |
| download | sqlalchemy-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.py | 10 |
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) |
