Port tests and extra operator from master 40f2f231
Peter Rabbitson [Fri, 17 Jan 2014 00:40:37 +0000 (01:40 +0100)]
lib/SQL/Abstract/Converter.pm
t/01generate.t

index 1bae6c3..c56c702 100644 (file)
@@ -564,7 +564,11 @@ sub _where_hashpair_to_dq {
           if $op =~ $self->like_op or $op =~ $self->not_like_op;
         if ($op =~ $self->equality_op or $op =~ $self->like_op or $op eq 'IS') {
           'IS NULL'
-        } elsif ($op =~ $self->inequality_op or $op =~ $self->not_like_op or $op eq 'IS NOT') {
+        } elsif (
+          $op =~ $self->inequality_op or $op =~ $self->not_like_op
+            or
+          $op eq 'IS NOT' or $op eq 'NOT'
+        ) {
           'IS NOT NULL'
         } else {
           die "Can't do undef -> NULL transform for operator ${op}";
index 8e7caf1..72bdd6c 100644 (file)
@@ -608,6 +608,25 @@ my @tests = (
       },
 );
 
+# check is( not) => undef
+for my $op ( qw(not is is_not), 'is not' ) {
+  (my $sop = uc $op) =~ s/_/ /gi;
+
+  $sop = 'IS NOT' if $sop eq 'NOT';
+
+  for my $uc (0, 1) {
+    for my $prefix ('', '-') {
+      push @tests, {
+        func => 'where',
+        args => [{ a => { ($prefix . ($uc ? uc $op : lc $op) ) => undef } }],
+        stmt => "WHERE a $sop NULL",
+        stmt_q => "WHERE `a` $sop NULL",
+        bind => [],
+      };
+    }
+  }
+}
+
 for my $t (@tests) {
   local $"=', ';