add handling for NULL when using -in
Justin Hunter [Wed, 1 Dec 2010 00:03:50 +0000 (16:03 -0800)]
Changes
lib/SQL/Abstract.pm
t/05in_between.t

diff --git a/Changes b/Changes
index 54b5ee1..40979dc 100644 (file)
--- a/Changes
+++ b/Changes
@@ -2,6 +2,7 @@ Revision history for SQL::Abstract
 
     - Fix parsing of foo.* in SQLA::Tree
     - Fix bindtype fail when using -between with arrayrefref literals
+    - Add handling for NULL for -in
 
 revision 1.71  2010-11-09
 ----------------------------
index 5944c62..163bfa0 100644 (file)
@@ -961,7 +961,10 @@ sub _where_field_IN {
                 if (@rest or $func !~ /^ \- (.+)/x);
               local $self->{_nested_func_lhs} = $k;
               $self->_where_unary_op ($1 => $arg);
-            }
+            },
+            UNDEF => sub {
+              return $self->_sqlcase('null');
+            },
           });
           push @all_sql, $sql;
           push @all_bind, @bind;
index 22218c0..2ae90cf 100644 (file)
@@ -172,6 +172,18 @@ my @in_between_tests = (
     bind => [qw/A c/],
     test => '-in with an array of function array refs with args',
   },
+  {
+    where => { x => { -in => [ 1, undef ] } },
+    stmt => " WHERE ( x IN ( ?, NULL ) )",
+    bind => [ 1 ],
+    test => '-in with undef as an element', 
+  },
+  {
+    where => { x => { -in => [ 1, undef, 2, 3, undef ] } },
+    stmt => " WHERE ( x IN ( ?, NULL, ?, ?, NULL ) )",
+    bind => [ 1, 2, 3 ],
+    test => '-in with undef as an element',
+  },
 );
 
 plan tests => @in_between_tests*4;