summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/sql
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-10-08 20:06:58 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-10-08 20:08:35 -0400
commite488bb47e4bd21ff0a09ce23e1adf00ba64d5d57 (patch)
tree537f82e58ebb22bbe0ad776a0e8611c37bb216eb /lib/sqlalchemy/sql
parent79f55eb20bf3b65bf0663cf96de96c68f8804399 (diff)
downloadsqlalchemy-e488bb47e4bd21ff0a09ce23e1adf00ba64d5d57.tar.gz
A :func:`.select` that is made to refer to itself in its FROM clause,
typically via in-place mutation, will raise an informative error message rather than causing a recursion overflow. [ticket:2815] Conflicts: lib/sqlalchemy/sql/selectable.py
Diffstat (limited to 'lib/sqlalchemy/sql')
-rw-r--r--lib/sqlalchemy/sql/expression.py3
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/sqlalchemy/sql/expression.py b/lib/sqlalchemy/sql/expression.py
index b2f957bd0..5a97c2222 100644
--- a/lib/sqlalchemy/sql/expression.py
+++ b/lib/sqlalchemy/sql/expression.py
@@ -5288,6 +5288,9 @@ class Select(HasPrefixes, SelectBase):
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):