From a96594c816518b4b0008de0de21ef6e171e18d9c Mon Sep 17 00:00:00 2001
From: Alexander Vorwerk <zabe@avorwerk.net>
Date: Thu, 16 Apr 2026 23:40:24 +0200
Subject: [PATCH] ImageListPager: Force RDBMS to query filerevision before file

This is similar to d288df6da (I2153ed1f).

We want to use the fr_timestamp index, so cannot do a secondary sort by
file_name here and switch to fr_id instead.

Also we STRAIGHT_JOIN file to make sure filerevision is queried first.

Bug: T423654
Change-Id: Ieb621212e22ecbdf28d6636f283e604633ce276c
---
 includes/Specials/Pager/ImageListPager.php | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/includes/Specials/Pager/ImageListPager.php b/includes/Specials/Pager/ImageListPager.php
index 09be3ff92d2..3300ea5e3e5 100644
--- a/includes/Specials/Pager/ImageListPager.php
+++ b/includes/Specials/Pager/ImageListPager.php
@@ -71,7 +71,7 @@ class ImageListPager extends TablePager {
 	];
 
 	private const INDEX_FIELDS_NEW = [
-		'fr_timestamp' => [ 'fr_timestamp', 'file_name' ],
+		'fr_timestamp' => [ 'fr_timestamp', 'fr_id' ],
 		'file_name' => [ 'file_name' ],
 		'fr_size' => [ 'fr_size', 'file_name' ],
 	];
@@ -262,7 +262,9 @@ class ImageListPager extends TablePager {
 		if ( $this->mIncluding ) {
 			return false;
 		}
-		/* For reference, the indices we can use for sorting are:
+
+		/**
+		 * For reference, the indices we can use for sorting are:
 		 * On the image table: img_actor_timestamp, img_size, img_timestamp
 		 * On oldimage: oi_actor_timestamp, oi_name_timestamp
 		 *
@@ -290,16 +292,18 @@ class ImageListPager extends TablePager {
 			// the pager class.
 			return $this->getQueryInfoReal( $this->mTableName );
 		}
+
 		$dbr = $this->getDatabase();
 		$tables = [ 'filerevision', 'file', 'actor' ];
 		$fields = [
 			'fr_timestamp',
 			'file_name',
+			'fr_id',
 			'fr_size',
 			'top' => 'CASE WHEN file_latest = fr_id THEN \'yes\' ELSE \'no\' END',
 		];
 		$join_conds = [
-			'filerevision' => [ 'JOIN', 'fr_file=file_id' ],
+			'file' => [ 'STRAIGHT_JOIN', 'fr_file=file_id' ],
 			'actor' => [ 'JOIN', 'actor_id=fr_actor' ]
 		];
 
-- 
2.43.0

