X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryAllPages.php;h=e243593b1b231812a06895b1f8bd183380fecda2;hb=c73cd2ef7c8bc36e8d0e1e6970347df564782db3;hp=d7d71b3e60d44844d99de4d097fbc213b2c572a4;hpb=73a1b801e6627d5be2d01804674f8b21abb31806;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryAllPages.php b/includes/api/ApiQueryAllPages.php index d7d71b3e60..e243593b1b 100644 --- a/includes/api/ApiQueryAllPages.php +++ b/includes/api/ApiQueryAllPages.php @@ -168,9 +168,23 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { $this->addTables( 'langlinks' ); $this->addWhere( 'page_id=ll_from' ); $this->addOption( 'STRAIGHT_JOIN' ); - // We have to GROUP BY all selected fields to stop - // PostgreSQL from whining - $this->addOption( 'GROUP BY', $selectFields ); + + // MySQL filesorts if we use a GROUP BY that works with the rules + // in the 1992 SQL standard (it doesn't like having the + // constant-in-WHERE page_namespace column in there). Using the + // 1999 rules works fine, but that breaks other DBs. Sigh. + /// @todo Once we drop support for 1992-rule DBs, we can simplify this. + $dbType = $db->getType(); + if ( $dbType === 'mysql' || $dbType === 'sqlite' || + $dbType === 'postgres' && $db->getServerVersion() >= 9.1 + ) { + // 1999 rules, or screw-the-rules + $this->addOption( 'GROUP BY', array( 'page_title', 'page_id' ) ); + } else { + // 1992 rules + $this->addOption( 'GROUP BY', $selectFields ); + } + $forceNameTitleIndex = false; } @@ -299,7 +313,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase { ); } - public function getExamplesMessages() { + protected function getExamplesMessages() { return array( 'action=query&list=allpages&apfrom=B' => 'apihelp-query+allpages-example-B',