Fix Bug 33384 - database drivers cannot be provided by extension
authorMark A. Hershberger <mah@users.mediawiki.org>
Tue, 3 Jan 2012 19:55:45 +0000 (19:55 +0000)
committerMark A. Hershberger <mah@users.mediawiki.org>
Tue, 3 Jan 2012 19:55:45 +0000 (19:55 +0000)
Author: Adam Wight

Love the simplicity of this fix.

includes/db/Database.php

index 0293872..57d98ad 100644 (file)
@@ -675,9 +675,9 @@ abstract class DatabaseBase implements DatabaseType {
                        'mysql', 'postgres', 'sqlite', 'oracle', 'mssql', 'ibm_db2'
                );
                $dbType = strtolower( $dbType );
                        'mysql', 'postgres', 'sqlite', 'oracle', 'mssql', 'ibm_db2'
                );
                $dbType = strtolower( $dbType );
+               $class = 'Database' . ucfirst( $dbType );
 
                if( in_array( $dbType, $canonicalDBTypes ) ) {
 
                if( in_array( $dbType, $canonicalDBTypes ) ) {
-                       $class = 'Database' . ucfirst( $dbType );
                        return new $class(
                                isset( $p['host'] ) ? $p['host'] : false,
                                isset( $p['user'] ) ? $p['user'] : false,
                        return new $class(
                                isset( $p['host'] ) ? $p['host'] : false,
                                isset( $p['user'] ) ? $p['user'] : false,
@@ -686,6 +686,8 @@ abstract class DatabaseBase implements DatabaseType {
                                isset( $p['flags'] ) ? $p['flags'] : 0,
                                isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global'
                        );
                                isset( $p['flags'] ) ? $p['flags'] : 0,
                                isset( $p['tablePrefix'] ) ? $p['tablePrefix'] : 'get from global'
                        );
+               } elseif (class_exists($class)) {
+                       return new $class($p);
                } else {
                        return null;
                }
                } else {
                        return null;
                }