Use SelectQueryBuilder instead of IDatabase::select()

Bug: T311866
Change-Id: I5fa509e78ab18b003d67fd7c84ba2fcd857b0bde
This commit is contained in:
Derick Alangi 2022-07-28 22:10:02 +01:00
parent 1fbb73ef54
commit 9c13ab45b1
5 changed files with 62 additions and 57 deletions

View file

@ -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();

View file

@ -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() : '';

View file

@ -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[] = [

View file

@ -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;

View file

@ -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;
}
/**