Migrate to IReadableDatabase::newSelectQueryBuilder

Also use expression builder to avoid raw sql

Bug: T312502
Change-Id: I92ec5b523ce7ecbf9bf3cdc6394a947959f48535
这个提交包含在:
Umherirrender 2024-04-26 21:31:30 +02:00
父节点 49b29675eb
当前提交 0be826b796
共有 4 个文件被更改,包括 41 次插入50 次删除

查看文件

@ -56,8 +56,7 @@ class ApiQueryAllCampaigns extends ApiQueryBase {
if ( $params['continue'] !== null ) {
$from_id = (int)$params['continue'];
// Not SQL Injection, since we already force this to be an integer
$this->addWhere( "campaign_id >= $from_id" );
$this->addWhere( $this->getDB()->expr( 'campaign_id', '>=', $from_id ) );
}
$res = $this->select( __METHOD__ );

查看文件

@ -13,6 +13,7 @@ use ParserOptions;
use RequestContext;
use WANObjectCache;
use Wikimedia\Rdbms\Database;
use Wikimedia\Rdbms\SelectQueryBuilder;
/**
* Class that represents a single upload campaign.
@ -168,21 +169,15 @@ class Campaign {
function ( $oldValue, &$ttl, array &$setOpts ) use ( $fname, $dbr ) {
$setOpts += Database::getCacheSetOptions( $dbr );
$result = $dbr->select(
[ 'categorylinks', 'page', 'image' ],
[ 'count' => 'COUNT(DISTINCT img_actor)' ],
[ 'cl_to' => $this->getTrackingCategory()->getDBkey(), 'cl_type' => 'file' ],
$fname,
[
'USE INDEX' => [ 'categorylinks' => 'cl_timestamp' ]
],
[
'page' => [ 'INNER JOIN', 'cl_from=page_id' ],
'image' => [ 'INNER JOIN', 'page_title=img_name' ]
]
);
return $result->current()->count;
return $dbr->newSelectQueryBuilder()
->select( [ 'count' => 'COUNT(DISTINCT img_actor)' ] )
->from( 'categorylinks' )
->join( 'page', null, 'cl_from=page_id' )
->join( 'image', null, 'page_title=img_name' )
->where( [ 'cl_to' => $this->getTrackingCategory()->getDBkey(), 'cl_type' => 'file' ] )
->caller( $fname )
->useIndex( [ 'categorylinks' => 'cl_timestamp' ] )
->fetchField();
}
);
}
@ -193,18 +188,16 @@ class Campaign {
* @return Title[]
*/
public function getUploadedMedia( $limit = 24 ) {
$result = $this->dbr->select(
[ 'categorylinks', 'page' ],
[ 'cl_from', 'page_namespace', 'page_title' ],
[ 'cl_to' => $this->getTrackingCategory()->getDBkey(), 'cl_type' => 'file' ],
__METHOD__,
[
'ORDER BY' => 'cl_timestamp DESC',
'LIMIT' => $limit,
'USE INDEX' => [ 'categorylinks' => 'cl_timestamp' ]
],
[ 'page' => [ 'INNER JOIN', 'cl_from=page_id' ] ]
);
$result = $this->dbr->newSelectQueryBuilder()
->select( [ 'cl_from', 'page_namespace', 'page_title' ] )
->from( 'categorylinks' )
->join( 'page', null, 'cl_from=page_id' )
->where( [ 'cl_to' => $this->getTrackingCategory()->getDBkey(), 'cl_type' => 'file' ] )
->orderBy( 'cl_timestamp', SelectQueryBuilder::SORT_DESC )
->limit( $limit )
->useIndex( [ 'categorylinks' => 'cl_timestamp' ] )
->caller( __METHOD__ )
->fetchResultSet();
$images = [];
foreach ( $result as $row ) {

查看文件

@ -27,19 +27,19 @@ class SpecialCampaigns extends SpecialPage {
$limit = 50;
$cond = [ 'campaign_enabled = 1' ];
$cond = [ 'campaign_enabled' => 1 ];
if ( $start !== null ) {
$cond[] = 'campaign_id > ' . $start;
$cond[] = $this->dbr->expr( 'campaign_id', '>', $start );
}
$res = $this->dbr->select(
'uw_campaigns',
[ 'campaign_id', 'campaign_name' ],
$cond,
__METHOD__,
[ 'LIMIT' => $limit + 1 ]
);
$res = $this->dbr->newSelectQueryBuilder()
->select( [ 'campaign_id', 'campaign_name' ] )
->from( 'uw_campaigns' )
->where( $cond )
->limit( $limit + 1 )
->caller( __METHOD__ )
->fetchResultSet();
$this->getOutput()->setPageTitleMsg( $this->msg( 'mwe-upload-campaigns-list-title' ) );
$this->getOutput()->addModuleStyles( [ 'ext.uploadWizard.uploadCampaign.display' ] );

查看文件

@ -108,12 +108,12 @@ class MigrateCampaigns extends Maintenance {
private function getConfigFromDB( $id ) {
$config = [];
$confProps = $this->dbr->select(
'uw_campaign_conf',
[ 'cc_property', 'cc_value' ],
[ 'cc_campaign_id' => $id ],
__METHOD__
);
$confProps = $this->dbr->newSelectQueryBuilder()
->select( [ 'cc_property', 'cc_value' ] )
->from( 'uw_campaign_conf' )
->where( [ 'cc_campaign_id' => $id ] )
->caller( __METHOD__ )
->fetchResultSet();
foreach ( $confProps as $confProp ) {
if ( in_array( $confProp->cc_property, self::OLD_NUMBER_CONFIGS ) ) {
@ -258,12 +258,11 @@ class MigrateCampaigns extends Maintenance {
$username = $this->getOption( 'user', 'Maintenance script' );
$this->dbr = $services->getDBLoadBalancerFactory()->getPrimaryDatabase();
$campaigns = $this->dbr->select(
'uw_campaigns',
'*',
[],
__METHOD__
);
$campaigns = $this->dbr->newSelectQueryBuilder()
->select( '*' )
->from( 'uw_campaigns' )
->caller( __METHOD__ )
->fetchResultSet();
if ( !$campaigns->numRows() ) {
$this->output( "Nothing to migrate.\n" );