RT 4.2.9 Simple Search, Subject LIKE instead of Id =

Hello,

after upgrade to 4.2.9 (from 4.2.2), we noticed that Simple Search by
Ticket id doesn’t work.
If I enter 783509 in Search box, Edit Search shows sql query:

( Subject LIKE 783502 ) AND ( Status = ‘new’ OR Status = ‘open’ OR
Status = ‘resolved’ OR Status = ‘stalled’ OR Status = ‘rejected’ OR
Status = ‘deleted’ )

/usr/local/lib/perl5/site_perl/RT/Search/Simple.pm has lines:

 # Assume that numbers were actually "default"s if we have other limits
 if ($limits->{id} and keys %{$limits} > 1) {
     my $values = delete $limits->{id};
     for my $value (@{$values}) {
         $value =~ /(\d+)/ or next;
         my ($key, @tsql) = $self->HandleDefault($1);
         push @{$limits->{$key}}, @tsql;
     }
 }

which rewrites ‘Id =’ to ‘Subject LIKE’.

sub HandleDefault {
my $fts = RT->Config->Get(‘FullTextSearch’);
if ($fts->{Enable} and $fts->{Indexed}) {
return default => “(Subject LIKE ‘$[1]’ OR Content LIKE '$[1]’)”;
} else {
return default => “Subject LIKE ‘$_[1]’”;
}
}

Regards,
Vladimir

Hello,

after upgrade to 4.2.9 (from 4.2.2), we noticed that Simple Search by
Ticket id doesn’t work.
If I enter 783509 in Search box, Edit Search shows sql query:

( Subject LIKE 783502 ) AND ( Status = ‘new’ OR Status = ‘open’ OR
Status = ‘resolved’ OR Status = ‘stalled’ OR Status = ‘rejected’ OR
Status = ‘deleted’ )

This does not occur on a stock RT 4.2.9.

/usr/local/lib/perl5/site_perl/RT/Search/Simple.pm has lines:

 # Assume that numbers were actually "default"s if we have other
 # limits
 if ($limits->{id} and keys %{$limits} > 1) {
     my $values = delete $limits->{id};
     for my $value (@{$values}) {
         $value =~ /(\d+)/ or next;
         my ($key, @tsql) = $self->HandleDefault($1);
         push @{$limits->{$key}}, @tsql;
     }
 }

which rewrites ‘Id =’ to ‘Subject LIKE’.

It only does so if there are other limits – as the comment
describes. This is so, in a stock RT, entering «rt 4» into the search
box does not attempt to load ticket #4.

Double-check that you do not have any customizations in this area. For
the following command, a stock RT 4.2.9 should return only the ID
clause:

perl -I/opt/rt4/lib -MRT=-init -MRT::Search::Simple
-le ‘print RT::Search::Simple->new(TicketsObj =>
RT::Tickets->new(RT->SystemUser))->QueryToSQL(“783502”)’

  • Alex

Hello,

after upgrade to 4.2.9 (from 4.2.2), we noticed that Simple Search by
Ticket id doesn’t work.
If I enter 783509 in Search box, Edit Search shows sql query:

( Subject LIKE 783502 ) AND ( Status = ‘new’ OR Status = ‘open’ OR
Status = ‘resolved’ OR Status = ‘stalled’ OR Status = ‘rejected’ OR
Status = ‘deleted’ )

This does not occur on a stock RT 4.2.9.

/usr/local/lib/perl5/site_perl/RT/Search/Simple.pm has lines:

 # Assume that numbers were actually "default"s if we have other
 # limits
 if ($limits->{id} and keys %{$limits} > 1) {
     my $values = delete $limits->{id};
     for my $value (@{$values}) {
         $value =~ /(\d+)/ or next;
         my ($key, @tsql) = $self->HandleDefault($1);
         push @{$limits->{$key}}, @tsql;
     }
 }

which rewrites ‘Id =’ to ‘Subject LIKE’.

It only does so if there are other limits – as the comment
describes. This is so, in a stock RT, entering «rt 4» into the search
box does not attempt to load ticket #4.

Double-check that you do not have any customizations in this area. For
the following command, a stock RT 4.2.9 should return only the ID
clause:

perl -I/opt/rt4/lib -MRT=-init -MRT::Search::Simple
-le ‘print RT::Search::Simple->new(TicketsObj =>
RT::Tickets->new(RT->SystemUser))->QueryToSQL(“783502”)’

  • Alex

Hello,
perl -I/opt/rt4/lib -MRT=-init -MRT::Search::Simple
-le ‘print RT::Search::Simple->new(TicketsObj =>
RT::Tickets->new(RT->SystemUser))->QueryToSQL(“783502”)’

returns ( Id = 783502 ), which is ok.

The problem is that $query consists of ticket id and various states -
new, open, resolved, stalled, rejected and deleted. These are other
limits and because of them search by id doesn’t work.

sub QueryToSQL {
my $self = shift;
$RT::Logger->error(“self $self\n”);
my $query = shift || $self->Argument;

I don’t know from where it gets all these states.

Regards,
Vladimir