Page MenuHomePhabricator

Wikimedia\Rdbms\DBQueryError: Error 1052: Column 'ptrpt_tag_id' in where clause is ambiguousFunction: MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIdsQuery: SELECT COUNT(*) AS `rowcount` FROM (SELECT 1 FRO
Closed, ResolvedPublicPRODUCTION ERROR

Description

Error
labels.normalized_message
[{reqId}] {exception_url}   Wikimedia\Rdbms\DBQueryError: Error 1052: Column 'ptrpt_tag_id' in where clause is ambiguous
Function: MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIds
Query: SELECT  COUNT(*) AS `rowcount`  FROM (SELECT  1  FRO
error.stack_trace
from /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(1200)
#0 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(1184): Wikimedia\Rdbms\Database->getQueryException(string, integer, string, string)
#1 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(1158): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string)
#2 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(649): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#3 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(1347): Wikimedia\Rdbms\Database->query(Wikimedia\Rdbms\Query, string)
#4 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/Database.php(1408): Wikimedia\Rdbms\Database->select(array, array, array, string)
#5 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/DBConnRef.php(119): Wikimedia\Rdbms\Database->selectRowCount(array, string, array, string, array, array)
#6 /srv/mediawiki/php-1.42.0-wmf.13/includes/libs/rdbms/database/DBConnRef.php(381): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#7 /srv/mediawiki/php-1.42.0-wmf.13/extensions/PageTriage/includes/Api/ApiPageTriageList.php(492): Wikimedia\Rdbms\DBConnRef->selectRowCount(array, string, array, string, array, array)
#8 /srv/mediawiki/php-1.42.0-wmf.13/extensions/PageTriage/includes/PageTriageUtil.php(190): MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIds(array, boolean)
#9 /srv/mediawiki/php-1.42.0-wmf.13/extensions/PageTriage/includes/Api/ApiPageTriageStats.php(24): MediaWiki\Extension\PageTriage\PageTriageUtil::getArticleFilterStat(array)
#10 /srv/mediawiki/php-1.42.0-wmf.13/includes/api/ApiMain.php(1931): MediaWiki\Extension\PageTriage\Api\ApiPageTriageStats->execute()
#11 /srv/mediawiki/php-1.42.0-wmf.13/includes/api/ApiMain.php(908): ApiMain->executeAction()
#12 /srv/mediawiki/php-1.42.0-wmf.13/includes/api/ApiMain.php(879): ApiMain->executeActionWithErrorHandling()
#13 /srv/mediawiki/php-1.42.0-wmf.13/api.php(95): ApiMain->execute()
#14 /srv/mediawiki/php-1.42.0-wmf.13/api.php(48): wfApiMain()
#15 /srv/mediawiki/w/api.php(3): require(string)
#16 {main}
Impact
Notes

Details

Request URL
https://en.wikipedia.org/w/api.php?action=pagetriagestats&format=*&namespace=*&non_autoconfirmed_users=*&show_predicted_issues_copyvio=*&showdeleted=*&showothers=*&showunreviewed=*
Related Changes in Gerrit:

Event Timeline

Possibly related to T354894? The request URL matches the one on that task and it was opened just recently (though the logs here look like the underlying issue for that task).

Definitely related. Selecting the "copyvio" filter and any other filter on the new pages feed causes this issue to show up. The copyvio tag is JOINed separately from the rest of the tags, which in turn causes the reference to ptrpt_tag_id at ApiPageTriageList.php:577 to become ambiguous if both the copyvio tag and some other tag (newcomer, learner, etc.) have been requested.

This problem probably spiked since I was testing this around after seeing T354894. This has probably been broken since November 30, 2023, and only picked up now. Guess it's another thing we should write a test for!

Uploading a patch for this shortly. I'm keeping the convention of using $table = 'pagetriage_pt'; that was present prior to the aforementioned commit, so that codesearches for 'pagetriage_pt' will show up this usage as well.

Change 989955 had a related patch set uploaded (by Chlod Alejandro; author: Chlod Alejandro):

[mediawiki/extensions/PageTriage@master] ApiPageTriageList: disambiguate ptrpt_tag_id in tag query

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

I can replicate this in production by visiting https://en.wikipedia.org/w/api.php?action=pagetriagestats&show_predicted_issues_none=1&non_autoconfirmed_users=1, but I can't replicate in my localhost environment. I wonder what's different.

I tried writing an API test against the master branch (before your patch was merged), but it passes. If the test worked, I'd expect it to fail. Hmm.

@Chlod, do you still have the failing SQL query in your notes? If so can you post it here so I can spy on my localhost SQL query and see what's different?

	/**
	 * Regression test for T354894
	 */
	public function testPredictedIssuesNoneAndNonAutoconfirmedFilterCombination() {
		$this->overrideConfigValue( 'PageTriageEnableCurationToolbar', true );
		$this->overrideConfigValue( 'PageTriageNoIndexUnreviewedNewArticles', true );
		$this->overrideConfigValue( 'PageTriageDraftNamespaceId', 118 );
		$this->overrideConfigValue( 'PageTriageEnableOresFilters', true );
		$this->overrideConfigValue( 'PageTriageEnableCopyvio', true );
		$this->overrideConfigValue( 'PageTriageMaxAge', 90 );
		$this->makeDraft( 'AfC stats test page' );
		$this->makeDraft( 'AfC stats test page 2' );
		$this->insertPage( 'PageTriageTest', '' );
		$this->insertPage( 'PageTriageTest 2', '' );
		$response = $this->doApiRequest( [
			'action' => 'pagetriagestats',
			'show_predicted_issues_none' => 1,
			'non_autoconfirmed_users' => 1,
		] );
		print_r($response);
		$this->assertEquals(
			'success',
			$response[0]['pagetriagestats']['result']
		);
	}

You'll need the ORES extension installed and active, if it isn't already. The copyvio tag is, for some reason, attached to ORES being present in the wiki. Without it, PageTriage just skips searching for the copyvio tag entirely. Setup is here, to save you a few clicks.

Here's the relevant log lines:

[rdbms] MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIds [0.317ms] 127.0.0.1: SELECT  COUNT(*) AS `rowcount`  FROM (SELECT  1  FROM `pagetriage_page` JOIN `page` ON ((ptrp_page_id = page_id)) JOIN `pagetriage_page_tags` `pagetriage_pt` ON ((pagetriage_pt.ptrpt_page_id = ptrp_page_id)) LEFT JOIN `pagetriage_page_tags` `pagetriage_page_tags_copyvio` ON ((pagetriage_page_tags_copyvio.ptrpt_page_id = ptrp_page_id) AND pagetriage_page_tags_copyvio.ptrpt_tag_id = '20')   WHERE (ptrp_reviewed = 0) AND (page_is_redirect = 0) AND page_namespace = 0 AND (((ptrpt_tag_id = '13' AND ptrpt_value = 0))) AND ((pagetriage_page_tags_copyvio.ptrpt_value IS NOT NULL)) AND (ptrp_page_id IS NOT NULL)  GROUP BY ptrp_page_id HAVING COUNT(*) = 1 ) `tmp_count`     
[rdbms] Error 1052 from MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIds, Column 'ptrpt_tag_id' in where clause is ambiguous SELECT  COUNT(*) AS `rowcount`  FROM (SELECT  1  FROM `pagetriage_page` JOIN `page` ON ((ptrp_page_id = page_id)) JOIN `pagetriage_page_tags` `pagetriage_pt` ON ((pagetriage_pt.ptrpt_page_id = ptrp_page_id)) LEFT JOIN `pagetriage_page_tags` `pagetriage_page_tags_copyvio` ON ((pagetriage_page_tags_copyvio.ptrpt_page_id = ptrp_page_id) AND pagetriage_page_tags_copyvio.ptrpt_tag_id = '20')   WHERE (ptrp_reviewed = 0) AND (page_is_redirect = 0) AND page_namespace = 0 AND (((ptrpt_tag_id = '13' AND ptrpt_value = 0))) AND ((pagetriage_page_tags_copyvio.ptrpt_value IS NOT NULL)) AND (ptrp_page_id IS NOT NULL)  GROUP BY ptrp_page_id HAVING COUNT(*) = 1 ) `tmp_count`      127.0.0.1
#0 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\Database.php(1158): Wikimedia\Rdbms\Database->getQueryExceptionAndLog(string, integer, string, string)
#1 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\Database.php(649): Wikimedia\Rdbms\Database->reportQueryError(string, integer, string, string, boolean)
#2 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\Database.php(1347): Wikimedia\Rdbms\Database->query(Wikimedia\Rdbms\Query, string)
#3 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\Database.php(1406): Wikimedia\Rdbms\Database->select(array, array, array, string)
#4 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\DBConnRef.php(119): Wikimedia\Rdbms\Database->selectRowCount(array, string, array, string, array, array)
#5 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\libs\rdbms\database\DBConnRef.php(381): Wikimedia\Rdbms\DBConnRef->__call(string, array)
#6 D:\PROGRAMMING\Wikimedia\mediawiki\extensions\PageTriage\includes\Api\ApiPageTriageList.php(491): Wikimedia\Rdbms\DBConnRef->selectRowCount(array, string, array, string, array, array)
#7 D:\PROGRAMMING\Wikimedia\mediawiki\extensions\PageTriage\includes\PageTriageUtil.php(190): MediaWiki\Extension\PageTriage\Api\ApiPageTriageList::getPageIds(array, boolean)
#8 D:\PROGRAMMING\Wikimedia\mediawiki\extensions\PageTriage\includes\Api\ApiPageTriageStats.php(24): MediaWiki\Extension\PageTriage\PageTriageUtil::getArticleFilterStat(array)
#9 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\api\ApiMain.php(1931): MediaWiki\Extension\PageTriage\Api\ApiPageTriageStats->execute()
#10 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\api\ApiMain.php(908): ApiMain->executeAction()
#11 D:\PROGRAMMING\Wikimedia\mediawiki\core\includes\api\ApiMain.php(879): ApiMain->executeActionWithErrorHandling()
#12 D:\PROGRAMMING\Wikimedia\mediawiki\core\api.php(95): ApiMain->execute()
#13 D:\PROGRAMMING\Wikimedia\mediawiki\core\api.php(48): wfApiMain()
#14 {main}
[rdbms] MWExceptionHandler::rollbackPrimaryChanges [0.205ms] 127.0.0.1: ROLLBACK
[rdbms] MWExceptionHandler::rollbackPrimaryChanges: acknowledged server-side transaction loss on 127.0.0.1

Change 989955 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] ApiPageTriageList: disambiguate ptrpt_tag_id in tag query

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

Change 989977 had a related patch set uploaded (by Novem Linguae; author: Novem Linguae):

[mediawiki/extensions/PageTriage@master] add regression test

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

Change 989977 merged by jenkins-bot:

[mediawiki/extensions/PageTriage@master] Add regression test for database error

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