From 0f62a5b5bbd2dfb79dcf4a4d16ca58646a1dfbb0 Mon Sep 17 00:00:00 2001 From: stronk7 Date: Tue, 1 Jan 2008 12:03:00 +0000 Subject: [PATCH] Better behaviour for "-" course searches under MSSQL and Oracle. MDL-7312 ; merged from 19_STABLE --- lib/datalib.php | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/datalib.php b/lib/datalib.php index 06450d9a9e..f9c22dac14 100644 --- a/lib/datalib.php +++ b/lib/datalib.php @@ -1058,9 +1058,15 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record foreach ($searchterms as $searchterm) { + $NOT = ''; /// Initially we aren't going to perform NOT LIKE searches, only MSSQL and Oracle + /// will use it to simulate the "-" operator with LIKE clause + /// Under Oracle and MSSQL, trim the + and - operators and perform - /// simpler LIKE search + /// simpler LIKE (or NOT LIKE) queries if ($CFG->dbfamily == 'oracle' || $CFG->dbfamily == 'mssql') { + if (substr($searchterm, 0, 1) == '-') { + $NOT = ' NOT '; + } $searchterm = trim($searchterm, '+-'); } @@ -1080,8 +1086,8 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record $summarysearch .= " c.summary $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; $fullnamesearch .= " c.fullname $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' "; } else { - $summarysearch .= ' c.summary '. $LIKE .' \'%'. $searchterm .'%\' '; - $fullnamesearch .= ' c.fullname '. $LIKE .' \'%'. $searchterm .'%\' '; + $summarysearch .= ' summary '. $NOT . $LIKE .' \'%'. $searchterm .'%\' '; + $fullnamesearch .= ' fullname '. $NOT . $LIKE .' \'%'. $searchterm .'%\' '; } } @@ -1092,7 +1098,7 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record FROM {$CFG->prefix}course c JOIN {$CFG->prefix}context ctx ON (c.id = ctx.instanceid AND ctx.contextlevel=".CONTEXT_COURSE.") - WHERE ( $fullnamesearch OR $summarysearch ) + WHERE (( $fullnamesearch ) OR ( $summarysearch )) AND category > 0 ORDER BY " . $sort; -- 2.39.5