镜像自地址
https://github.com/wikimedia/mediawiki-extensions-UploadWizard.git
已同步 2024-05-29 13:42:35 +08:00
Migrate to IReadableDatabase::newSelectQueryBuilder
Also use expression builder to avoid raw sql Bug: T312502 Change-Id: I92ec5b523ce7ecbf9bf3cdc6394a947959f48535
这个提交包含在:
父节点
49b29675eb
当前提交
0be826b796
|
@ -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" );
|
||||
|
|
正在加载...
在新工单中引用
屏蔽一个用户