1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
<?php
/**
* This file contains database access object related constants.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
* @ingroup Database
*/
namespace Wikimedia\Rdbms;
use InvalidArgumentException;
/**
* Helper class for DAO classes
*
* @since 1.26
*/
class DBAccessObjectUtils implements IDBAccessObject {
/**
* @param int $bitfield
* @param int $flags IDBAccessObject::READ_* constant
* @return bool Bitfield has flag $flag set
*/
public static function hasFlags( $bitfield, $flags ) {
return ( $bitfield & $flags ) == $flags;
}
/**
* Get an appropriate DB index and options
*
* @deprecated since 1.43
* @param int $bitfield Bitfield of IDBAccessObject::READ_* constants
* @return array List of DB indexes and options in this order:
* - DB_PRIMARY or DB_REPLICA constant for the initial query
* - SELECT options array for the initial query
*/
public static function getDBOptions( $bitfield ) {
wfDeprecated( __METHOD__, '1.43' );
if ( self::hasFlags( $bitfield, IDBAccessObject::READ_LATEST_IMMUTABLE ) ) {
$index = DB_REPLICA; // override READ_LATEST if set
} elseif ( self::hasFlags( $bitfield, IDBAccessObject::READ_LATEST ) ) {
$index = DB_PRIMARY;
} else {
$index = DB_REPLICA;
}
$lockingOptions = [];
if ( self::hasFlags( $bitfield, IDBAccessObject::READ_EXCLUSIVE ) ) {
$lockingOptions[] = 'FOR UPDATE';
} elseif ( self::hasFlags( $bitfield, IDBAccessObject::READ_LOCKING ) ) {
$lockingOptions[] = 'LOCK IN SHARE MODE';
}
return [ $index, $lockingOptions ];
}
/**
* Takes $index from ::getDBOptions() and return proper Database object
*
* @deprecated since 1.42
*
* @param IConnectionProvider $dbProvider
* @param int $index either DB_REPLICA or DB_PRIMARY
* @return IReadableDatabase
*/
public static function getDBFromIndex( IConnectionProvider $dbProvider, int $index ): IReadableDatabase {
wfDeprecated( __METHOD__, '1.42' );
if ( $index === DB_PRIMARY ) {
return $dbProvider->getPrimaryDatabase();
} elseif ( $index === DB_REPLICA ) {
return $dbProvider->getReplicaDatabase();
} else {
throw new InvalidArgumentException( '$index must be either DB_REPLICA or DB_PRIMARY' );
}
}
/**
* @param IConnectionProvider $dbProvider
* @param int $recency IDBAccessObject::READ_* constant
* @return IReadableDatabase
* @since 1.42
*/
public static function getDBFromRecency( IConnectionProvider $dbProvider, int $recency ): IReadableDatabase {
if ( self::hasFlags( $recency, IDBAccessObject::READ_LATEST ) ) {
return $dbProvider->getPrimaryDatabase();
}
return $dbProvider->getReplicaDatabase();
}
}
/** @deprecated class alias since 1.43 */
class_alias( DBAccessObjectUtils::class, 'DBAccessObjectUtils' );
|