Page MenuHomePhabricator

Error 1054: Unknown column 'change_tag.ct_tag_id' in 'where clause' Function: IndexPager::buildQueryInfo (LogPager)
Closed, ResolvedPublic

Description

[2022-12-23T03:19:10.186189+00:00] exception.ERROR: [77b3e98f4255562131efd3dc] /wiki/Special:Log?type=messagebundle&user=&page=Translations%3AUser%3AAbijeet_Patro%2FMessageBundle15Jun-Moved%2Fdescription%2
Fen&wpdate=&tagfilter=OAuth+CID%3A+4&tagInvert=1&wpfilters%5B%5D=newusers&wpFormIdentifier=logeventslist   Wikimedia\Rdbms\DBQueryError: Error 1054: Unknown column 'change_tag.ct_tag_id' in 'where clause'
Function: IndexPager::buildQueryInfo (LogPager)
Query: SELECT  log_id,log_type,log_action,log_timestamp,log_namespace,log_title,log_params,log_deleted,user_id,user_name,log_actor,logging_actor.actor_user AS `log_user`,logging_actor.actor_name AS `log_us
er_text`,comment_log_comment.comment_text AS `log_comment_text`,comment_log_comment.comment_data AS `log_comment_data`,comment_log_comment.comment_id AS `log_comment_cid`,(SELECT  GROUP_CONCAT(ctd_name SEP
ARATOR ',')  FROM `bw_change_tag` JOIN `bw_change_tag_def` ON ((ct_tag_id=ctd_id))   WHERE ct_log_id=log_id  ) AS `ts_tags`  FROM `bw_logging` JOIN `bw_actor` `logging_actor` ON ((actor_id=log_actor)) LEFTJOIN `bw_user` ON ((user_id=logging_actor.actor_user)) JOIN `bw_comment` `comment_log_comment` ON ((comment_log_comment.comment_id = log_comment_id)) LEFT JOIN `bw_change_tag` ON ((ct_log_id=log_id) AND ct_tag_id = 14)   WHERE (log_type NOT IN ('abusefilterprivatedetails','oath','suppress')) AND log_type = 'messagebundle' AND log_namespace = 1198 AND log_title = 'User:Abijeet_Patro/MessageBundle15Jun-Moved/description/en' AND ((log_deleted & 1) = 0) AND (change_tag.ct_tag_id IS NULL)  ORDER BY log_timestamp DESC,log_id DESC LIMIT 51
{"exception":"[object] (Wikimedia\\Rdbms\\DBQueryError(code: 0): Error 1054: Unknown column 'change_tag.ct_tag_id' in 'where clause'
Function: IndexPager::buildQueryInfo (LogPager)
Query: SELECT  log_id,log_type,log_action,log_timestamp,log_namespace,log_title,log_params,log_deleted,user_id,user_name,log_actor,logging_actor.actor_user AS `log_user`,logging_actor.actor_name AS `log_user_text`,comment_log_comment.comment_text AS `log_comment_text`,comment_log_comment.comment_data AS `log_comment_data`,comment_log_comment.comment_id AS `log_comment_cid`,(SELECT  GROUP_CONCAT(ctd_name SEPARATOR ',')  FROM `bw_change_tag` JOIN `bw_change_tag_def` ON ((ct_tag_id=ctd_id))   WHERE ct_log_id=log_id  ) AS `ts_tags`  FROM `bw_logging` JOIN `bw_actor` `logging_actor` ON ((actor_id=log_actor)) LEFTJOIN `bw_user` ON ((user_id=logging_actor.actor_user)) JOIN `bw_comment` `comment_log_comment` ON ((comment_log_comment.comment_id = log_comment_id)) LEFT JOIN `bw_change_tag` ON ((ct_log_id=log_id) AND ct_tag_id = 14)   WHERE (log_type NOT IN ('abusefilterprivatedetails','oath','suppress')) AND log_type = 'messagebundle' AND log_namespace = 1198 AND log_title = 'User:Abijeet_Patro/MessageBundle15Jun-Moved/description/en' AND ((log_deleted & 1) = 0) AND (change_tag.ct_tag_id IS NULL)  ORDER BY log_timestamp DESC,log_id DESC LIMIT 51
at /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/Database.php:1543)
[stacktrace]
#0 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/Database.php(1527): Wikimedia\\Rdbms\\Database->getQueryException()
#1 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/Database.php(1501): Wikimedia\\Rdbms\\Database->getQueryExceptionAndLog()
#2 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/Database.php(874): Wikimedia\\Rdbms\\Database->reportQueryError()
#3 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/Database.php(1635): Wikimedia\\Rdbms\\Database->query()
#4 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/DBConnRef.php(119): Wikimedia\\Rdbms\\Database->select()
#5 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/libs/rdbms/database/DBConnRef.php(338): Wikimedia\\Rdbms\\DBConnRef->__call()
#6 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/pager/IndexPager.php(459): Wikimedia\\Rdbms\\DBConnRef->select()
#7 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/pager/IndexPager.php(281): IndexPager->reallyDoQuery()
#8 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/logging/LogPager.php(516): IndexPager->doQuery()
#9 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/pager/IndexPager.php(563): LogPager->doQuery()
#10 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/specials/SpecialLog.php(294): IndexPager->getBody()
#11 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/specials/SpecialLog.php(171): SpecialLog->show()
#12 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/specialpage/SpecialPage.php(700): SpecialLog->execute()
#13 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/specialpage/SpecialPageFactory.php(1456): SpecialPage->run()
#14 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/MediaWiki.php(322): MediaWiki\\SpecialPage\\SpecialPageFactory->executePath()
#15 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/MediaWiki.php(916): MediaWiki->performRequest()
#16 /srv/mediawiki/tags/2022-12-22_14:37:22/includes/MediaWiki.php(571): MediaWiki->main()
#17 /srv/mediawiki/tags/2022-12-22_14:37:22/index.php(50): MediaWiki->run()
#18 /srv/mediawiki/tags/2022-12-22_14:37:22/index.php(46): wfIndexMain()
#19 {main}
","exception_url":"/wiki/Special:Log?type=messagebundle&user=&page=Translations%3AUser%3AAbijeet_Patro%2FMessageBundle15Jun-Moved%2Fdescription%2Fen&wpdate=&tagfilter=OAuth+CID%3A+4&tagInvert=1&wpfilters%5B%5D=newusers&wpFormIdentifier=logeventslist","reqId":"77b3e98f4255562131efd3dc","caught_by":"entrypoint"} []

