Bug 327344: Create sql_iposition and use it in Search.pm to fix the fact that searching for Turkish characters didn't do case-insensitivity properly.
Patch By Max Kanat-Alexander <mkanat@bugzilla.org> r=LpSolit, a=mkanat git-svn-id: svn://10.0.0.236/trunk@252684 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
9304d83e0f
commit
28d3c534f7
@ -313,6 +313,13 @@ sub sql_istring {
|
||||
return "LOWER($string)";
|
||||
}
|
||||
|
||||
sub sql_iposition {
|
||||
my ($self, $fragment, $text) = @_;
|
||||
$fragment = $self->sql_istring($fragment);
|
||||
$text = $self->sql_istring($text);
|
||||
return $self->sql_position($fragment, $text);
|
||||
}
|
||||
|
||||
sub sql_position {
|
||||
my ($self, $fragment, $text) = @_;
|
||||
|
||||
@ -1699,10 +1706,13 @@ Formatted SQL for interval function (scalar)
|
||||
|
||||
=item B<Description>
|
||||
|
||||
Outputs proper SQL syntax determinig position of a substring
|
||||
Outputs proper SQL syntax determining position of a substring
|
||||
(fragment) withing a string (text). Note: if the substring or
|
||||
text are string constants, they must be properly quoted (e.g. "'pattern'").
|
||||
|
||||
It searches for the string in a case-sensitive manner. If you want to do
|
||||
a case-insensitive search, use L</sql_iposition>.
|
||||
|
||||
=item B<Params>
|
||||
|
||||
=over
|
||||
@ -1719,6 +1729,10 @@ Formatted SQL for substring search (scalar)
|
||||
|
||||
=back
|
||||
|
||||
=item C<sql_iposition>
|
||||
|
||||
Just like L</sql_position>, but case-insensitive.
|
||||
|
||||
=item C<sql_group_by>
|
||||
|
||||
=over
|
||||
|
||||
@ -183,13 +183,14 @@ sub sql_interval {
|
||||
return "INTERVAL $interval $units";
|
||||
}
|
||||
|
||||
sub sql_iposition {
|
||||
my ($self, $fragment, $text) = @_;
|
||||
return "INSTR($text, $fragment)";
|
||||
}
|
||||
|
||||
sub sql_position {
|
||||
my ($self, $fragment, $text) = @_;
|
||||
|
||||
# mysql 4.0.1 and lower do not support CAST
|
||||
# (checksetup has a check for unsupported versions)
|
||||
|
||||
my $server_version = $self->bz_server_version;
|
||||
return "INSTR(CAST($text AS BINARY), CAST($fragment AS BINARY))";
|
||||
}
|
||||
|
||||
|
||||
@ -912,8 +912,7 @@ sub GetByWordListSubstr {
|
||||
if ($word ne "") {
|
||||
$sql_word = $dbh->quote($word);
|
||||
trick_taint($sql_word);
|
||||
push(@list, $dbh->sql_position(lc($sql_word),
|
||||
"LOWER($field)") . " > 0");
|
||||
push(@list, $dbh->sql_iposition($sql_word, $field) . " > 0");
|
||||
}
|
||||
}
|
||||
|
||||
@ -1919,7 +1918,7 @@ sub _substring {
|
||||
my ($ff, $q, $term) = @func_args{qw(ff q term)};
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
$$term = $dbh->sql_position(lc($$q), "LOWER($$ff)") . " > 0";
|
||||
$$term = $dbh->sql_iposition($$q, $$ff) . " > 0";
|
||||
}
|
||||
|
||||
sub _notsubstring {
|
||||
@ -1928,7 +1927,7 @@ sub _notsubstring {
|
||||
my ($ff, $q, $term) = @func_args{qw(ff q term)};
|
||||
my $dbh = Bugzilla->dbh;
|
||||
|
||||
$$term = $dbh->sql_position(lc($$q), "LOWER($$ff)") . " = 0";
|
||||
$$term = $dbh->sql_iposition($$q, $$ff) . " = 0";
|
||||
}
|
||||
|
||||
sub _regexp {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user