'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
'SamplingStatsdClient' => __DIR__ . '/includes/libs/stats/SamplingStatsdClient.php',
'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
- 'SavepointPostgres' => __DIR__ . '/includes/libs/rdbms/database/utils/SavepointPostgres.php',
'ScopedCallback' => __DIR__ . '/includes/compat/ScopedCallback.php',
'ScopedLock' => __DIR__ . '/includes/libs/lockmanager/ScopedLock.php',
'SearchApi' => __DIR__ . '/includes/api/SearchApi.php',
'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
'Wikimedia\\Rdbms\\DBConnRef' => __DIR__ . '/includes/libs/rdbms/database/DBConnRef.php',
'Wikimedia\\Rdbms\\DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
+ 'Wikimedia\\Rdbms\\Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
+ 'Wikimedia\\Rdbms\\DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
+ 'Wikimedia\\Rdbms\\DatabaseMysql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysql.php',
+ 'Wikimedia\\Rdbms\\DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
+ 'Wikimedia\\Rdbms\\DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
+ 'Wikimedia\\Rdbms\\DatabasePostgres' => __DIR__ . '/includes/libs/rdbms/database/DatabasePostgres.php',
+ 'Wikimedia\\Rdbms\\DatabaseSqlite' => __DIR__ . '/includes/libs/rdbms/database/DatabaseSqlite.php',
'Wikimedia\\Rdbms\\FakeResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php',
'Wikimedia\\Rdbms\\Field' => __DIR__ . '/includes/libs/rdbms/field/Field.php',
'Wikimedia\\Rdbms\\IBlob' => __DIR__ . '/includes/libs/rdbms/encasing/IBlob.php',
'Wikimedia\\Rdbms\\PostgresField' => __DIR__ . '/includes/libs/rdbms/field/PostgresField.php',
'Wikimedia\\Rdbms\\ResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/ResultWrapper.php',
'Wikimedia\\Rdbms\\SQLiteField' => __DIR__ . '/includes/libs/rdbms/field/SQLiteField.php',
+ 'Wikimedia\\Rdbms\\SavepointPostgres' => __DIR__ . '/includes/libs/rdbms/database/utils/SavepointPostgres.php',
'Wikimedia\\Rdbms\\SessionConsistentConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php',
'Wikimedia\\Rdbms\\TransactionProfiler' => __DIR__ . '/includes/libs/rdbms/TransactionProfiler.php',
'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
* @file
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
* @todo Replace calls to wfGetDB with calls to LoadBalancer::getConnection()
* on an injected instance of LoadBalancer.
*
- * @return Database
+ * @return \Wikimedia\Rdbms\Database
*/
function wfGetDB( $db, $groups = [], $wiki = false ) {
return wfGetLB( $wiki )->getConnection( $db, $groups, $wiki );
* @file
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
* @file
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
* @file
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\Interwiki\InterwikiLookup;
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
/**
* Displays information about a page.
/**
* Gets a default replica DB connection object
- * @return Database
+ * @return IDatabase
*/
protected function getDB() {
if ( !isset( $this->mSlaveDB ) ) {
*/
use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\Database;
/**
* @ingroup API
/**
* Get the database connection (read-only)
- * @return Database
+ * @return IDatabase
*/
protected function getDB() {
return $this->mDbSource->getDB();
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
+
/**
* This is the main query class. It behaves similar to ApiMain: based on the
* parameters given, it will create a list of titles to work on (an ApiPageSet
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
* @param array $groups Query groups
- * @return Database
+ * @return IDatabase
*/
public function getNamedDB( $name, $db, $groups ) {
if ( !array_key_exists( $name, $this->mNamedDB ) ) {
* @file
*/
+use Wikimedia\Rdbms\IDatabase;
use Wikimedia\Rdbms\ResultWrapper;
/**
/**
* Get the Query database connection (read-only)
- * @return Database
+ * @return IDatabase
*/
protected function getDB() {
if ( is_null( $this->mDb ) ) {
* @param string $name Name to assign to the database connection
* @param int $db One of the DB_* constants
* @param array $groups Query groups
- * @return Database
+ * @return IDatabase
*/
public function selectNamedDB( $name, $db, $groups ) {
$this->mDb = $this->getQuery()->getNamedDB( $name, $db, $groups );
/**
* Get the replica DB connection to the database
* When non existing, will initialize the connection.
- * @return Database
+ * @return IDatabase
*/
protected function getDB() {
if ( !isset( $this->db ) ) {
* @file
* @ingroup Cache
*/
+
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\Linker\LinkTarget;
use MediaWiki\MediaWikiServices;
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
+use Wikimedia\Rdbms\Database;
/**
* This class generates message blobs for use by ResourceLoader modules.
use MediaWiki\MediaWikiServices;
use Wikimedia\ScopedCallback;
use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\Database;
/**
* MediaWiki message cache structure version.
* @ingroup Change tagging
*/
+use Wikimedia\Rdbms\Database;
+
class ChangeTags {
/**
* Can't delete tags with more than this many uses. Similar in intent to
<?php
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\LoadBalancer;
/**
* @file
* @ingroup Database
*/
+
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\Blob;
use Wikimedia\Rdbms\ResultWrapper;
* @ingroup FileRepo
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
*/
use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup FileAbstraction
*/
-use \MediaWiki\Logger\LoggerFactory;
+use MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
* @ingroup Deployment
*/
use Wikimedia\Rdbms\LBFactorySingle;
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
* @file
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use MediaWiki\MediaWikiServices;
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Database;
+
/**
* Class for setting up the MediaWiki database using Microsoft SQL Server.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\DatabaseMssql;
+
/**
* Class for setting up the MediaWiki database using Microsoft SQL Server.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Database;
+
/**
* Class for setting up the MediaWiki database using MySQL.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Database;
+
/**
* Class for setting up the MediaWiki database using Postgres.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\DatabasePostgres;
+
/**
* Class for handling updates to Postgres databases.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DatabaseSqlite;
+
/**
* Class for setting up the MediaWiki database using SQLLite.
*
* @ingroup Deployment
*/
+use Wikimedia\Rdbms\DatabaseSqlite;
+
/**
* Class for handling updates to Sqlite databases.
*
*/
use \Cdb\Exception as CdbException;
use \Cdb\Reader as CdbReader;
-use Database;
+use Wikimedia\Rdbms\Database;
use Hooks;
use Interwiki;
use Language;
* @ingroup LockManager
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
namespace Wikimedia\Rdbms;
-use Database;
use InvalidArgumentException;
/**
namespace Wikimedia\Rdbms;
-use Database;
-
/**
* Database connection manager.
*
namespace Wikimedia\Rdbms;
-use Database;
use InvalidArgumentException;
/**
}
}
-class_alias( 'Wikimedia\Rdbms\DBConnRef', 'DBConnRef' );
+class_alias( DBConnRef::class, 'DBConnRef' );
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
use Psr\Log\LoggerAwareInterface;
use Psr\Log\LoggerInterface;
use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\TransactionProfiler;
-use Wikimedia\Rdbms\LikeMatch;
-use Wikimedia\Rdbms\DatabaseDomain;
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\Blob;
use Wikimedia\Timestamp\ConvertibleTimestamp;
-use Wikimedia\Rdbms\IDatabase;
-use Wikimedia\Rdbms\IMaintainableDatabase;
+use MediaWiki;
+use BagOStuff;
+use HashBagOStuff;
+use InvalidArgumentException;
+use DBQueryError;
+use DBUnexpectedError;
+use DBConnectionError;
+use DBReadOnlyError;
+use Exception;
+use RuntimeException;
/**
* Relational database abstraction object
'oracle' => [],
'mssql' => [],
];
+ static $classAliases = [
+ 'DatabaseMssql' => DatabaseMssql::class,
+ 'DatabaseMysql' => DatabaseMysql::class,
+ 'DatabaseMysqli' => DatabaseMysqli::class,
+ 'DatabaseSqlite' => DatabaseSqlite::class,
+ 'DatabasePostgres' => DatabasePostgres::class
+ ];
$driver = false;
$dbType = strtolower( $dbType );
} else {
$driver = $dbType;
}
+
if ( $driver === false || $driver === '' ) {
throw new InvalidArgumentException( __METHOD__ .
" no viable database extension found for type '$dbType'" );
}
$class = 'Database' . ucfirst( $driver );
+ if ( isset( $classAliases[$class] ) ) {
+ $class = $classAliases[$class];
+ }
+
if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
// Resolve some defaults for b/c
$p['host'] = isset( $p['host'] ) ? $p['host'] : false;
}
}
-class_alias( Database::class, 'DatabaseBase' );
+class_alias( Database::class, 'DatabaseBase' ); // b/c for old name
+class_alias( Database::class, 'Database' ); // b/c global alias
* @author Ryan Biesemeyer <v-ryanbi at microsoft dot com>
* @author Ryan Schmidt <skizzerz at gmail dot com>
*/
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\MssqlBlob;
-use Wikimedia\Rdbms\MssqlField;
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\MssqlResultWrapper;
+
+namespace Wikimedia\Rdbms;
+
+use MediaWiki;
+use DBConnectionError;
+use DBUnexpectedError;
+use DBQueryError;
+use Exception;
+use stdClass;
/**
* @ingroup Database
return $old;
}
}
+
+class_alias( DatabaseMssql::class, 'DatabaseMssql' );
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
+use DBConnectionError;
/**
* Database abstraction object for PHP extension mysql.
return mysql_real_escape_string( $s, $conn );
}
}
+
+class_alias( DatabaseMysql::class, 'DatabaseMysql' );
* @file
* @ingroup Database
*/
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\MySQLMasterPos;
-use Wikimedia\Rdbms\MySQLField;
-use Wikimedia\Rdbms\ResultWrapper;
+namespace Wikimedia\Rdbms;
+
+use DateTime;
+use DateTimeZone;
+use MediaWiki;
+use InvalidArgumentException;
+use DBError;
+use DBExpectedError;
+use DBUnexpectedError;
+use DBConnectionError;
+use Exception;
+use stdClass;
/**
* Database abstraction object for MySQL.
}
}
}
+
+class_alias( DatabaseMysqlBase::class, 'DatabaseMysqlBase' );
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
-use Wikimedia\Rdbms\ResultWrapper;
+use mysqli;
+use DBConnectionError;
+use IP;
/**
* Database abstraction object for PHP extension mysqli.
}
/**
- * @param resource|ResultWrapper $res
+ * @param mysqli $res
* @param int $n
* @return mixed
*/
}
/**
- * @param resource|ResultWrapper $res
+ * @param mysqli $res
* @param int $n
* @return mixed
*/
}
/**
- * @param resource|ResultWrapper $res
+ * @param mysqli $res
* @param int $row
* @return mixed
*/
}
}
}
+
+class_alias( DatabaseMysqli::class, 'DatabaseMysqli' );
* @file
* @ingroup Database
*/
+namespace Wikimedia\Rdbms;
+
use Wikimedia\Timestamp\ConvertibleTimestamp;
use Wikimedia\WaitConditionLoop;
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\PostgresBlob;
-use Wikimedia\Rdbms\PostgresField;
-use Wikimedia\Rdbms\ResultWrapper;
+use MediaWiki;
+use DBUnexpectedError;
+use DBConnectionError;
+use Exception;
/**
* @ingroup Database
*
* @since 1.19
* @param string $text Postgreql array returned in a text form like {a,b}
- * @param string $output
+ * @param string[] $output
* @param int|bool $limit
* @param int $offset
- * @return string
+ * @return string[]
*/
private function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
if ( false === $limit ) {
* @return string Integer
*/
private function bigintFromLockName( $lockName ) {
- return Wikimedia\base_convert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
+ return \Wikimedia\base_convert( substr( sha1( $lockName ), 0, 15 ), 16, 10 );
}
}
+
+class_alias( DatabasePostgres::class, 'DatabasePostgres' );
* @file
* @ingroup Database
*/
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\SQLiteField;
-use Wikimedia\Rdbms\ResultWrapper;
+namespace Wikimedia\Rdbms;
+
+use PDO;
+use PDOException;
+use LockManager;
+use FSLockManager;
+use DBConnectionError;
+use DBReadOnlyError;
+use InvalidArgumentException;
+use RuntimeException;
+use DBError;
+use stdClass;
/**
* @ingroup Database
$p['dbFilePath'] = $filename;
$p['schema'] = false;
$p['tablePrefix'] = '';
+ /** @var DatabaseSqlite $db */
+ $db = Database::factory( 'sqlite', $p );
- return Database::factory( 'sqlite', $p );
+ return $db;
}
/**
return 'SQLite ' . (string)$this->mConn->getAttribute( PDO::ATTR_SERVER_VERSION );
}
}
+
+class_alias( DatabaseSqlite::class, 'DatabaseSqlite' );
+
public function setTableAliases( array $aliases );
}
-class_alias( 'Wikimedia\Rdbms\IDatabase', 'IDatabase' );
+class_alias( IDatabase::class, 'IDatabase' );
public function unlockTables( $method );
}
-class_alias( 'Wikimedia\Rdbms\IMaintainableDatabase', 'IMaintainableDatabase' );
+class_alias( IMaintainableDatabase::class, 'IMaintainableDatabase' );
}
}
-class_alias( 'Wikimedia\Rdbms\MaintainableDBConnRef', 'MaintainableDBConnRef' );
+class_alias( MaintainableDBConnRef::class, 'MaintainableDBConnRef' );
* @file
* @ingroup Database
*/
+
+namespace Wikimedia\Rdbms;
+
use Psr\Log\LoggerInterface;
/**
* @file
* @ingroup Database
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
namespace Wikimedia\Rdbms;
-use DatabasePostgres;
-
class PostgresField implements Field {
private $name, $tablename, $type, $nullable, $max_length, $deferred, $deferrable, $conname,
$has_default, $default;
*/
namespace Wikimedia\Rdbms;
-use Database;
use DBError;
use DBAccessError;
use DBTransactionError;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use Wikimedia\ScopedCallback;
-use Database;
use BagOStuff;
use EmptyBagOStuff;
use WANObjectCache;
class LoadBalancer implements ILoadBalancer {
/** @var array[] Map of (server index => server config array) */
private $mServers;
- /** @var \Database[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
+ /** @var Database[][][] Map of local/foreignUsed/foreignFree => server index => IDatabase array */
private $mConns;
/** @var float[] Map of (server index => weight) */
private $mLoads;
/** @var LoggerInterface */
protected $perfLogger;
- /** @var \Database Database connection that caused a problem */
+ /** @var Database DB connection object that caused a problem */
private $errorConnection;
/** @var integer The generic (not query grouped) replica DB index (of $mServers) */
private $mReadIndex;
* @ingroup Cache
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
use \MediaWiki\MediaWikiServices;
use \Wikimedia\WaitConditionLoop;
* @author Roan Kattouw
*/
+use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\IDatabase;
/**
*/
use MediaWiki\Session\BotPasswordSessionProvider;
+use Wikimedia\Rdbms\IMaintainableDatabase;
/**
* Utility class for bot passwords
/**
* Get a database connection for the bot passwords database
* @param int $db Index of the connection to get, e.g. DB_MASTER or DB_REPLICA.
- * @return Database
+ * @return IMaintainableDatabase
*/
public static function getDB( $db ) {
global $wgBotPasswordsCluster, $wgBotPasswordsDatabase;
use MediaWiki\Auth\AuthenticationResponse;
use MediaWiki\Auth\AuthenticationRequest;
use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\Database;
/**
* String Some punctuation to prevent editing from broken text-mangling proxies.
require_once __DIR__ . '/Maintenance.php';
use Wikimedia\Rdbms\IMaintainableDatabase;
+use Wikimedia\Rdbms\DatabaseSqlite;
/**
* Maintenance script that rebuilds search index table from scratch.
* @ingroup Maintenance
*/
+use Wikimedia\Rdbms\DatabaseSqlite;
+
/**
* This class contains code common to different SQLite-related maintenance scripts
*
use Wikimedia\Rdbms\TransactionProfiler;
use Wikimedia\Rdbms\DatabaseDomain;
use Wikimedia\Rdbms\MySQLMasterPos;
+use Wikimedia\Rdbms\DatabaseMysqlBase;
/**
* Fake class around abstract class so we can call concrete methods.
<?php
use Wikimedia\Rdbms\Blob;
+use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\DatabaseSqlite;
class DatabaseSqliteMock extends DatabaseSqlite {
private $lastQuery;