X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FAbstract%2FTree.pm;h=1a4560c66c058e4bb73d6941d58f663c1125c634;hb=007f08535b6449047aa3bbc02d88a41b70d2e74c;hp=d490a83b19204fa69c4f71cd35da8116fe2b76c1;hpb=6c4d8eb8d2b9a5deb84400fd35f72c23818f442e;p=scpubgit%2FQ-Branch.git diff --git a/lib/SQL/Abstract/Tree.pm b/lib/SQL/Abstract/Tree.pm index d490a83..1a4560c 100644 --- a/lib/SQL/Abstract/Tree.pm +++ b/lib/SQL/Abstract/Tree.pm @@ -477,7 +477,9 @@ sub _unparse { return ''; } + # FIXME - needs a config switch to disable $self->_parenthesis_unroll($tree); + my ($car, $cdr) = @{$tree}[0,1]; if (! defined $car or (! ref $car and ! defined $cdr) ) { @@ -542,7 +544,6 @@ sub _parenthesis_unroll { my $self = shift; my $ast = shift; - #return if $self->parenthesis_significant; return unless (ref $ast and ref $ast->[1]); my $changes; @@ -551,6 +552,7 @@ sub _parenthesis_unroll { $changes = 0; for my $child (@{$ast->[1]}) { + # the current node in this loop is *always* a PAREN if (! ref $child or ! @$child or $child->[0] ne 'PAREN') { push @children, $child; @@ -594,8 +596,8 @@ sub _parenthesis_unroll { $changes++; } - # only one element in the parenthesis which is a binary op - # and has exactly two grandchildren + # an AND/OR expression with only one binop in the parenthesis + # with exactly two grandchildren # the only time when we can *not* unroll this is when both # the parent and the child are mathops (in which case we'll # break precedence) or when the child is BETWEEN (special @@ -603,6 +605,8 @@ sub _parenthesis_unroll { elsif ( @{$child->[1]} == 1 and + ($ast->[0] eq 'AND' or $ast->[0] eq 'OR') + and $child->[1][0][0] =~ SQL::Abstract::Tree::_binary_op_re() and $child->[1][0][0] ne 'BETWEEN'