]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed a regression caused by [ticket:2682] whereby the
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 31 May 2013 15:52:31 +0000 (11:52 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 31 May 2013 15:55:48 +0000 (11:55 -0400)
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``.
[ticket:2737]

Conflicts:
doc/build/changelog/changelog_08.rst

doc/build/changelog/changelog_08.rst
lib/sqlalchemy/orm/evaluator.py
test/orm/test_evaluator.py

index d10a3da28510c2f523c41b142cb54926dee2badd..211668867e9ce4ed35f3984eaaba6505ad053b05 100644 (file)
       :meth:`.Query.select_entity_from` method as appropriate.
       See the 0.9 migration guide for details.
 
+    .. 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
index 0844e2f72baaee4646f68d1e589dfba8d69aaf7e..ba59e5071654f4c791a7ca05c0c0f5fcd20700de 100644 (file)
@@ -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'].\
index 4678100ebdd1f8780e9ecf459f2ac1d26d84bcf1..2570f76503a691aca6c8b7106e4a285719da618d 100644 (file)
@@ -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