@words = map("LOWER($column) LIKE $_", @words);
# search for occurrences of all specified words in the column
- return "CASE WHEN (" . join(" AND ", @words) . ") THEN 1 ELSE 0 END";
+ return join (" AND ", @words), "CASE WHEN (" . join(" AND ", @words) . ") THEN 1 ELSE 0 END";
}
#####################################################################
=item B<Description>
-Returns SQL syntax for performing a full text search for specified text
-on a given column.
+Returns one or two SQL expressions for performing a full text search for
+specified text on a given column.
+
+If one value is returned, it is a numeric expression that indicates
+a match with a positive value and a non-match with zero. In this case,
+the DB must support casting numeric expresions to booleans.
+
+If two values are returned, then the first value is a boolean expression
+that indicates the presence of a match, and the second value is a numeric
+expression that can be used for ranking.
There is a ANSI SQL version of this method implemented using LIKE operator,
but it's not a real full text search. DB specific modules should override
$rterm2 = $term2 if !$rterm2;
# The term to use in the WHERE clause.
- my $term = "$term1 > 0 OR $term2 > 0";
+ my $term = "$term1 OR $term2";
if ($operator =~ /not/i) {
$term = "NOT($term)";
}