Merge branch 'MDL-39262' of git://github.com/jmvedrine/moodle
[moodle.git] / lib / dml / mariadb_native_moodle_database.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Native MariaDB class representing moodle database interface.
19  *
20  * @package    core_dml
21  * @copyright  2013 Petr Skoda {@link http://skodak.org}
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 require_once(__DIR__.'/moodle_database.php');
28 require_once(__DIR__.'/mysqli_native_moodle_database.php');
29 require_once(__DIR__.'/mysqli_native_moodle_recordset.php');
30 require_once(__DIR__.'/mysqli_native_moodle_temptables.php');
32 /**
33  * Native MariaDB class representing moodle database interface.
34  *
35  * @package    core_dml
36  * @copyright  2013 Petr Skoda {@link http://skodak.org}
37  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38  */
39 class mariadb_native_moodle_database extends mysqli_native_moodle_database {
41     /**
42      * Returns localised database type name
43      * Note: can be used before connect()
44      * @return string
45      */
46     public function get_name() {
47         return get_string('nativemariadb', 'install');
48     }
50     /**
51      * Returns localised database configuration help.
52      * Note: can be used before connect()
53      * @return string
54      */
55     public function get_configuration_help() {
56         return get_string('nativemariadbhelp', 'install');
57     }
59     /**
60      * Returns the database vendor.
61      * Note: can be used before connect()
62      * @return string The db vendor name, usually the same as db family name.
63      */
64     public function get_dbvendor() {
65         return 'mariadb';
66     }
68     /**
69      * Returns more specific database driver type
70      * Note: can be used before connect()
71      * @return string db type mysqli, pgsql, oci, mssql, sqlsrv
72      */
73     protected function get_dbtype() {
74         return 'mariadb';
75     }
77     /**
78      * Returns database server info array
79      * @return array Array containing 'description' and 'version' info
80      */
81     public function get_server_info() {
82         $version = $this->mysqli->server_info;
83         $matches = null;
84         if (preg_match('/^5\.5\.5-(10\..+)-MariaDB/i', $version, $matches)) {
85             // Looks like MariaDB decided to use these weird version numbers for better BC with MySQL...
86             $version = $matches[1];
87         }
88         return array('description'=>$this->mysqli->server_info, 'version'=>$version);
89     }
91     /**
92      * It is time to require transactions everywhere.
93      *
94      * MyISAM is NOT supported!
95      *
96      * @return bool
97      */
98     protected function transactions_supported() {
99         if ($this->external) {
100             return parent::transactions_supported();
101         }
102         return true;
103     }
105     /**
106      * Returns the current db engine.
107      *
108      * MyISAM is NOT supported!
109      *
110      * @return string or null MySQL engine name
111      */
112     public function get_dbengine() {
113         if ($this->external) {
114             return null;
115         }
117         $engine = parent::get_dbengine();
118         if ($engine === 'MyISAM') {
119             debugging('MyISAM tables are not supported in MariaDB driver!');
120             $engine = 'XtraDB';
121         }
122         return $engine;
123     }