Better behaviour for "-" course searches under MSSQL and Oracle. MDL-7312
This commit is contained in:
+10
-4
@@ -805,9 +805,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->dbtype == 'oci8po' || $CFG->dbtype == 'mssql' || $CFG->dbtype == 'mssql_n' || $CFG->dbtype == 'odbc_mssql') {
|
||||
if (substr($searchterm, 0, 1) == '-') {
|
||||
$NOT = ' NOT ';
|
||||
}
|
||||
$searchterm = trim($searchterm, '+-');
|
||||
}
|
||||
|
||||
@@ -827,13 +833,13 @@ function get_courses_search($searchterms, $sort='fullname ASC', $page=0, $record
|
||||
$summarysearch .= " summary $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
|
||||
$fullnamesearch .= " fullname $NOTREGEXP '(^|[^a-zA-Z0-9])$searchterm([^a-zA-Z0-9]|$)' ";
|
||||
} else {
|
||||
$summarysearch .= ' summary '. $LIKE .'\'%'. $searchterm .'%\' ';
|
||||
$fullnamesearch .= ' fullname '. $LIKE .'\'%'. $searchterm .'%\' ';
|
||||
$summarysearch .= ' summary '. $NOT . $LIKE .' \'%'. $searchterm .'%\' ';
|
||||
$fullnamesearch .= ' fullname '. $NOT . $LIKE .' \'%'. $searchterm .'%\' ';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$selectsql = $CFG->prefix .'course WHERE ('. $fullnamesearch .' OR '. $summarysearch .') AND category > \'0\'';
|
||||
$selectsql = $CFG->prefix .'course WHERE (('. $fullnamesearch .') OR ('. $summarysearch .')) AND category > \'0\'';
|
||||
|
||||
$totalcount = count_records_sql('SELECT COUNT(*) FROM '. $selectsql);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user