]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- aaand actually get is/isnot to be usable with None/NULL
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Sep 2012 20:45:02 +0000 (16:45 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Sep 2012 20:45:02 +0000 (16:45 -0400)
lib/sqlalchemy/sql/expression.py
test/sql/test_operators.py

index 50f8061a649447072c0b4c02260245e973a2ee53..f00926e4d65bd7a9890ae9401ea3e3b19d2bdec0 100644 (file)
@@ -1952,10 +1952,10 @@ class _DefaultColumnComparator(operators.ColumnOperators):
                         **kwargs
         ):
         if obj is None or isinstance(obj, Null):
-            if op == operators.eq:
+            if op in (operators.eq, operators.is_):
                 return BinaryExpression(expr, null(), operators.is_,
                         negate=operators.isnot)
-            elif op == operators.ne:
+            elif op in (operators.ne, operators.isnot):
                 return BinaryExpression(expr, null(), operators.isnot,
                         negate=operators.is_)
             else:
@@ -3156,6 +3156,9 @@ class Null(ColumnElement):
     def __init__(self):
         self.type = sqltypes.NULLTYPE
 
+    def compare(self, other):
+        return isinstance(other, Null)
+
 class False_(ColumnElement):
     """Represent the ``false`` keyword in a SQL statement.
 
index a6c99be43dd99b6a032bd9e9f6ce04ef5c04074e..951309d195ff3d302bd601796fa16f9042f102b4 100644 (file)
@@ -20,9 +20,8 @@ class DefaultColumnComparatorTest(fixtures.TestBase):
             compare_to(left)
         )
 
-    def _do_operate_test(self, operator):
+    def _do_operate_test(self, operator, right=column('right')):
         left = column('left')
-        right = column('right')
 
         assert left.comparator.operate(operator, right).compare(
             BinaryExpression(left, right, operator)
@@ -41,6 +40,12 @@ class DefaultColumnComparatorTest(fixtures.TestBase):
     def test_plus(self):
         self._do_operate_test(operators.add)
 
+    def test_is_null(self):
+        self._do_operate_test(operators.is_, None)
+
+    def test_isnot_null(self):
+        self._do_operate_test(operators.isnot, None)
+
     def test_is(self):
         self._do_operate_test(operators.is_)