[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