Ia9d2ff00 introduced two incompatibilities with what the base classes
were trying to do:
* The $descending flag passed to buildQueryInfo() does not actually mean
DESC if $this->mIsBackwards is set. The old code just blindly assumed
that was the case.
* For paging to work right, we must return all $limit rows, we can't
filter out users with 0 actions. Thus we need to LEFT JOIN
recentchanges (and move some conditions around to cope)..
Bug: T217525
Change-Id: Iba105a31ff61fbb14931bf8903538bfe7b0ba48b
// Outer query to select the recent edit counts for the selected active users
$tables = [ 'qcc_users' => $subquery, 'recentchanges' ];
// Outer query to select the recent edit counts for the selected active users
$tables = [ 'qcc_users' => $subquery, 'recentchanges' ];
- $jconds = [ 'recentchanges' => [
- 'JOIN', $useActor ? 'rc_actor = actor_id' : 'rc_user_text = qcc_title',
- ] ];
- $conds = [
+ $jconds = [ 'recentchanges' => [ 'LEFT JOIN', [
+ $useActor ? 'rc_actor = actor_id' : 'rc_user_text = qcc_title',
'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ), // Don't count wikidata.
'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE ), // Don't count categorization changes.
'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' ),
'rc_timestamp >= ' . $dbr->addQuotes( $timestamp ),
'rc_type != ' . $dbr->addQuotes( RC_EXTERNAL ), // Don't count wikidata.
'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE ), // Don't count categorization changes.
'rc_log_type IS NULL OR rc_log_type != ' . $dbr->addQuotes( 'newusers' ),
'rc_timestamp >= ' . $dbr->addQuotes( $timestamp ),
return [
'tables' => $tables,
return [
'tables' => $tables,
'qcc_title',
'user_name' => 'qcc_title',
'user_id' => 'user_id',
'qcc_title',
'user_name' => 'qcc_title',
'user_id' => 'user_id',
- 'recentedits' => 'COUNT(*)'
+ 'recentedits' => 'COUNT(rc_id)'
],
'options' => [ 'GROUP BY' => [ 'qcc_title' ] ],
'conds' => $conds,
],
'options' => [ 'GROUP BY' => [ 'qcc_title' ] ],
'conds' => $conds,
$sortColumns = array_merge( [ $this->mIndexField ], $this->mExtraSortFields );
if ( $descending ) {
$sortColumns = array_merge( [ $this->mIndexField ], $this->mExtraSortFields );
if ( $descending ) {
$orderBy = $sortColumns;
$operator = $this->mIncludeOffset ? '>=' : '>';
} else {
$orderBy = $sortColumns;
$operator = $this->mIncludeOffset ? '>=' : '>';
} else {
$orderBy = [];
foreach ( $sortColumns as $col ) {
$orderBy[] = $col . ' DESC';
$orderBy = [];
foreach ( $sortColumns as $col ) {
$orderBy[] = $col . ' DESC';
}
$info = $this->getQueryInfo( [
'limit' => intval( $limit ),
}
$info = $this->getQueryInfo( [
'limit' => intval( $limit ),
- 'order' => $descending ? 'DESC' : 'ASC',
'conds' =>
$offset != '' ? [ $this->mIndexField . $operator . $this->mDb->addQuotes( $offset ) ] : [],
] );
'conds' =>
$offset != '' ? [ $this->mIndexField . $operator . $this->mDb->addQuotes( $offset ) ] : [],
] );