summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/build/changelog/changelog_08.rst9
-rw-r--r--lib/sqlalchemy/orm/evaluator.py6
-rw-r--r--test/orm/test_evaluator.py17
3 files changed, 32 insertions, 0 deletions
diff --git a/doc/build/changelog/changelog_08.rst b/doc/build/changelog/changelog_08.rst
index acf4ea670..67824b8e1 100644
--- a/doc/build/changelog/changelog_08.rst
+++ b/doc/build/changelog/changelog_08.rst
@@ -7,6 +7,15 @@
:version: 0.8.2
.. change::
+ :tags: bug, orm
+ :tickets: 2737
+
+ Fixed a regression caused by :ticket:`2682` whereby the
+ evaluation invoked by :meth:`.Query.update` and :meth:`.Query.delete`
+ would hit upon unsupported ``True`` and ``False`` symbols
+ which now appear due to the usage of ``IS``.
+
+ .. change::
:tags: bug, postgresql
:tickets: 2735
diff --git a/lib/sqlalchemy/orm/evaluator.py b/lib/sqlalchemy/orm/evaluator.py
index e8433290c..458eab7a1 100644
--- a/lib/sqlalchemy/orm/evaluator.py
+++ b/lib/sqlalchemy/orm/evaluator.py
@@ -40,6 +40,12 @@ class EvaluatorCompiler(object):
def visit_null(self, clause):
return lambda obj: None
+ def visit_false(self, clause):
+ return lambda obj: False
+
+ def visit_true(self, clause):
+ return lambda obj: True
+
def visit_column(self, clause):
if 'parentmapper' in clause._annotations:
key = clause._annotations['parentmapper'].\
diff --git a/test/orm/test_evaluator.py b/test/orm/test_evaluator.py
index 4678100eb..2570f7650 100644
--- a/test/orm/test_evaluator.py
+++ b/test/orm/test_evaluator.py
@@ -62,6 +62,23 @@ class EvaluateTest(fixtures.MappedTest):
(User(name=None), True),
])
+ def test_true_false(self):
+ User = self.classes.User
+
+ eval_eq(User.name == False, testcases=[
+ (User(name='foo'), False),
+ (User(name=True), False),
+ (User(name=False), True),
+ ]
+ )
+
+ eval_eq(User.name == True, testcases=[
+ (User(name='foo'), False),
+ (User(name=True), True),
+ (User(name=False), False),
+ ]
+ )
+
def test_boolean_ops(self):
User = self.classes.User