Differences Between: [Versions 310 and 402] [Versions 311 and 402] [Versions 39 and 402] [Versions 400 and 402] [Versions 401 and 402]
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/>. 16 17 /** 18 * Abstract database driver test class providing some moodle database interface 19 * 20 * @package core 21 * @category dml 22 * @copyright 2018 Srdjan Janković, Catalyst IT 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 namespace core; 27 28 use Exception; 29 30 defined('MOODLE_INTERNAL') || die(); 31 32 require_once (__DIR__.'/../../moodle_database.php'); 33 require_once (__DIR__.'/../../moodle_temptables.php'); 34 require_once (__DIR__.'/../../../ddl/database_manager.php'); 35 require_once (__DIR__.'/test_sql_generator.php'); 36 37 /** 38 * Abstract database driver test class 39 * 40 * @package core 41 * @category dml 42 * @copyright 2018 Catalyst IT 43 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 44 */ 45 abstract class test_moodle_database extends \moodle_database { 46 47 /** @var string */ 48 private $error; 49 50 /** @var array */ 51 private $_tables = []; 52 53 /** 54 * Constructor - Instantiates the database 55 * @param bool $external True means that an external database is used. 56 */ 57 public function __construct($external = false) { 58 parent::__construct($external); 59 60 $this->temptables = new \moodle_temptables($this); 61 } 62 63 /** 64 * Default implementation 65 * @return boolean true 66 */ 67 public function driver_installed() { 68 return true; 69 } 70 71 /** 72 * Default implementation 73 * @return string 'test' 74 */ 75 public function get_dbfamily() { 76 return 'test'; 77 } 78 79 /** 80 * Default implementation 81 * @return string 'test' 82 */ 83 protected function get_dbtype() { 84 return 'test'; 85 } 86 87 /** 88 * Default implementation 89 * @return string 'test' 90 */ 91 protected function get_dblibrary() { 92 return 'test'; 93 } 94 95 /** 96 * Default implementation 97 * @return string 'test' 98 */ 99 public function get_name() { 100 return 'test'; 101 } 102 103 /** 104 * Default implementation 105 * @return string 106 */ 107 public function get_configuration_help() { 108 return 'test database driver'; 109 } 110 111 /** 112 * Default implementation 113 * @return array 114 */ 115 public function get_server_info() { 116 return ['description' => $this->name(), 'version' => '0']; 117 } 118 119 /** 120 * Default implementation 121 * @return int 0 122 */ 123 protected function allowed_param_types() { 124 return 0; 125 } 126 127 /** 128 * Returns error property 129 * @return string $error 130 */ 131 public function get_last_error() { 132 return $this->error; 133 } 134 135 /** 136 * Sets tables property 137 * @param array $tables 138 * @return void 139 */ 140 public function set_tables($tables) { 141 $this->_tables = $tables; 142 } 143 144 /** 145 * Returns keys of tables property 146 * @param bool $usecache 147 * @return array $tablenames 148 */ 149 public function get_tables($usecache = true) { 150 return array_keys($this->_tables); 151 } 152 153 /** 154 * Return table indexes 155 * @param string $table 156 * @return array $indexes 157 */ 158 public function get_indexes($table) { 159 return isset($this->_tables[$table]['indexes']) ? $this->_tables[$table]['indexes'] : []; 160 } 161 162 /** 163 * Return table columns 164 * @param string $table 165 * @return array database_column_info[] of database_column_info objects indexed with column names 166 */ 167 public function fetch_columns($table) : array { 168 return $this->_tables[$table]['columns']; 169 } 170 171 /** 172 * Default implementation 173 * @param \stdClass $column metadata 174 * @param mixed $value 175 * @return mixed $value 176 */ 177 protected function normalise_value($column, $value) { 178 return $value; 179 } 180 181 /** 182 * Default implementation 183 * @param string|array $sql 184 * @param array|null $tablenames 185 * @return bool true 186 */ 187 public function change_database_structure($sql, $tablenames = null) { 188 return true; 189 } 190 191 /** 192 * Default implementation, throws Exception 193 * @param string $sql 194 * @param array $params 195 * @return bool true 196 * @throws Exception 197 */ 198 public function execute($sql, array $params = null) { 199 throw new Exception("execute() not implemented"); 200 } 201 202 /** 203 * Default implementation, throws Exception 204 * @param string $sql 205 * @param array $params 206 * @param int $limitfrom 207 * @param int $limitnum 208 * @return bool true 209 * @throws Exception 210 */ 211 public function get_recordset_sql($sql, array $params = null, $limitfrom = 0, $limitnum = 0) { 212 throw new Exception("get_recordset_sql() not implemented"); 213 } 214 215 /** 216 * Default implementation, throws Exception 217 * @param string $sql 218 * @param array $params 219 * @param int $limitfrom 220 * @param int $limitnum 221 * @return bool true 222 * @throws Exception 223 */ 224 public function get_records_sql($sql, array $params = null, $limitfrom = 0, $limitnum = 0) { 225 throw new Exception("get_records_sql() not implemented"); 226 } 227 228 /** 229 * Default implementation, throws Exception 230 * @param string $sql 231 * @param array $params 232 * @return bool true 233 * @throws Exception 234 */ 235 public function get_fieldset_sql($sql, array $params = null) { 236 throw new Exception("get_fieldset_sql() not implemented"); 237 } 238 239 /** 240 * Default implementation, throws Exception 241 * @param string $table 242 * @param array $params 243 * @param bool $returnid 244 * @param bool $bulk 245 * @param bool $customsequence 246 * @return bool|int true or new id 247 * @throws Exception 248 */ 249 public function insert_record_raw($table, $params, $returnid = true, $bulk = false, $customsequence = false) { 250 throw new Exception("insert_record_raw() not implemented"); 251 } 252 253 /** 254 * Default implementation, throws Exception 255 * @param string $table 256 * @param object|array $dataobject 257 * @param bool $returnid 258 * @param bool $bulk 259 * @return bool|int true or new id 260 * @throws Exception 261 */ 262 public function insert_record($table, $dataobject, $returnid = true, $bulk = false) { 263 return $this->insert_record_raw($table, (array)$dataobject, $returnid, $bulk); 264 } 265 266 /** 267 * Default implementation, throws Exception 268 * @param string $table 269 * @param StdObject $dataobject 270 * @return bool true 271 * @throws Exception 272 */ 273 public function import_record($table, $dataobject) { 274 throw new Exception("import_record() not implemented"); 275 } 276 277 /** 278 * Default implementation, throws Exception 279 * @param string $table 280 * @param array $params 281 * @param bool $bulk 282 * @return bool true 283 * @throws Exception 284 */ 285 public function update_record_raw($table, $params, $bulk = false) { 286 throw new Exception("update_record_raw() not implemented"); 287 } 288 289 /** 290 * Default implementation, throws Exception 291 * @param string $table 292 * @param StdObject $dataobject 293 * @param bool $bulk 294 * @return bool true 295 * @throws Exception 296 */ 297 public function update_record($table, $dataobject, $bulk = false) { 298 throw new Exception("update_record() not implemented"); 299 } 300 301 /** 302 * Default implementation, throws Exception 303 * @param string $table 304 * @param string $newfield 305 * @param string $newvalue 306 * @param string $select 307 * @param array $params 308 * @return bool true 309 * @throws Exception 310 */ 311 public function set_field_select($table, $newfield, $newvalue, $select, array $params = null) { 312 throw new Exception("set_field_select() not implemented"); 313 } 314 315 /** 316 * Default implementation, throws Exception 317 * @param string $table 318 * @param string $select 319 * @param array $params 320 * @return bool true 321 * @throws Exception 322 */ 323 public function delete_records_select($table, $select, array $params = null) { 324 throw new Exception("delete_records_select() not implemented"); 325 } 326 327 /** 328 * Default implementation, throws Exception 329 * @return string $sql 330 * @throws Exception 331 */ 332 public function sql_concat() { 333 throw new Exception("sql_concat() not implemented"); 334 } 335 336 /** 337 * Default implementation, throws Exception 338 * @param string $separator 339 * @param array $elements 340 * @return string $sql 341 * @throws Exception 342 */ 343 public function sql_concat_join($separator = "' '", $elements = []) { 344 throw new Exception("sql_concat_join() not implemented"); 345 } 346 347 /** 348 * Default implementation, throws Exception 349 * 350 * @param string $field 351 * @param string $separator 352 * @param string $sort 353 * @return string 354 * @throws Exception 355 */ 356 public function sql_group_concat(string $field, string $separator = ', ', string $sort = ''): string { 357 throw new Exception('sql_group_concat() not implemented'); 358 } 359 360 /** 361 * Default implementation, throws Exception 362 * @return void 363 * @throws Exception 364 */ 365 protected function begin_transaction() { 366 throw new Exception("begin_transaction() not implemented"); 367 } 368 369 /** 370 * Default implementation, throws Exception 371 * @return void 372 * @throws Exception 373 */ 374 protected function commit_transaction() { 375 throw new Exception("commit_transaction() not implemented"); 376 } 377 378 /** 379 * Default implementation, throws Exception 380 * @return void 381 * @throws Exception 382 */ 383 protected function rollback_transaction() { 384 throw new Exception("rollback_transaction() not implemented"); 385 } 386 387 /** 388 * Returns the database manager used for db manipulation. 389 * Used mostly in upgrade.php scripts. 390 * @return database_manager The instance used to perform ddl operations. 391 * @see lib/ddl/database_manager.php 392 */ 393 public function get_manager() { 394 if (!$this->database_manager) { 395 $generator = new test_sql_generator($this, $this->temptables); 396 397 $this->database_manager = new database_manager($this, $generator); 398 } 399 return $this->database_manager; 400 } 401 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body