From f8537ffec6c3248525cc1322e3aaa2ebd64bea0a Mon Sep 17 00:00:00 2001 From: Meirza Date: Fri, 16 Dec 2022 20:52:11 +0700 Subject: [PATCH] MDL-64153 dml: Added extrainfo in the DB options config. extrainfo is an extra information for the DB driver, e.g. SQL Server, has additional configuration according to its environment, which the administrator can specify to alter and override any connection options. Co-authored-by: LukeCarrier --- config-dist.php | 4 ++++ lib/dml/sqlsrv_native_moodle_database.php | 27 ++++++++++++++--------- lib/upgrade.txt | 3 +++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/config-dist.php b/config-dist.php index f4ba613a157..e81cedced28 100644 --- a/config-dist.php +++ b/config-dist.php @@ -78,6 +78,10 @@ $CFG->dboptions = array( // e.g. PaaS on Azure. Default is false/unset. // Uncomment and set to true to force MySQL and // MariaDB to use 'SELECT VERSION();'. + // 'extrainfo' => [], // Extra information for the DB driver, e.g. SQL Server, + // has additional configuration according to its environment, + // which the administrator can specify to alter and + // override any connection options. // 'fetchbuffersize' => 100000, // On PostgreSQL, this option sets a limit // on the number of rows that are fetched into // memory when doing a large recordset query diff --git a/lib/dml/sqlsrv_native_moodle_database.php b/lib/dml/sqlsrv_native_moodle_database.php index 37a1d9fe4ba..7ba61da93b2 100644 --- a/lib/dml/sqlsrv_native_moodle_database.php +++ b/lib/dml/sqlsrv_native_moodle_database.php @@ -208,21 +208,28 @@ class sqlsrv_native_moodle_database extends moodle_database { $this->store_settings($dbhost, $dbuser, $dbpass, $dbname, $prefix, $dboptions); + $options = [ + 'UID' => $this->dbuser, + 'PWD' => $this->dbpass, + 'Database' => $this->dbname, + 'CharacterSet' => 'UTF-8', + 'MultipleActiveResultSets' => true, + 'ConnectionPooling' => !empty($this->dboptions['dbpersist']), + 'ReturnDatesAsStrings' => true, + ]; + $dbhost = $this->dbhost; if (!empty($dboptions['dbport'])) { $dbhost .= ',' . $dboptions['dbport']; } - $this->sqlsrv = sqlsrv_connect($dbhost, array - ( - 'UID' => $this->dbuser, - 'PWD' => $this->dbpass, - 'Database' => $this->dbname, - 'CharacterSet' => 'UTF-8', - 'MultipleActiveResultSets' => true, - 'ConnectionPooling' => !empty($this->dboptions['dbpersist']), - 'ReturnDatesAsStrings' => true, - )); + // The sqlsrv_connect() has a lot of connection options to be used. + // Users can add any supported options with the 'extrainfo' key in the dboptions. + if (isset($this->dboptions['extrainfo'])) { + $options = array_merge($options, $this->dboptions['extrainfo']); + } + + $this->sqlsrv = sqlsrv_connect($dbhost, $options); if ($this->sqlsrv === false) { $this->sqlsrv = null; diff --git a/lib/upgrade.txt b/lib/upgrade.txt index 5ffd7bdcf55..bb8188749a4 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -18,6 +18,9 @@ information provided here is intended especially for developers. It only worked with http sites and did not officially support SSL, and is at risk of disappearing should Yahoo! decide to remove it. * New `properties_filter` method of persistent class for filtering properties of a record against persistent definition +* Added 'extrainfo' in the DB options config. Its extra information for the DB driver, e.g. SQL Server, + has additional configuration according to its environment, which the administrator can specify to alter and + override any connection options. === 4.1 ===