[Rt-commit] r5051 - in rt/branches/3.7-EXPERIMENTAL: . html/Search

ruz at bestpractical.com ruz at bestpractical.com
Wed Apr 19 17:04:21 EDT 2006


Author: ruz
Date: Wed Apr 19 17:04:20 2006
New Revision: 5051

Modified:
   rt/branches/3.7-EXPERIMENTAL/   (props changed)
   rt/branches/3.7-EXPERIMENTAL/html/Search/Build.html
   rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web/QueryBuilder/Tree.pm

Log:
 r2411 at cubic-pc:  cubic | 2006-04-19 23:47:53 +0400
 * move query parsing into library


Modified: rt/branches/3.7-EXPERIMENTAL/html/Search/Build.html
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/html/Search/Build.html	(original)
+++ rt/branches/3.7-EXPERIMENTAL/html/Search/Build.html	Wed Apr 19 17:04:20 2006
@@ -114,7 +114,6 @@
 <%INIT>
 use RT::Interface::Web::QueryBuilder;
 use RT::Interface::Web::QueryBuilder::Tree;
-use RT::SQL;
 
 my $title = loc("Query Builder");
 
@@ -167,38 +166,9 @@
 my $ParseQuery = sub {
     my ($string, $results) = shift;
 
-    my %field = %{ RT::Tickets->new( $session{'CurrentUser'} )->FIELDS };
-    my %lcfield = map { ( lc($_) => $_ ) } keys %field;
+    my $tree = RT::Interface::Web::QueryBuilder::Tree->new('AND');
+    @$results = $tree->ParseSQL( Query => $string, CurrentUser => $session{'CurrentUser'} );
 
-    my ($tree, $node);
-    $node = $tree = RT::Interface::Web::QueryBuilder::Tree->new('AND');
-
-    my %callback;
-    $callback{'OpenParen'} = sub {
-        $node = RT::Interface::Web::QueryBuilder::Tree->new( 'AND', $node );
-    };
-    $callback{'CloseParen'} = sub { $node = $node->getParent };
-    $callback{'EntryAggregator'} = sub { $node->setNodeValue( $_[0] ) };
-    $callback{'Condition'} = sub {
-        my ($key, $op, $value) = @_;
-
-        my $class;
-        if ( exists $lcfield{ lc $key } ) {
-            $key   = $lcfield{ lc $key };
-            $class = $field{$key}->[0];
-        }
-        unless( $class ) {
-            push @$results, [ loc("Unknown field: $key"), -1 ]
-        }
-
-        $value = "'$value'" if $value =~ /[^0-9]/;
-        $key = "'$key'" if $key =~ /^CF./;
-
-        my $clause = { Key => $key, Op => $op, Value => $value };
-        $node->addChild( RT::Interface::Web::QueryBuilder::Tree->new( $clause ) );
-    };
-
-    RT::SQL::Parse($string, \%callback);
     return $tree;
 };
 

Modified: rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web/QueryBuilder/Tree.pm
==============================================================================
--- rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web/QueryBuilder/Tree.pm	(original)
+++ rt/branches/3.7-EXPERIMENTAL/lib/RT/Interface/Web/QueryBuilder/Tree.pm	Wed Apr 19 17:04:20 2006
@@ -227,6 +227,52 @@
     return $list;
 }
 
+sub ParseSQL {
+    my $self = shift;
+    my %args = (
+        Query => '',
+        CurrentUser => '', #XXX: Hack
+        @_
+    );
+    my $string = $args{'Query'};
+
+    my @results;
+
+    my %field = %{ RT::Tickets->new( $args{'CurrentUser'} )->FIELDS };
+    my %lcfield = map { ( lc($_) => $_ ) } keys %field;
+
+    my $node =  $self;
+
+    my %callback;
+    $callback{'OpenParen'} = sub {
+        $node = __PACKAGE__->new( 'AND', $node );
+    };
+    $callback{'CloseParen'} = sub { $node = $node->getParent };
+    $callback{'EntryAggregator'} = sub { $node->setNodeValue( $_[0] ) };
+    $callback{'Condition'} = sub {
+        my ($key, $op, $value) = @_;
+
+        my $class;
+        if ( exists $lcfield{ lc $key } ) {
+            $key   = $lcfield{ lc $key };
+            $class = $field{$key}->[0];
+        }
+        unless( $class ) {
+            push @results, [ loc("Unknown field: $key"), -1 ]
+        }
+
+        $value = "'$value'" if $value =~ /[^0-9]/;
+        $key = "'$key'" if $key =~ /^CF./;
+
+        my $clause = { Key => $key, Op => $op, Value => $value };
+        $node->addChild( __PACKAGE__->new( $clause ) );
+    };
+
+    require RT::SQL;
+    RT::SQL::Parse($string, \%callback);
+    return @results;
+}
+
 eval "require RT::Interface::Web::QueryBuilder::Tree_Vendor";
 die $@ if ($@ && $@ !~ qr{^Can't locate RT/Interface/Web/QueryBuilder/Tree_Vendor.pm});
 eval "require RT::Interface::Web::QueryBuilder::Tree_Local";


More information about the Rt-commit mailing list