Merge "Allow constructing a Message from a MessageSpecifier"
[lhc/web/wiklou.git] / includes / api / ApiQueryAllPages.php
index d7d71b3..0149ad2 100644 (file)
@@ -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;
                }
 
@@ -220,7 +234,7 @@ class ApiQueryAllPages extends ApiQueryGeneratorBase {
                }
 
                if ( is_null( $resultPageSet ) ) {
-                       $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'p' );
+                       $result->addIndexedTagName( array( 'query', $this->getModuleName() ), 'p' );
                }
        }
 
@@ -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',