IS NOT? NULL support
Ash Berlin [Sat, 4 Apr 2009 18:33:00 +0000 (19:33 +0100)]
lib/SQL/Abstract/AST/v1.pm
t/100_expr_basic.t

index 0543330..e27584b 100644 (file)
@@ -246,6 +246,15 @@ class SQL::Abstract::AST::v1 extends SQL::Abstract {
     my ($lhs, $rhs) = @{$ast->{args}};
     my $op = $ast->{op};
 
+    # IS NOT? NULL
+    if ($rhs->{-type} eq 'value' && !defined $rhs->{value} &&
+        ($op eq '==' || $op eq '!='))
+    {
+      return $self->_expr($lhs) .
+             ($op eq '==' ? " IS " : " IS NOT ") .
+             "NULL";
+    }
+
     join (' ', $self->_expr($lhs), 
                $self->binop_mapping($op) || croak("Unknown binary operator $op"),
                $self->_expr($rhs)
index 0bcdaa4..9e1b014 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 14;
+use Test::More tests => 16;
 use Test::Differences;
 
 use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
@@ -190,3 +190,27 @@ is $sqla->dispatch(
   }
 ), "me.id LIKE ?", 
    "LIKE expr clause";
+
+
+is $sqla->dispatch(
+  { -type => 'expr',
+    op => '==',
+    args => [
+      {-type => name => args => [qw/me id/] },
+      { -type => 'value', value => undef }
+    ]
+  }
+), "me.id IS NULL",
+   "== undef";
+
+
+is $sqla->dispatch(
+  { -type => 'expr',
+    op => '!=',
+    args => [
+      {-type => name => args => [qw/me id/] },
+      { -type => 'value', value => undef }
+    ]
+  }
+), "me.id IS NOT NULL",
+   "!= undef";