mirror of
https://github.com/moodle/moodle.git
synced 2025-05-05 07:48:21 +02:00
The COUNT window function can be helpful to fasten the complex query, but it's not recommended to be used for a single table query. The patch is specifically for PostgreSQL, MariaDB and Oracle databases as they have better performance compared to MySQL and MSSQL. Although these databases support the COUNT window functions, the results indicate that the query runs slower when using them.
126 lines
3.7 KiB
PHP
126 lines
3.7 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;
|
|
}
|
|
|
|
/**
|
|
* MariaDB supports the COUNT() window function and provides a performance improvement.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function is_count_window_function_supported(): bool {
|
|
return true;
|
|
}
|
|
}
|