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 |