Move Project transaction storage to modern tables

Summary:
Ref T4010. Projects have a weird proto-version of ApplicationTransactions which is very similar but not quite the same.

Move the storage to a modern format, but keep all the other code for now.

Test Plan: Migrated project transactions; edited projects.

Reviewers: btrahan, chad

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T4010

Differential Revision: https://secure.phabricator.com/D7370
This commit is contained in:
epriestley
2013-10-22 13:49:28 -07:00
parent 90b83d7a92
commit 9b89e137cf
15 changed files with 175 additions and 324 deletions

View File

@@ -0,0 +1,24 @@
RENAME TABLE {$NAMESPACE}_project.project_transaction
TO {$NAMESPACE}_project.project_legacytransaction;
CREATE TABLE {$NAMESPACE}_project.project_transaction (
id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
phid VARCHAR(64) NOT NULL COLLATE utf8_bin,
authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin,
viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin,
commentPHID VARCHAR(64) COLLATE utf8_bin,
commentVersion INT UNSIGNED NOT NULL,
transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin,
oldValue LONGTEXT NOT NULL COLLATE utf8_bin,
newValue LONGTEXT NOT NULL COLLATE utf8_bin,
contentSource LONGTEXT NOT NULL COLLATE utf8_bin,
metadata LONGTEXT NOT NULL COLLATE utf8_bin,
dateCreated INT UNSIGNED NOT NULL,
dateModified INT UNSIGNED NOT NULL,
UNIQUE KEY `key_phid` (phid),
KEY `key_object` (objectPHID)
) ENGINE=InnoDB, COLLATE utf8_general_ci;

View File

@@ -0,0 +1,92 @@
<?php
$project_table = new PhabricatorProject();
$conn_w = $project_table->establishConnection('w');
$conn_w->openTransaction();
$src_table = 'project_legacytransaction';
$dst_table = 'project_transaction';
echo "Migrating Project transactions to new format...\n";
$content_source = PhabricatorContentSource::newForSource(
PhabricatorContentSource::SOURCE_LEGACY,
array())->serialize();
$rows = new LiskRawMigrationIterator($conn_w, $src_table);
foreach ($rows as $row) {
$id = $row['id'];
$project_id = $row['projectID'];
echo "Migrating transaction #{$id} (Project {$project_id})...\n";
$project_row = queryfx_one(
$conn_w,
'SELECT phid FROM %T WHERE id = %d',
$project_table->getTableName(),
$project_id);
if (!$project_row) {
continue;
}
$project_phid = $project_row['phid'];
$type_map = array(
'name' => PhabricatorProjectTransaction::TYPE_NAME,
'members' => PhabricatorProjectTransaction::TYPE_MEMBERS,
'status' => PhabricatorProjectTransaction::TYPE_STATUS,
'canview' => PhabricatorTransactions::TYPE_VIEW_POLICY,
'canedit' => PhabricatorTransactions::TYPE_EDIT_POLICY,
'canjoin' => PhabricatorTransactions::TYPE_JOIN_POLICY,
);
$new_type = idx($type_map, $row['transactionType']);
if (!$new_type) {
continue;
}
$xaction_phid = PhabricatorPHID::generateNewPHID(
PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
PhabricatorProjectPHIDTypeProject::TYPECONST);
queryfx(
$conn_w,
'INSERT IGNORE INTO %T
(phid, authorPHID, objectPHID,
viewPolicy, editPolicy, commentPHID, commentVersion, transactionType,
oldValue, newValue, contentSource, metadata,
dateCreated, dateModified)
VALUES
(%s, %s, %s,
%s, %s, %ns, %d, %s,
%s, %s, %s, %s,
%d, %d)',
$dst_table,
// PHID, Author, Object
$xaction_phid,
$row['authorPHID'],
$project_phid,
// View, Edit, Comment, Version, Type
'public',
$row['authorPHID'],
null,
0,
$new_type,
// Old, New, Source, Meta,
$row['oldValue'],
$row['newValue'],
$content_source,
'{}',
// Created, Modified
$row['dateCreated'],
$row['dateModified']);
}
$conn_w->saveTransaction();
echo "Done.\n";