To split from the parent.
What's left:
|File|Complexity
|includes/block/DatabaseBlock.php| Needs to introduce a query builder to replace `::getQueryInfo()`
|includes/language/MessageCache.php| Takes RevisionStore's query info and unsets pieces
|includes/utils/BatchRowIterator.php|Designed to do `::select()`
|includes/user/UserEditTracker.php|Calls to deprecated `ActorMigration::getWhere` (easy)
|includes/changes/RecentChange.php|Needs introducing RecentChangeSelectQueryBuilder to replace `::getQueryInfo`
|includes/filerepo/file/LocalFile.php| Passes the query array to `onLocalFile__getHistory` hook
|includes/filerepo/file/LocalFileDeleteBatch.php| None
|includes/Permissions/RestrictionStore.php| Calls `$this->commentStore->getJoin( 'pt_reason' );` (easy)
|includes/installer/DatabaseInstaller.php|None
|includes/installer/PostgresUpdater.php|None
|includes/installer/DatabaseUpdater.php|None
|includes/export/WikiExporter.php| Calls `$this->commentStore->getJoin( 'log_comment' );` (easy)
|includes/editpage/EditPage.php| Calls `$this->commentStore->getJoin( 'log_comment' );` (easy)
|includes/watcheditem/WatchedItemQueryService.php| Sends the query array to `modifyWatchedItemsWithRCInfoQuery`
|includes/specialpage/QueryPage.php| The query object is being built in subclasses via `::getQueryInfo()`
|includes/specialpage/ChangesListSpecialPage.php|Runs `runMainQueryHook` on the query array
|includes/page/WikiPage.php| Has `::getQueryInfo()` and pass it to hooks. `getContributors` one is easy though.
|includes/page/WikiPageFactory.php|Gets the query info object from Wikipage::getQueryInfo()
|includes/page/DeletePage.php|Takes the query info from revision store and fiddles with the query array
|includes/Rest/Handler/PageHistoryCountHandler.php| Subquery
|includes/Rest/Handler/PageHistoryHandler.php| Subquery
|includes/title/Title.php|None
|includes/jobqueue/jobs/RenameUserJob.php|None, building the query array is a bit messy
|includes/jobqueue/jobs/RecentChangesUpdateJob.php|Takes `RecentChange::getQueryInfo()` query array
|includes/Revision/RevisionStore.php|::getSlotsQueryInfo(), needs a dedicated SQB subclass
|includes/specials/SpecialRandomPage.php| Passes the query object into a hook `onRandomPageQuery`
|includes/specials/SpecialExport.php| ::getLinks() takes the join condition as argument, protected method so (easy)
|includes/specials/SpecialRecentChanges.php| Passes the query object in `runMainQueryHook`
|includes/specials/pagers/ActiveUsersPager.php|Subquery
|includes/specials/pagers/ImageListPager.php|Gets the query object from ::getQueryInfo and ::buildQueryInfo
|includes/specials/pagers/ContribsPager.php|ditto
|tests/phpunit/MediaWikiIntegrationTestCase.php| None
|tests/phpunit/includes/block/DatabaseBlockTest.php|Needs`DatabaseBlock::getQueryInfo();`
|tests/phpunit/includes/CommentStore/CommentStoreTest.php|Testing CommentStore's query building part
|tests/phpunit/includes/user/ActorMigrationTest.php|ditto
|tests/phpunit/includes/Storage/PageUpdaterTest.php| Needs `RecentChange::getQueryInfo()`
|tests/phpunit/integration/includes/block/DatabaseBlockStoreTest.php|None
|tests/phpunit/unit/includes/Permissions/RestrictionStoreTest.php| Horrifying assert
|tests/phpunit/unit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php| None
|maintenance/resetPageRandom.php|Subquery
|maintenance/namespaceDupes.php| Needs `$linksMigration->getQueryInfo`
|maintenance/populateIpChanges.php|Calls to deprecated `ActorMigration::getWhere` (easy)