]> 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:46:29 +0000 (16:46 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 22 Sep 2012 20:46:29 +0000 (16:46 -0400)
lib/sqlalchemy/sql/expression.py
test/sql/test_operators.py

index 0dd95b336958265c36863ea62a95c23f9687552d..d5cb1ff628d9615b0faeecef8b17b9b56a98223b 100644 (file)
@@ -1846,10 +1846,10 @@ class _CompareMixin(ColumnOperators):
                         **kwargs
         ):
         if obj is None or isinstance(obj, _Null):
-            if op == operators.eq:
+            if op in (operators.eq, operators.is_):
                 return _BinaryExpression(self, null(), operators.is_,
                         negate=operators.isnot)
-            elif op == operators.ne:
+            elif op in (operators.ne, operators.isnot):
                 return _BinaryExpression(self, null(), operators.isnot,
                         negate=operators.is_)
             else:
@@ -2959,6 +2959,10 @@ 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 cf20189340c2de8c89c7f27559384c48d04498a8..7ea3ade819fdb849c82aa66a734dffed53ec0742 100644 (file)
@@ -21,9 +21,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 operator(left, right).compare(
             BinaryExpression(left, right, operator)
@@ -38,6 +37,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_)