eliminate (I think) -not as an expanded node type
Matt S Trout [Sun, 16 Sep 2018 22:45:12 +0000 (22:45 +0000)]
lib/SQL/Abstract.pm

index 58d9d64..71b4c53 100644 (file)
@@ -617,12 +617,13 @@ sub _expand_expr_hashpair {
       return { -ident => $v };
     }
     if ($k eq '-not') {
-      return { -not => $self->_expand_expr($v) };
+      return { -op => [ 'not', $self->_expand_expr($v) ] };
     }
     if (my ($rest) = $k =~/^-not[_ ](.*)$/) {
-      return +{ -not =>
+      return +{ -op => [
+        'not',
         $self->_expand_expr_hashpair("-${rest}", $v, $logic)
-      };
+      ] };
     }
     if (my ($logic) = $k =~ /^-(and|or)$/i) {
       if (ref($v) eq 'HASH') {
@@ -1284,7 +1285,7 @@ sub _where_op_OP {
         ? "${expr_sql} ${op_sql}"
         : "${op_sql} ${expr_sql}"
     );
-    return ($final_sql, @bind);
+    return (($op eq 'not' ? '('.$final_sql.')' : $final_sql), @bind);
   } elsif (@args == 2) {
      my ($l, $r) = map [ $self->_recurse_where($_) ], @args;
      return (