Removed these checks instead of fixing them, for the stated reasons:
* initEditCount.php: "instanceof DatabaseMysql" is not a correct way to
check if the database server is MySQL/MariaDB, because DatabaseMysql is
now a subclass of DatabaseMysqlBase, only used as a wrapper around the
deprecated mysql PHP extension (not the newer mysqli extension). The
check was intended for pre-4.1 versions of MySQL, which do not support
subqueries.
The effect of this change is to use single-query mode whenever there is
only one configured database server, even when using the mysqli PHP
extension, which would have been the original intent.
* fixBug20757.php: If the database server is not MySQL/MariaDB, the
$lowerLeft variable would remain undefined. The script was only intended
for use with MySQL, so the check was only necessary in order to support
pre-4.1 versions of MySQL, which require different SQL.
Follows-up
b74f88967bf090af.
Change-Id: I7f32aed4473e5ea39dc40449ddc0af5f9a10df16
avoids locking tables or lagging slaves with large updates;
calculates counts on a slave if possible.
-Background mode will be automatically used if the server is MySQL 4.0
-(which does not support subqueries) or if multiple servers are listed
+Background mode will be automatically used if multiple servers are listed
in the load balancer, usually indicating a replication environment.' );
$this->addDescription( 'Batch-recalculate user_editcount fields from the revision table' );
}
$dbver = $dbw->getServerVersion();
// Autodetect mode...
- $backgroundMode = wfGetLB()->getServerCount() > 1 ||
- ( $dbw instanceof DatabaseMysql );
-
if ( $this->hasOption( 'background' ) ) {
$backgroundMode = true;
} elseif ( $this->hasOption( 'quick' ) ) {
$backgroundMode = false;
+ } else {
+ $backgroundMode = wfGetLB()->getServerCount() > 1;
}
if ( $backgroundMode ) {
wfWaitForSlaves();
}
} else {
- // Subselect should work on modern MySQLs etc
$this->output( "Using single-query mode...\n" );
$sql = "UPDATE $user SET user_editcount=(SELECT COUNT(*) FROM $revision WHERE rev_user=user_id)";
$dbw->query( $sql );
$totalRevs = $dbr->selectField( 'text', 'MAX(old_id)', false, __METHOD__ );
- if ( $dbr->getType() == 'mysql' ) {
- // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function
- $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))';
- }
+ // In MySQL 4.1+, the binary field old_text has a non-working LOWER() function
+ $lowerLeft = 'LOWER(CONVERT(LEFT(old_text,22) USING latin1))';
while ( true ) {
print "ID: $startId / $totalRevs\r";