# Based on http://lists.fsck.com/pipermail/rt-devel/2006-October/008898.html
# This is for MySQL only

package RT::SearchBuilder;

use strict;
no warnings qw(redefine);

my %joins = ( 'Principals Principals_1 CachedGroupMembers CachedGroupMembers_2 Groups Groups_3 ACL ACL_4'
	   	=> ' Groups Groups_3, CachedGroupMembers CachedGroupMembers_2, Principals Principals_1,  ACL ACL_4, Users main ',
       'Principals Principals_1 ACL ACL_2 CachedGroupMembers CachedGroupMembers_3' => 
	   ' ACL ACL_2, CachedGroupMembers CachedGroupMembers_3, Users main, Principals Principals_1 ',
         );


sub _BuildJoins{
    my $self = shift;
    my $st= join ' ',@{ $self->{'aliases'}};

	if (defined $joins{$st} and $self->{'table'} == 'Users') {
		return $joins{$st} ;
	}
    $self->SUPER::_BuildJoins();
}

sub BuildSelectQuery {
	my $self = shift;
	my $result = $self->SUPER::BuildSelectQuery();
    my $st= join ' ',@{ $self->{'aliases'}};

	if (defined $joins{$st} and $self->{'table'} == 'Users') {
		$result = "SELECT STRAIGHT_JOIN " . substr ($result, 7);
	}
	return $result;
}
sub BuildSelectCountQuery {
	my $self = shift;
	my $result = $self->SUPER::BuildSelectCountQuery();
    my $st= join ' ',@{ $self->{'aliases'}};

	if (defined $joins{$st} and $self->{'table'} == 'Users') {
		$result = "SELECT STRAIGHT_JOIN " . substr ($result, 7);
	}
	return $result;
}

1;
