Page MenuHomePhabricator

Watchlist label RC filtering backend
Closed, ResolvedPublic

Description

  • Add WatchlistLabelCondition
  • Add ChangesListQuery::requireWatchlistLabelIds()
  • Call it from SpecialWatchlist::modifyQuery

Details

Related Changes in Gerrit:

Event Timeline

Change #1200226 had a related patch set uploaded (by Tim Starling; author: Tim Starling):

[mediawiki/core@master] recentchanges: Add watchlist label filter

https://gerrit.wikimedia.org/r/1200226

Change #1200226 merged by jenkins-bot:

[mediawiki/core@master] recentchanges: Add watchlist label filter

https://gerrit.wikimedia.org/r/1200226

With a URL such as ?translations=filter&wllabel=25%3B13&limit=250&days=7&enhanced=1&urlversion=2 I'm getting this error:

Error 1055: 'mediawiki_wiki1_46.recentchanges_actor.actor_user' isn't in GROUP BY
Function: MediaWiki\Specials\SpecialWatchlist::buildQuery
Query: SELECT DISTINCT recentchanges_actor.actor_user AS `rc_user`,recentchanges_actor.actor_name AS `rc_user_text`,rc_bot,rc_minor,rc_this_oldid,page_latest,rc_source,rc_log_type,rc_patrolled,rc_timestamp,rc_namespace,rc_title,wl_notificationtimestamp,(SELECT GROUP_CONCAT(ctd_name SEPARATOR ',') FROM `change_tag` JOIN `change_tag_def` ON ((ct_tag_id=ctd_id)) WHERE (ct_rc_id=rc_id) ) AS `ts_tags`,rc_id,rc_cur_id,rc_last_oldid,rc_ip,rc_old_len,rc_new_len,rc_deleted,rc_logid,rc_log_action,rc_params,rc_actor,recentchanges_comment.comment_text AS `rc_comment_text`,recentchanges_comment.comment_data AS `rc_comment_data`,recentchanges_comment.comment_id AS `rc_comment_id`,we_expiry FROM `recentchanges` STRAIGHT_JOIN `actor` `recentchanges_actor` ON ((actor_id=rc_actor)) STRAIGHT_JOIN `comment` `recentchanges_comment` ON ((comment_id=rc_comment_id)) LEFT JOIN `page` ON ((page_id=rc_cur_id)) JOIN `watchlist` ON ((wl_namespace=rc_namespace) AND (wl_title=rc_title) AND wl_user = 2) LEFT JOIN `watchlist_expiry` ON ((we_item=wl_id)) JOIN `watchlist_label_member` ON ((wlm_item=wl_id)) WHERE ((we_expiry IS NULL OR we_expiry > '20251126014953')) AND (wlm_label IN (13,25)) AND (rc_timestamp >= '20251119014953') AND (rc_namespace NOT IN (1198,1199)) GROUP BY rc_timestamp,rc_id ORDER BY rc_timestamp DESC,rc_id DESC LIMIT 250

Backtrace:

from mediawiki/includes/libs/Rdbms/Database/Database.php(1226)
#0 mediawiki/includes/libs/Rdbms/Database/Database.php(1210): Wikimedia\Rdbms\Database->getQueryException()
#1 mediawiki/includes/libs/Rdbms/Database/Database.php(1184): Wikimedia\Rdbms\Database->getQueryExceptionAndLog()
#2 mediawiki/includes/libs/Rdbms/Database/Database.php(641): Wikimedia\Rdbms\Database->reportQueryError()
#3 mediawiki/includes/libs/Rdbms/Database/Database.php(1364): Wikimedia\Rdbms\Database->query()
#4 mediawiki/includes/libs/Rdbms/Database/DBConnRef.php(127): Wikimedia\Rdbms\Database->select()
#5 mediawiki/includes/libs/Rdbms/Database/DBConnRef.php(384): Wikimedia\Rdbms\DBConnRef->__call()
#6 mediawiki/includes/libs/Rdbms/QueryBuilder/SelectQueryBuilder.php(761): Wikimedia\Rdbms\DBConnRef->select()
#7 mediawiki/includes/RecentChanges/ChangesListQuery/ChangesListQuery.php(1367): Wikimedia\Rdbms\SelectQueryBuilder->fetchResultSet()
#8 mediawiki/includes/RecentChanges/ChangesListQuery/ChangesListQuery.php(1057): MediaWiki\RecentChanges\ChangesListQuery\ChangesListQuery->maybeEmulateUnion()
#9 mediawiki/includes/SpecialPage/ChangesListSpecialPage.php(807): MediaWiki\RecentChanges\ChangesListQuery\ChangesListQuery->fetchResult()
#10 mediawiki/includes/SpecialPage/ChangesListSpecialPage.php(483): MediaWiki\SpecialPage\ChangesListSpecialPage->getQueryResult()
#11 mediawiki/includes/Specials/SpecialWatchlist.php(156): MediaWiki\SpecialPage\ChangesListSpecialPage->execute()
#12 mediawiki/includes/SpecialPage/SpecialPage.php(711): MediaWiki\Specials\SpecialWatchlist->execute()
#13 mediawiki/includes/SpecialPage/SpecialPageFactory.php(1743): MediaWiki\SpecialPage\SpecialPage->run()
#14 mediawiki/includes/Actions/ActionEntryPoint.php(499): MediaWiki\SpecialPage\SpecialPageFactory->executePath()
#15 mediawiki/includes/Actions/ActionEntryPoint.php(143): MediaWiki\Actions\ActionEntryPoint->performRequest()
#16 mediawiki/includes/MediaWikiEntryPoint.php(184): MediaWiki\Actions\ActionEntryPoint->execute()
#17 mediawiki/index.php(44): MediaWiki\MediaWikiEntryPoint->run()
#18 {main}

Error 1055: 'mediawiki_wiki1_46.recentchanges_actor.actor_user' isn't in GROUP BY

I just followed the implementation of change tags, including T406676. If you set $wgSQLMode = '', like production, then it should work. We set ONLY_FULL_GROUP_BY in DevelopmentSettings.php so that developers will know when they are breaking PostgreSQL. The feature is indeed broken on PostgreSQL.

Samwilson changed the task status from Open to In Progress.Dec 5 2025, 5:20 AM

Erm ... so can we consider this done? Or @tstarling are you fixing this so it'll work in postgres?