MDL-44377 dml: enforce non-empty prefix for sqlsrv
authorEloy Lafuente (stronk7) <stronk7@moodle.org>
Wed, 26 Feb 2014 15:32:40 +0000 (16:32 +0100)
committerEloy Lafuente (stronk7) <stronk7@moodle.org>
Fri, 28 Feb 2014 09:12:03 +0000 (10:12 +0100)
Only MySQL is allowed to run Moodle instances without
(with an empty) database prefix. The rationale is that
"user" is a reserved word in every RDBMS but MySQL.

Before this patch, installation was breaking badly, when
the "user" CREATE TABLE statement was issued. With this
patch the error is shown earlier (on connection) preventing
any advance/use of the database.

This check is present in all the drivers, just sqlsrv was missing it.

lib/dml/sqlsrv_native_moodle_database.php

index eb4569f..e13047e 100644 (file)
@@ -130,6 +130,11 @@ class sqlsrv_native_moodle_database extends moodle_database {
      * @throws dml_connection_exception if error
      */
     public function connect($dbhost, $dbuser, $dbpass, $dbname, $prefix, array $dboptions=null) {
+        if ($prefix == '' and !$this->external) {
+            // Enforce prefixes for everybody but mysql.
+            throw new dml_exception('prefixcannotbeempty', $this->get_dbfamily());
+        }
+
         $driverstatus = $this->driver_installed();
 
         if ($driverstatus !== true) {