diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2021-04-17 04:45:28 +0000 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci3.zzzcomputing.com> | 2021-04-17 04:45:28 +0000 |
| commit | 23a09b117d4af2418b754fc6d3b3b9728e8f0b14 (patch) | |
| tree | 173362d5d8dd2d37d46bb0c87a38b75361ecd287 /lib/sqlalchemy/sql | |
| parent | 776262ce4cf2ca0ce0bc9d26934cc1c589363984 (diff) | |
| parent | 46f34449f389a8aa994485f36e99f95275a19170 (diff) | |
| download | sqlalchemy-23a09b117d4af2418b754fc6d3b3b9728e8f0b14.tar.gz | |
Merge "Uniquify FROMs when traversing through select"
Diffstat (limited to 'lib/sqlalchemy/sql')
| -rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 2a221cdf0..3a90f77fb 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -4428,15 +4428,24 @@ class _SelectFromElements(object): # note this does not include elements # in _setup_joins or _legacy_setup_joins - return itertools.chain( - itertools.chain.from_iterable( - [element._from_objects for element in self._raw_columns] - ), - itertools.chain.from_iterable( - [element._from_objects for element in self._where_criteria] - ), - self._from_obj, - ) + seen = set() + for element in self._raw_columns: + for fr in element._from_objects: + if fr in seen: + continue + seen.add(fr) + yield fr + for element in self._where_criteria: + for fr in element._from_objects: + if fr in seen: + continue + seen.add(fr) + yield fr + for element in self._from_obj: + if element in seen: + continue + seen.add(element) + yield element class Select( |
