MDL-38215 Fix cross-db support in workshop SQL queries
The $sql used in these methods may contain multiple parts glued together by the UNION operator. Simply appending the ORDER BY statement to the end of the query does not work in all DBs (failure reported at Oracle). Following the pattern already applied in MDL-30051, we wrap the SQL into yet another SELECT statement and perform ordering there. Credit goes to Sara Cenni for suggesting the fix.
This commit is contained in:
@@ -418,8 +418,10 @@ class workshop {
|
||||
return array();
|
||||
}
|
||||
|
||||
list($sort, $sortparams) = users_order_by_sql('u');
|
||||
$sql .= " ORDER BY $sort";
|
||||
list($sort, $sortparams) = users_order_by_sql('tmp');
|
||||
$sql = "SELECT *
|
||||
FROM ($sql) tmp
|
||||
ORDER BY $sort";
|
||||
|
||||
return $DB->get_records_sql($sql, array_merge($params, $sortparams), $limitfrom, $limitnum);
|
||||
}
|
||||
@@ -467,8 +469,10 @@ class workshop {
|
||||
return array();
|
||||
}
|
||||
|
||||
list($sort, $sortparams) = users_order_by_sql('u');
|
||||
$sql .= " ORDER BY $sort";
|
||||
list($sort, $sortparams) = users_order_by_sql('tmp');
|
||||
$sql = "SELECT *
|
||||
FROM ($sql) tmp
|
||||
ORDER BY $sort";
|
||||
|
||||
return $DB->get_records_sql($sql, array_merge($params, $sortparams), $limitfrom, $limitnum);
|
||||
}
|
||||
@@ -518,8 +522,10 @@ class workshop {
|
||||
return array();
|
||||
}
|
||||
|
||||
list($sort, $sortparams) = users_order_by_sql();
|
||||
$sql .= " ORDER BY $sort";
|
||||
list($sort, $sortparams) = users_order_by_sql('tmp');
|
||||
$sql = "SELECT *
|
||||
FROM ($sql) tmp
|
||||
ORDER BY $sort";
|
||||
|
||||
return $DB->get_records_sql($sql, array_merge($params, $sortparams), $limitfrom, $limitnum);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user