<?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); }