Skip to content

Commit

Permalink
CU-6an9bm add support for db types in field definitions
Browse files Browse the repository at this point in the history
  • Loading branch information
moodledev committed Jul 8, 2020
1 parent e98ad08 commit 3125b5b
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 4 deletions.
15 changes: 12 additions & 3 deletions classes/local/data_grid/field/field_definition_factory.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ public static function get_field_definition_info($name) {
* @throws \coding_exception
*/
public static function build_field_definition($name, array $info) {
global $CFG;

if (!self::exists($name)) {
return null;
}
Expand All @@ -132,16 +134,23 @@ public static function build_field_definition($name, array $info) {
return $fielddefinitioninfo['factory']::build_field_definition($name, $info);
}

if (!isset($fielddefinitioninfo['select'])) {
throw new \coding_exception('Standard SQL fields need a select defined: ' . $name);
// Check for db driver specific select statements.
if (isset($fielddefinitioninfo['select_' . $CFG->dbtype])) {
$select = $fielddefinitioninfo['select_' . $CFG->dbtype];
} else {
// Otherwise default to agnostic select (not db specific).
if (!isset($fielddefinitioninfo['select'])) {
throw new \coding_exception('Standard SQL fields need a select defined: ' . $name);
}
$select = $fielddefinitioninfo['select'];
}

if (!isset($fielddefinitioninfo['title'])) {
throw new \coding_exception('Standard SQL fields need a title defined: ' . $name);
}

$newfielddefinition = new sql_field_definition(
$fielddefinitioninfo['select'],
$select,
$fielddefinitioninfo['name'],
$fielddefinitioninfo['title'],
isset($fielddefinitioninfo['visibility']) ? $fielddefinitioninfo['visibility'] :
Expand Down
3 changes: 2 additions & 1 deletion field_definitions.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,8 @@
],
[
'name' => 'u_group_names',
'select' => "(SELECT string_agg(g200.id::text, ',') FROM {groups} g200 JOIN {groups_members} gm200 ON gm200.groupid = g200.id AND gm200.userid = u.id)",
'select' => "(SELECT group_concat(g200.id, ',') FROM {groups} g200 JOIN {groups_members} gm200 ON gm200.groupid = g200.id WHERE gm200.userid = u.id)",
'select_pgsql' => "(SELECT string_agg(g200.id::text, ',') FROM {groups} g200 JOIN {groups_members} gm200 ON gm200.groupid = g200.id AND gm200.userid = u.id)",
'title' => get_string('group'),
'tables' => ['u'],
'attributes' => [
Expand Down

0 comments on commit 3125b5b

Please sign in to comment.