Fix bracketing of where
Ash Berlin [Mon, 2 Mar 2009 09:25:27 +0000 (09:25 +0000)]
lib/SQL/Abstract.pm
t/001_basic.t

index 3c84192..7b18c04 100644 (file)
@@ -142,7 +142,7 @@ class SQL::Abstract {
       } elsif ($op =~ /^-(and|or)$/) {
         my $sub_prio = $PRIO{$1}; 
 
-        if ($sub_prio >= $prio) {
+        if ($sub_prio <= $prio) {
           push @output, $self->_recurse_where($_);
         } else {
           push @output, '(' . $self->_recurse_where($_) . ')';
@@ -152,7 +152,7 @@ class SQL::Abstract {
       }
     }
 
-    return wantarray ? @output : join(" $OP ", @output);
+    return join(" $OP ", @output);
   }
 
   method _binop($op, $lhs, $rhs) {
index 1322dbc..693b2fc 100644 (file)
@@ -1,7 +1,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 9;
+use Test::More tests => 11;
 
 use_ok('SQL::Abstract') or BAIL_OUT( "$@" );
 
@@ -63,4 +63,25 @@ is SQL::Abstract->generate(
         [ '<', [-name => qw/me name/], [-value => '100' ] ]
       ]
   ]
-), "WHERE me.id = ? OR (me.name > ? AND me.name < ?)", "where clause";
+), "WHERE me.id = ? OR me.name > ? AND me.name < ?", "where clause";
+
+is SQL::Abstract->generate(
+  [ -where =>  -and =>
+      [ '==', [-name => qw/me id/], [-value => 500 ] ],
+      [ -and => 
+        [ '>', [-name => qw/me name/], [-value => '200' ] ],
+        [ '<', [-name => qw/me name/], [-value => '100' ] ]
+      ]
+  ]
+), "WHERE me.id = ? AND me.name > ? AND me.name < ?", "where clause";
+
+
+is SQL::Abstract->generate(
+  [ -where =>  -and =>
+      [ '==', [-name => qw/me id/], [-value => 500 ] ],
+      [ -or => 
+        [ '>', [-name => qw/me name/], [-value => '200' ] ],
+        [ '<', [-name => qw/me name/], [-value => '100' ] ]
+      ]
+  ]
+), "WHERE me.id = ? AND (me.name > ? OR me.name < ?)", "where clause";