Page MenuHomePhabricator

D21570.diff
No OneTemporary

D21570.diff

diff --git a/resources/sql/autopatches/20210215.changeset.02.phid-populate.php b/resources/sql/autopatches/20210215.changeset.02.phid-populate.php
--- a/resources/sql/autopatches/20210215.changeset.02.phid-populate.php
+++ b/resources/sql/autopatches/20210215.changeset.02.phid-populate.php
@@ -7,20 +7,65 @@
$conn = $changeset_table->establishConnection('w');
$table_name = $changeset_table->getTableName();
-$iterator = new LiskRawMigrationIterator($conn, $table_name);
-foreach ($iterator as $changeset_row) {
- $phid = $changeset_row['phid'];
+$chunk_size = 4096;
- if (strlen($phid)) {
+$temporary_table = 'tmp_20210215_changeset_id_map';
+
+queryfx(
+ $conn,
+ 'CREATE TEMPORARY TABLE %T (
+ changeset_id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
+ changeset_phid VARBINARY(64) NOT NULL)',
+ $temporary_table);
+
+$table_iterator = id(new LiskRawMigrationIterator($conn, $table_name))
+ ->setPageSize($chunk_size);
+
+$chunk_iterator = new PhutilChunkedIterator($table_iterator, $chunk_size);
+foreach ($chunk_iterator as $chunk) {
+
+ $map = array();
+ foreach ($chunk as $changeset_row) {
+ $phid = $changeset_row['phid'];
+
+ if (strlen($phid)) {
+ continue;
+ }
+
+ $phid = PhabricatorPHID::generateNewPHID($phid_type);
+ $id = $changeset_row['id'];
+
+ $map[(int)$id] = $phid;
+ }
+
+ if (!$map) {
continue;
}
- $phid = PhabricatorPHID::generateNewPHID($phid_type);
+ $sql = array();
+ foreach ($map as $changeset_id => $changeset_phid) {
+ $sql[] = qsprintf(
+ $conn,
+ '(%d, %s)',
+ $changeset_id,
+ $changeset_phid);
+ }
+
+ queryfx(
+ $conn,
+ 'TRUNCATE TABLE %T',
+ $temporary_table);
+
+ queryfx(
+ $conn,
+ 'INSERT INTO %T (changeset_id, changeset_phid) VALUES %LQ',
+ $temporary_table,
+ $sql);
queryfx(
$conn,
- 'UPDATE %T SET phid = %s WHERE id = %d',
+ 'UPDATE %T c JOIN %T x ON c.id = x.changeset_id
+ SET c.phid = x.changeset_phid',
$table_name,
- $phid,
- $changeset_row['id']);
+ $temporary_table);
}

File Metadata

Mime Type
text/plain
Expires
Sun, Mar 16, 1:35 PM (2 w, 2 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7224123
Default Alt Text
D21570.diff (2 KB)

Event Timeline