Since it works without tagInvert=1, this is probably a regression from T174349: Allow tag filter on Special:RecentChanges and Watchlist to be inverted (enable the not operator).

The issue seems to be missing table prefix in AND (change_tag.ct_tag_id IS NULL)

Event Timeline

Change 871132 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/core@master] ChangeTags: Remove table name from condition

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

Change 871132 merged by jenkins-bot:

[mediawiki/core@master] ChangeTags: Remove table name from condition

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

Change 871218 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/core@REL1_38] ChangeTags: Remove table name from condition

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

Change 871219 had a related patch set uploaded (by Lucas Werkmeister (WMDE); author: Lucas Werkmeister (WMDE)):

[mediawiki/core@REL1_39] ChangeTags: Remove table name from condition

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

Change 871219 merged by jenkins-bot:

[mediawiki/core@REL1_39] ChangeTags: Remove table name from condition

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

Change 871218 merged by jenkins-bot:

[mediawiki/core@REL1_38] ChangeTags: Remove table name from condition

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

I tried cherry-picking 396201e81fee75bf2e3754ebc032cfd2490f3639 and it doesn't work:

Wikimedia\Rdbms\DBQueryError: Error 1052: Column 'ct_tag_id' in where clause is ambiguous

Query: SELECT DISTINCT rc_id,rc_timestamp,rc_namespace,rc_title,rc_minor,rc_bot,rc_new,rc_cur_id,rc_this_oldid,rc_last_oldid,rc_type,rc_source,rc_patrolled,rc_ip,rc_old_len,rc_new_len
,rc_deleted,rc_logid,rc_log_type,rc_log_action,rc_params,rc_actor,recentchanges_actor.actor_user AS `rc_user`,recentchanges_actor.actor_name AS `rc_user_text`,comment_rc_comment.comme
nt_text AS `rc_comment_text`,comment_rc_comment.comment_data AS `rc_comment_data`,comment_rc_comment.comment_id AS `rc_comment_cid`,rc_title,rc_namespace,wl_user,wl_notificationtimest
amp,page_latest,(SELECT  GROUP_CONCAT(ctd_name SEPARATOR ',')  FROM `bw_change_tag` JOIN `bw_change_tag_def` ON ((ct_tag_id=ctd_id))   WHERE ct_rc_id=rc_id  ) AS `ts_tags`  FROM `bw_recentchanges` STRAIGHT_JOIN `bw_actor` `recentchanges_actor` ON ((actor_id=rc_actor)) STRAIGHT_JOIN `bw_comment` `comment_rc_comment` ON ((comment_rc_comment.comment_id = rc_comment_id)) LEFT JOIN `bw_change_tag` `translatetags` ON ((ct_rc_id=rc_id) AND ct_tag_id = 20) LEFT JOIN `bw_watchlist` ON (wl_user = 1 AND (wl_title=rc_title) AND (wl_namespace=rc_namespace)) LEFT JOIN `bw_page` ON ((rc_cur_id=page_id)) STRAIGHT_JOIN `bw_change_tag` ON ((ct_rc_id=rc_id))   WHERE translatetags.ct_tag_id IS NULL AND (rc_namespace NOT IN (-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,90,91,92,93,100,101,106,107,202,203,208,209,212,213,214,215,420,421,828,829,1102,1103,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,2300,2301,2302,2303)) AND (rc_timestamp >= '20221231080120') AND ct_tag_id IN (16,1,2,14,15,18,4,8,7,5,20,19,10,17)  AND (rc_title  LIKE '%/vi' ESCAPE '`' ) AND rc_new IN (0,1)   GROUP BY rc_timestamp, rc_id ORDER BY rc_timestamp DESC, rc_id DESC LIMIT 500

