Changeset View
Changeset View
Standalone View
Standalone View
resources/sql/autopatches/20141106.uniqdrafts.php
- This file was added.
<?php | |||||
// Destroy duplicate drafts before storage adjustment adds a unique key to this | |||||
// table. See T1191. We retain the newest draft. | |||||
// (We can't easily do this in a single SQL statement because MySQL won't let us | |||||
// modify a table that's joined in a subquery.) | |||||
$table = new DifferentialDraft(); | |||||
$conn_w = $table->establishConnection('w'); | |||||
$duplicates = queryfx_all( | |||||
$conn_w, | |||||
'SELECT DISTINCT u.id id FROM %T u | |||||
JOIN %T v | |||||
ON u.objectPHID = v.objectPHID | |||||
AND u.authorPHID = v.authorPHID | |||||
AND u.draftKey = v.draftKey | |||||
AND u.id < v.id', | |||||
$table->getTableName(), | |||||
$table->getTableName()); | |||||
$duplicates = ipull($duplicates, 'id'); | |||||
foreach (PhabricatorLiskDAO::chunkSQL($duplicates) as $chunk) { | |||||
queryfx( | |||||
$conn_w, | |||||
'DELETE FROM %T WHERE id IN (%Q)', | |||||
$table->getTableName(), | |||||
$chunk); | |||||
} |