1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-12-04 20:52:43 +01:00
phorge-phorge/resources/sql/autopatches/20180306.opath.03.purge.php
epriestley 8cb273a053 Add a unique key to OwnersPath on "<packageID, repositoryPHID, pathIndex>"
Summary:
Depends on D19181. Ref T11015. This nukes duplicates from the table if they exist, then adds a unique key.

(Duplicates should not exist and can not be added with any recent version of the web UI.)

Test Plan:
  - Tried to add duplicates with web UI, didn't have any luck.
  - Explicitly added duplicates with manual `INSERT`s.
  - Viewed packages in web UI and saw duplicates.
  - Ran migrations, got a clean purge and a nice unique key.
  - There's still no way to actually hit a duplicate key error in the UI (unless you can collide hashes, I suppose), this is purely a correctness/robustness change.

Maniphest Tasks: T11015

Differential Revision: https://secure.phabricator.com/D19182
2018-03-06 20:30:59 -08:00

22 lines
545 B
PHP

<?php
$table = new PhabricatorOwnersPath();
$conn = $table->establishConnection('w');
$seen = array();
foreach (new LiskMigrationIterator($table) as $path) {
$package_id = $path->getPackageID();
$repository_phid = $path->getRepositoryPHID();
$path_index = $path->getPathIndex();
if (!isset($seen[$package_id][$repository_phid][$path_index])) {
$seen[$package_id][$repository_phid][$path_index] = true;
continue;
}
queryfx(
$conn,
'DELETE FROM %T WHERE id = %d',
$table->getTableName(),
$path->getID());
}