From 29a1cf86a383d2b2f7769935c4f923e2c3c6645c Mon Sep 17 00:00:00 2001 From: Meirza Date: Fri, 16 Dec 2022 20:52:11 +0700 Subject: [PATCH] MDL-77669 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 This is a backport of MDL-64153. --- config-dist.php | 4 ++++ lib/dml/sqlsrv_native_moodle_database.php | 27 ++++++++++++++--------- lib/upgrade.txt | 5 +++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/config-dist.php b/config-dist.php index 42624a0cd31..1dcde3675a8 100644 --- a/config-dist.php +++ b/config-dist.php @@ -70,6 +70,10 @@ $CFG->dboptions = array( // can be removed for MySQL (by default it will // use 'utf8mb4_unicode_ci'. This option should // be removed for all other databases. + // '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 197f48cbceb..36463e05d6e 100644 --- a/lib/upgrade.txt +++ b/lib/upgrade.txt @@ -1,6 +1,11 @@ This files describes API changes in core libraries and APIs, information provided here is intended especially for developers. +=== 4.1.3 === +* 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.2 === * The method `flexible_table::set_columnsattributes` now can be used with 'class' key to add custom classes to the DOM.