| Index: trunk/phase3/includes/api/ApiQueryAllpages.php |
| — | — | @@ -67,6 +67,16 @@ |
| 68 | 68 | if (isset ($params['prefix'])) |
| 69 | 69 | $this->addWhere("page_title LIKE '" . $db->escapeLike($this->titlePartToKey($params['prefix'])) . "%'"); |
| 70 | 70 | |
| | 71 | + if (is_null($resultPageSet)) { |
| | 72 | + $selectFields = array ( |
| | 73 | + 'page_namespace', |
| | 74 | + 'page_title', |
| | 75 | + 'page_id' |
| | 76 | + ); |
| | 77 | + } else { |
| | 78 | + $selectFields = $resultPageSet->getPageTableFields(); |
| | 79 | + } |
| | 80 | + $this->addFields($selectFields); |
| 71 | 81 | $forceNameTitleIndex = true; |
| 72 | 82 | if (isset ($params['minsize'])) { |
| 73 | 83 | $this->addWhere('page_len>=' . intval($params['minsize'])); |
| — | — | @@ -106,21 +116,15 @@ |
| 107 | 117 | } else if($params['filterlanglinks'] == 'withlanglinks') { |
| 108 | 118 | $this->addTables('langlinks'); |
| 109 | 119 | $this->addWhere('page_id=ll_from'); |
| 110 | | - $this->addOption('DISTINCT'); |
| | 120 | + $this->addOption('STRAIGHT_JOIN'); |
| | 121 | + // We have to GROUP BY |
| | 122 | + $this->addOption('GROUP BY', implode(', ', $selectFields)); |
| 111 | 123 | $forceNameTitleIndex = false; |
| 112 | 124 | } |
| 113 | 125 | if ($forceNameTitleIndex) |
| 114 | 126 | $this->addOption('USE INDEX', 'name_title'); |
| 115 | 127 | |
| 116 | | - if (is_null($resultPageSet)) { |
| 117 | | - $this->addFields(array ( |
| 118 | | - 'page_id', |
| 119 | | - 'page_namespace', |
| 120 | | - 'page_title' |
| 121 | | - )); |
| 122 | | - } else { |
| 123 | | - $this->addFields($resultPageSet->getPageTableFields()); |
| 124 | | - } |
| | 128 | + |
| 125 | 129 | |
| 126 | 130 | $limit = $params['limit']; |
| 127 | 131 | $this->addOption('LIMIT', $limit+1); |
| Index: trunk/phase3/includes/api/ApiPageSet.php |
| — | — | @@ -92,10 +92,11 @@ |
| 93 | 93 | */ |
| 94 | 94 | public function getPageTableFields() { |
| 95 | 95 | // Ensure we get minimum required fields |
| | 96 | + // DON'T change this order |
| 96 | 97 | $pageFlds = array ( |
| | 98 | + 'page_namespace' => null, |
| | 99 | + 'page_title' => null, |
| 97 | 100 | 'page_id' => null, |
| 98 | | - 'page_namespace' => null, |
| 99 | | - 'page_title' => null |
| 100 | 101 | ); |
| 101 | 102 | |
| 102 | 103 | // only store non-default fields |