I tried cherry-picking 396201e81fee75bf2e3754ebc032cfd2490f3639 and it doesn't work:

Wikimedia\Rdbms\DBQueryError: Error 1052: Column 'ct_tag_id' in where clause is ambiguous

Query: SELECT DISTINCT rc_id,rc_timestamp,rc_namespace,rc_title,rc_minor,rc_bot,rc_new,rc_cur_id,rc_this_oldid,rc_last_oldid,rc_type,rc_source,rc_patrolled,rc_ip,rc_old_len,rc_new_len
,rc_deleted,rc_logid,rc_log_type,rc_log_action,rc_params,rc_actor,recentchanges_actor.actor_user AS `rc_user`,recentchanges_actor.actor_name AS `rc_user_text`,comment_rc_comment.comme
nt_text AS `rc_comment_text`,comment_rc_comment.comment_data AS `rc_comment_data`,comment_rc_comment.comment_id AS `rc_comment_cid`,rc_title,rc_namespace,wl_user,wl_notificationtimest
amp,page_latest,(SELECT  GROUP_CONCAT(ctd_name SEPARATOR ',')  FROM `bw_change_tag` JOIN `bw_change_tag_def` ON ((ct_tag_id=ctd_id))   WHERE ct_rc_id=rc_id  ) AS `ts_tags`  FROM `bw_recentchanges` STRAIGHT_JOIN `bw_actor` `recentchanges_actor` ON ((actor_id=rc_actor)) STRAIGHT_JOIN `bw_comment` `comment_rc_comment` ON ((comment_rc_comment.comment_id = rc_comment_id)) LEFT JOIN `bw_change_tag` `translatetags` ON ((ct_rc_id=rc_id) AND ct_tag_id = 20) LEFT JOIN `bw_watchlist` ON (wl_user = 1 AND (wl_title=rc_title) AND (wl_namespace=rc_namespace)) LEFT JOIN `bw_page` ON ((rc_cur_id=page_id)) STRAIGHT_JOIN `bw_change_tag` ON ((ct_rc_id=rc_id))   WHERE translatetags.ct_tag_id IS NULL AND (rc_namespace NOT IN (-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,90,91,92,93,100,101,106,107,202,203,208,209,212,213,214,215,420,421,828,829,1102,1103,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,2300,2301,2302,2303)) AND (rc_timestamp >= '20221231080120') AND ct_tag_id IN (16,1,2,14,15,18,4,8,7,5,20,19,10,17)  AND (rc_title  LIKE '%/vi' ESCAPE '`' ) AND rc_new IN (0,1)   GROUP BY rc_timestamp, rc_id ORDER BY rc_timestamp DESC, rc_id DESC LIMIT 500

This is another query. The first query was from Special:Log and about an unknown column name. This query has two joins for change tags table since the join for translatetags from T233493 and should fail also without what was happen in T174349.

https://translatewiki.net/w/i.php?hidebots=1&translations=filter-translation-pages&tagfilter=mw-blank&inverttags=1&limit=50&days=7&enhanced=1&title=Special:RecentChanges&trailer=%2Fde&urlversion=2
https://translatewiki.net/w/i.php?hidebots=1&translations=filter-translation-pages&tagfilter=mw-blank&limit=50&days=7&enhanced=1&title=Special:RecentChanges&trailer=%2Fde&urlversion=2

I think instead of removing the table name, we should instead give the table name an alias (i.e. use an associative array key/value in $tables) and use the alias in the other condition. This should solve the problem without requiring having an IDatabase object around.

Change 876283 had a related patch set uploaded (by Brian Wolff; author: Brian Wolff):

[mediawiki/extensions/Translate@master] Qualify conditions in RC filter for change tags.

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

Change 876284 had a related patch set uploaded (by Brian Wolff; author: Brian Wolff):

[mediawiki/core@master] Make ChangeTag::modifyDisplayQuery more reliable if multiple joins to changetags

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

Change 876283 merged by jenkins-bot:

[mediawiki/extensions/Translate@master] Qualify conditions in RC filter for change tags

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

Change 876284 merged by jenkins-bot:

[mediawiki/core@master] Make ChangeTag::modifyDisplayQuery more reliable if multiple joins to changetags

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