Use SelectQueryBuilder instead of IDatabase::select()
Bug: T311866 Change-Id: I5fa509e78ab18b003d67fd7c84ba2fcd857b0bde
This commit is contained in:
parent
1fbb73ef54
commit
9c13ab45b1
5 changed files with 62 additions and 57 deletions
|
|
@ -26,6 +26,7 @@ use MediaWiki\MainConfigNames;
|
|||
use MediaWiki\MediaWikiServices;
|
||||
use MediaWiki\Page\PageIdentity;
|
||||
use MediaWiki\Page\PageReference;
|
||||
use Wikimedia\Rdbms\SelectQueryBuilder;
|
||||
|
||||
class CategoryViewer extends ContextSource {
|
||||
use ProtectedHookAccessorTrait;
|
||||
|
|
@ -380,9 +381,8 @@ class CategoryViewer extends ContextSource {
|
|||
$this->flip[$type] = true;
|
||||
}
|
||||
|
||||
$res = $dbr->select(
|
||||
[ 'page', 'categorylinks', 'category' ],
|
||||
array_merge(
|
||||
$queryBuilder = $dbr->newSelectQueryBuilder();
|
||||
$queryBuilder->select( array_merge(
|
||||
LinkCache::getSelectFields(),
|
||||
[
|
||||
'cl_sortkey',
|
||||
|
|
@ -394,22 +394,28 @@ class CategoryViewer extends ContextSource {
|
|||
'cl_sortkey_prefix',
|
||||
'cl_collation'
|
||||
]
|
||||
),
|
||||
array_merge( [ 'cl_to' => $this->page->getDBkey() ], $extraConds ),
|
||||
__METHOD__,
|
||||
[
|
||||
'USE INDEX' => [ 'categorylinks' => 'cl_sortkey' ],
|
||||
'LIMIT' => $this->limit + 1,
|
||||
'ORDER BY' => $this->flip[$type] ? 'cl_sortkey DESC' : 'cl_sortkey',
|
||||
],
|
||||
[
|
||||
'categorylinks' => [ 'JOIN', 'cl_from = page_id' ],
|
||||
'category' => [ 'LEFT JOIN', [
|
||||
'cat_title = page_title',
|
||||
'page_namespace' => NS_CATEGORY
|
||||
] ]
|
||||
]
|
||||
);
|
||||
) )
|
||||
->from( 'page' )
|
||||
->where( [ 'cl_to' => $this->page->getDBkey() ] )
|
||||
->andWhere( $extraConds )
|
||||
->useIndex( [ 'categorylinks' => 'cl_sortkey' ] );
|
||||
|
||||
if ( $this->flip[$type] ) {
|
||||
$queryBuilder->orderBy( 'cl_sortkey', SelectQueryBuilder::SORT_DESC );
|
||||
} else {
|
||||
$queryBuilder->orderBy( 'cl_sortkey' );
|
||||
}
|
||||
|
||||
$queryBuilder
|
||||
->join( 'categorylinks', null, [ 'cl_from = page_id' ] )
|
||||
->leftJoin( 'category', null, [
|
||||
'cat_title = page_title',
|
||||
'page_namespace' => NS_CATEGORY
|
||||
] )
|
||||
->limit( $this->limit + 1 )
|
||||
->caller( __METHOD__ );
|
||||
|
||||
$res = $queryBuilder->fetchResultSet();
|
||||
|
||||
$this->getHookRunner()->onCategoryViewer__doCategoryQuery( $type, $res );
|
||||
$linkCache = MediaWikiServices::getInstance()->getLinkCache();
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ use MediaWiki\MediaWikiServices;
|
|||
use MediaWiki\Permissions\Authority;
|
||||
use MediaWiki\Revision\RevisionRecord;
|
||||
use Wikimedia\IPUtils;
|
||||
use Wikimedia\Rdbms\SelectQueryBuilder;
|
||||
|
||||
/**
|
||||
* Some internal bits split of from Skin.php. These functions are used
|
||||
|
|
@ -1858,18 +1859,16 @@ class Linker {
|
|||
|
||||
// Up to the value of $wgShowRollbackEditCount revisions are counted
|
||||
$revQuery = MediaWikiServices::getInstance()->getRevisionStore()->getQueryInfo();
|
||||
$res = $dbr->select(
|
||||
$revQuery['tables'],
|
||||
[ 'rev_user_text' => $revQuery['fields']['rev_user_text'], 'rev_deleted' ],
|
||||
[ 'rev_page' => $revRecord->getPageId() ],
|
||||
__METHOD__,
|
||||
[
|
||||
'USE INDEX' => [ 'revision' => 'rev_page_timestamp' ],
|
||||
'ORDER BY' => [ 'rev_timestamp DESC', 'rev_id DESC' ],
|
||||
'LIMIT' => $showRollbackEditCount + 1
|
||||
],
|
||||
$revQuery['joins']
|
||||
);
|
||||
$res = $dbr->newSelectQueryBuilder()
|
||||
->select( [ 'rev_user_text' => $revQuery['fields']['rev_user_text'], 'rev_deleted' ] )
|
||||
->tables( $revQuery['tables'] )
|
||||
->where( [ 'rev_page' => $revRecord->getPageId() ] )
|
||||
->joinConds( $revQuery['joins'] )
|
||||
->useIndex( [ 'revision' => 'rev_page_timestamp' ] )
|
||||
->orderBy( [ 'rev_timestamp', 'rev_id' ], SelectQueryBuilder::SORT_DESC )
|
||||
->limit( $showRollbackEditCount + 1 )
|
||||
->caller( __METHOD__ )
|
||||
->fetchResultSet();
|
||||
|
||||
$revUser = $revRecord->getUser( RevisionRecord::RAW );
|
||||
$revUserText = $revUser ? $revUser->getName() : '';
|
||||
|
|
|
|||
|
|
@ -686,13 +686,13 @@ class MovePage {
|
|||
|
||||
if ( $protected ) {
|
||||
# Protect the redirect title as the title used to be...
|
||||
$res = $dbw->select(
|
||||
'page_restrictions',
|
||||
[ 'pr_type', 'pr_level', 'pr_cascade', 'pr_expiry' ],
|
||||
[ 'pr_page' => $pageid ],
|
||||
__METHOD__,
|
||||
'FOR UPDATE'
|
||||
);
|
||||
$res = $dbw->newSelectQueryBuilder()
|
||||
->select( [ 'pr_type', 'pr_level', 'pr_cascade', 'pr_expiry' ] )
|
||||
->from( 'page_restrictions' )
|
||||
->where( [ 'pr_page' => $pageid ] )
|
||||
->forUpdate()
|
||||
->caller( __METHOD__ )
|
||||
->fetchResultSet();
|
||||
$rowsInsert = [];
|
||||
foreach ( $res as $row ) {
|
||||
$rowsInsert[] = [
|
||||
|
|
|
|||
|
|
@ -240,15 +240,15 @@ class SiteStats {
|
|||
* @return stdClass
|
||||
*/
|
||||
private static function doLoadFromDB( IDatabase $db ) {
|
||||
$rows = $db->select(
|
||||
'site_stats',
|
||||
self::selectFields(),
|
||||
'*',
|
||||
__METHOD__
|
||||
);
|
||||
$fields = self::selectFields();
|
||||
$rows = $db->newSelectQueryBuilder()
|
||||
->select( $fields )
|
||||
->from( 'site_stats' )
|
||||
->caller( __METHOD__ )
|
||||
->fetchResultSet();
|
||||
$finalRow = new stdClass();
|
||||
foreach ( $rows as $row ) {
|
||||
foreach ( self::selectFields() as $field ) {
|
||||
foreach ( $fields as $field ) {
|
||||
$finalRow->$field = $finalRow->$field ?? 0;
|
||||
if ( $row->$field ) {
|
||||
$finalRow->$field += $row->$field;
|
||||
|
|
|
|||
|
|
@ -354,18 +354,18 @@ class HistoryAction extends FormlessAction {
|
|||
$page_id = $this->getWikiPage()->getId();
|
||||
|
||||
$revQuery = MediaWikiServices::getInstance()->getRevisionStore()->getQueryInfo();
|
||||
return $dbr->select(
|
||||
$revQuery['tables'],
|
||||
$revQuery['fields'],
|
||||
array_merge( [ 'rev_page' => $page_id ], $offsets ),
|
||||
__METHOD__,
|
||||
[
|
||||
'ORDER BY' => "rev_timestamp $dirs",
|
||||
'USE INDEX' => [ 'revision' => 'rev_page_timestamp' ],
|
||||
'LIMIT' => $limit
|
||||
],
|
||||
$revQuery['joins']
|
||||
);
|
||||
|
||||
$res = $dbr->newSelectQueryBuilder()
|
||||
->queryInfo( $revQuery )
|
||||
->where( [ 'rev_page' => $page_id ] )
|
||||
->andWhere( $offsets )
|
||||
->useIndex( [ 'revision' => 'rev_page_timestamp' ] )
|
||||
->orderBy( [ 'rev_timestamp' ], $dirs )
|
||||
->limit( $limit )
|
||||
->caller( __METHOD__ )
|
||||
->fetchResultSet();
|
||||
|
||||
return $res;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue