mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 06:18:28 +01:00
0131c3be00
Add 'versionfromdb' to opt-in for VERSION() query. mariadb_native_moodle_database::get_server_info() has been removed to avoid the specific override: everything is now managed in the base method which takes care of both MySQL and MariaDB versioning details. New protected methods have been added too to improve the testing strategy, allowing to mock the results from an actual DB connection. The new testing strategy enables simulating even the Azure scenarios.
117 lines
3.5 KiB
PHP
117 lines
3.5 KiB
PHP
<?php
|
|
// This file is part of Moodle - http://moodle.org/
|
|
//
|
|
// Moodle is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// Moodle is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
/**
|
|
* Native MariaDB class representing moodle database interface.
|
|
*
|
|
* @package core_dml
|
|
* @copyright 2013 Petr Skoda {@link http://skodak.org}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
|
|
defined('MOODLE_INTERNAL') || die();
|
|
|
|
require_once(__DIR__.'/moodle_database.php');
|
|
require_once(__DIR__.'/mysqli_native_moodle_database.php');
|
|
require_once(__DIR__.'/mysqli_native_moodle_recordset.php');
|
|
require_once(__DIR__.'/mysqli_native_moodle_temptables.php');
|
|
|
|
/**
|
|
* Native MariaDB class representing moodle database interface.
|
|
*
|
|
* @package core_dml
|
|
* @copyright 2013 Petr Skoda {@link http://skodak.org}
|
|
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
|
*/
|
|
class mariadb_native_moodle_database extends mysqli_native_moodle_database {
|
|
|
|
/**
|
|
* Returns localised database type name
|
|
* Note: can be used before connect()
|
|
* @return string
|
|
*/
|
|
public function get_name() {
|
|
return get_string('nativemariadb', 'install');
|
|
}
|
|
|
|
/**
|
|
* Returns localised database configuration help.
|
|
* Note: can be used before connect()
|
|
* @return string
|
|
*/
|
|
public function get_configuration_help() {
|
|
return get_string('nativemariadbhelp', 'install');
|
|
}
|
|
|
|
/**
|
|
* Returns the database vendor.
|
|
* Note: can be used before connect()
|
|
* @return string The db vendor name, usually the same as db family name.
|
|
*/
|
|
public function get_dbvendor() {
|
|
return 'mariadb';
|
|
}
|
|
|
|
/**
|
|
* Returns more specific database driver type
|
|
* Note: can be used before connect()
|
|
* @return string db type mysqli, pgsql, oci, mssql, sqlsrv
|
|
*/
|
|
protected function get_dbtype() {
|
|
return 'mariadb';
|
|
}
|
|
|
|
protected function has_breaking_change_quoted_defaults() {
|
|
$version = $this->get_server_info()['version'];
|
|
// Breaking change since 10.2.7: MDEV-13132.
|
|
return version_compare($version, '10.2.7', '>=');
|
|
}
|
|
|
|
public function has_breaking_change_sqlmode() {
|
|
$version = $this->get_server_info()['version'];
|
|
// Breaking change since 10.2.4: https://mariadb.com/kb/en/the-mariadb-library/sql-mode/#setting-sql_mode.
|
|
return version_compare($version, '10.2.4', '>=');
|
|
}
|
|
|
|
/**
|
|
* It is time to require transactions everywhere.
|
|
*
|
|
* MyISAM is NOT supported!
|
|
*
|
|
* @return bool
|
|
*/
|
|
protected function transactions_supported() {
|
|
if ($this->external) {
|
|
return parent::transactions_supported();
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Does this mariadb instance support fulltext indexes?
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function is_fulltext_search_supported() {
|
|
$info = $this->get_server_info();
|
|
|
|
if (version_compare($info['version'], '10.0.5', '>=')) {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
}
|