Disallow { -in => undef }
Dagfinn Ilmari Mannsåker [Sun, 8 Dec 2013 17:01:03 +0000 (17:01 +0000)]
It's ambiguous whether the user meant [ undef ] or [], or forgot to
assign to a variable intended to hold an arrayref.

lib/SQL/Abstract/Converter.pm
t/01generate.t

index 0d7e064..42a25d0 100644 (file)
@@ -483,6 +483,7 @@ sub _where_hashpair_to_dq {
       }
     };
     if ($op eq 'BETWEEN' or $op eq 'IN' or $op eq 'NOT IN' or $op eq 'NOT BETWEEN') {
+      die "Can't use undef argument for operator $op" unless defined $rhs;
       $rhs = [$rhs] unless ref $rhs;
       if (ref($rhs) ne 'ARRAY') {
         if ($op =~ /IN$/) {
index f876e60..57608c6 100644 (file)
@@ -594,6 +594,11 @@ my @tests = (
               stmt_q => 'SELECT * FROM `test` WHERE ( `a` IS NOT  NULL AND `b` IS NOT  NULL )',
               bind => [],
       },
+      {
+              func => 'select',
+              args => ['test', '*', { a => { -in => undef } }],
+              exception_like => qr/Can't use undef argument for operator IN/,
+      },
 );
 
 for my $t (@tests) {