diff options
Diffstat (limited to 'includes/title/Title.php')
-rw-r--r-- | includes/title/Title.php | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/includes/title/Title.php b/includes/title/Title.php index 2b2e5b04eea2..34e5e03a9d7c 100644 --- a/includes/title/Title.php +++ b/includes/title/Title.php @@ -2953,13 +2953,23 @@ class Title implements Stringable, LinkTarget, PageIdentity { return $data; } - $dbr = $this->getDbProvider()->getReplicaDatabase(); + $migrationStage = MediaWikiServices::getInstance()->getMainConfig()->get( + MainConfigNames::CategoryLinksSchemaMigrationStage + ); - $res = $dbr->newSelectQueryBuilder() - ->select( 'cl_to' ) + $dbr = $this->getDbProvider()->getReplicaDatabase(); + $queryBuilder = $dbr->newSelectQueryBuilder() ->from( 'categorylinks' ) - ->where( [ 'cl_from' => $titleKey ] ) - ->caller( __METHOD__ )->fetchResultSet(); + ->where( [ 'cl_from' => $titleKey ] ); + + if ( $migrationStage & SCHEMA_COMPAT_READ_OLD ) { + $queryBuilder->select( 'cl_to' ); + } else { + $queryBuilder->field( 'lt_title', 'cl_to' ) + ->join( 'linktarget', null, 'cl_target_id = lt_id' ) + ->where( [ 'lt_namespace' => NS_CATEGORY ] ); + } + $res = $queryBuilder->caller( __METHOD__ )->fetchResultSet(); if ( $res->numRows() > 0 ) { $contLang = MediaWikiServices::getInstance()->getContentLanguage(); |