diff options
| -rw-r--r-- | doc/build/changelog/changelog_08.rst | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/evaluator.py | 6 | ||||
| -rw-r--r-- | test/orm/test_evaluator.py | 17 |
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 |
