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.