X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=blobdiff_plain;f=includes%2Fapi%2FApiQueryLogEvents.php;h=2c19c7d1aac560110aeee00e0cd6aecf73122642;hp=779868845ab8a87b649b6f86fc9ad1eea3226729;hb=9e8439e79d67788916d488f645108f79016d9aca;hpb=68b12dfded60597652212fd05df062e45784115f diff --git a/includes/api/ApiQueryLogEvents.php b/includes/api/ApiQueryLogEvents.php index 779868845a..2c19c7d1aa 100644 --- a/includes/api/ApiQueryLogEvents.php +++ b/includes/api/ApiQueryLogEvents.php @@ -186,6 +186,7 @@ class ApiQueryLogEvents extends ApiQueryBase { // T71222: MariaDB's optimizer, at least 10.1.37 and .38, likes to choose a wildly bad plan for // some reason for this code path. Tell it not to use the wrong index it wants to pick. + // @phan-suppress-next-line PhanTypeMismatchArgument $this->addOption( 'IGNORE INDEX', [ 'logging' => [ 'times' ] ] ); } @@ -220,10 +221,12 @@ class ApiQueryLogEvents extends ApiQueryBase { // Paranoia: avoid brute force searches (T19342) if ( $params['namespace'] !== null || !is_null( $title ) || !is_null( $user ) ) { - if ( !$this->getUser()->isAllowed( 'deletedhistory' ) ) { + if ( !$this->getPermissionManager()->userHasRight( $this->getUser(), 'deletedhistory' ) ) { $titleBits = LogPage::DELETED_ACTION; $userBits = LogPage::DELETED_USER; - } elseif ( !$this->getUser()->isAllowedAny( 'suppressrevision', 'viewsuppressed' ) ) { + } elseif ( !$this->getPermissionManager() + ->userHasAnyRight( $this->getUser(), 'suppressrevision', 'viewsuppressed' ) + ) { $titleBits = LogPage::DELETED_ACTION | LogPage::DELETED_RESTRICTED; $userBits = LogPage::DELETED_USER | LogPage::DELETED_RESTRICTED; } else { @@ -238,6 +241,14 @@ class ApiQueryLogEvents extends ApiQueryBase { } } + // T220999: MySQL/MariaDB (10.1.37) can sometimes irrationally decide that querying `actor` before + // `logging` and filesorting is somehow better than querying $limit+1 rows from `logging`. + // Tell it not to reorder the query. But not when `letag` was used, as it seems as likely + // to be harmed as helped in that case. + if ( $params['tag'] === null ) { + $this->addOption( 'STRAIGHT_JOIN' ); + } + $count = 0; $res = $this->select( __METHOD__ ); $result = $this->getResult();