diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-03-08 15:32:21 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2015-03-08 15:32:21 -0400 |
commit | a421106c9d1d660af7c5d9aba5928dda20c950e1 (patch) | |
tree | 504426815dc61a86db8ea217a2c9f921fca03599 /lib/sqlalchemy/sql/selectable.py | |
parent | a92f6662b4e15d5924a686a46d1a6d9b7aa958d5 (diff) | |
download | sqlalchemy-a421106c9d1d660af7c5d9aba5928dda20c950e1.tar.gz |
- random performance whacking vs. 0.9, in particular we have to watch
for the slots-based __getattr__ thing getting hit
Diffstat (limited to 'lib/sqlalchemy/sql/selectable.py')
-rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 29 |
1 files changed, 14 insertions, 15 deletions
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 87029ec2b..3384939b0 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -2484,21 +2484,20 @@ class Select(HasPrefixes, HasSuffixes, GenerativeSelect): seen = set() translate = self._from_cloned - def add(items): - for item in items: - if item is self: - raise exc.InvalidRequestError( - "select() construct refers to itself as a FROM") - if translate and item in translate: - item = translate[item] - if not seen.intersection(item._cloned_set): - froms.append(item) - seen.update(item._cloned_set) - - add(_from_objects(*self._raw_columns)) - if self._whereclause is not None: - add(_from_objects(self._whereclause)) - add(self._from_obj) + for item in itertools.chain( + _from_objects(*self._raw_columns), + _from_objects(self._whereclause) + if self._whereclause is not None else (), + self._from_obj + ): + if item is self: + raise exc.InvalidRequestError( + "select() construct refers to itself as a FROM") + if translate and item in translate: + item = translate[item] + if not seen.intersection(item._cloned_set): + froms.append(item) + seen.update(item._cloned_set) return froms |