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:
David Mudrák
2013-03-13 14:58:50 +01:00
parent 8673a98d1d
commit c3d0157b0d
+12 -6
View File
@@ -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);
}