Address LP#730743, errant parens cause pain
authormiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 22 Apr 2011 20:44:30 +0000 (20:44 +0000)
committermiker <miker@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 22 Apr 2011 20:44:30 +0000 (20:44 +0000)
Specifically, we prune subplans that contain no nodes (empty parens), and avoid dropping out of the top level query context when we encounter a close-paren.

git-svn-id: svn://svn.open-ils.org/ILS/trunk@20289 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/QueryParser.pm

index 52a203b..479bd40 100644 (file)
@@ -546,7 +546,7 @@ sub decompose {
             warn "Encountered explicit group end\n" if $self->debug;
 
             $_ = $';
-            $remainder = $';
+            $remainder = $struct->top_plan ? '' : $';
 
             $last_type = '';
         } elsif ($self->filter_count && /$filter_re/) { # found a filter
@@ -593,7 +593,7 @@ sub decompose {
             warn "Encountered explicit group start\n" if $self->debug;
 
             my ($substruct, $subremainder) = $self->decompose( $', $current_class, $recursing + 1 );
-            $struct->add_node( $substruct );
+            $struct->add_node( $substruct ) if ($substruct);
             $_ = $subremainder;
 
             $last_type = '';
@@ -685,6 +685,8 @@ sub decompose {
 
     }
 
+    $struct = undef if (scalar(@{$struct->query_nodes}) == 0);
+
     return $struct if !wantarray;
     return ($struct, $remainder);
 }