Fix over-eager parenthesis unrolling (only legal in AND/OR)
[dbsrgits/SQL-Abstract.git] / lib / SQL / Abstract.pm
index e5d07d4..03ffca2 100644 (file)
@@ -5,9 +5,9 @@ package SQL::Abstract; # see doc at end of file
 # the test / diffusion / acceptance phase; those are marked with flag
 # 'LDNOTE' (note by laurent.dami AT free.fr)
 
-use Carp;
 use strict;
 use warnings;
+use Carp ();
 use List::Util ();
 use Scalar::Util ();
 
@@ -50,12 +50,12 @@ sub _debug {
 
 sub belch (@) {
   my($func) = (caller(1))[3];
-  carp "[$func] Warning: ", @_;
+  Carp::carp "[$func] Warning: ", @_;
 }
 
 sub puke (@) {
   my($func) = (caller(1))[3];
-  croak "[$func] Fatal: ", @_;
+  Carp::croak "[$func] Fatal: ", @_;
 }
 
 
@@ -556,7 +556,7 @@ sub _where_unary_op {
     }
   }
 
-  $self->debug("Generic unary OP: $op - recursing as function");
+  $self->_debug("Generic unary OP: $op - recursing as function");
 
   $self->_assert_pass_injection_guard($op);
 
@@ -2075,13 +2075,13 @@ To get an OR instead, you can combine it with the arrayref idea:
 
     my %where => (
          user => 'nwiger',
-         priority => [ {'=', 2}, {'!=', 1} ]
+         priority => [ { '=', 2 }, { '>', 5 } ]
     );
 
 Which would generate:
 
-    $stmt = "WHERE user = ? AND priority = ? OR priority != ?";
-    @bind = ('nwiger', '2', '1');
+    $stmt = "WHERE ( priority = ? OR priority > ? ) AND user = ?";
+    @bind = ('2', '5', 'nwiger');
 
 If you want to include literal SQL (with or without bind values), just use a
 scalar reference or array reference as the value: