mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-29 02:02:41 +01:00
Require rows passed to "loadAllFromArray()" have unique keys
Summary: See PHI1809, which identified a bug in Project search where queries with a large number of slugs could paginate improperly. This change detects problems in this category: cases where multiple rows with the same ID are passed to "loadAllFromArray()". It's likely that all cases it detects are cases where a GROUP BY is missing. Since this might have some false positives or detect some things which aren't fundamentally problematic, I'm planning to hold it until the next release. Test Plan: - Reverted D21399, then created a project with multiple slugs and queried for one of them via "project.search". Hit this new exeception. - Browsed around a bit, didn't immediately catch any collateral damage. Differential Revision: https://secure.phabricator.com/D21400
This commit is contained in:
parent
429543b637
commit
72f149bf39
1 changed files with 12 additions and 1 deletions
|
@ -653,7 +653,18 @@ abstract class LiskDAO extends Phobject
|
||||||
foreach ($rows as $row) {
|
foreach ($rows as $row) {
|
||||||
$obj = clone $this;
|
$obj = clone $this;
|
||||||
if ($id_key && isset($row[$id_key])) {
|
if ($id_key && isset($row[$id_key])) {
|
||||||
$result[$row[$id_key]] = $obj->loadFromArray($row);
|
$row_id = $row[$id_key];
|
||||||
|
|
||||||
|
if (isset($result[$row_id])) {
|
||||||
|
throw new Exception(
|
||||||
|
pht(
|
||||||
|
'Rows passed to "loadAllFromArray(...)" include two or more '.
|
||||||
|
'rows with the same ID ("%s"). Rows must have unique IDs. '.
|
||||||
|
'An underlying query may be missing a GROUP BY.',
|
||||||
|
$row_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
$result[$row_id] = $obj->loadFromArray($row);
|
||||||
} else {
|
} else {
|
||||||
$result[] = $obj->loadFromArray($row);
|
$result[] = $obj->loadFromArray($row);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue