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:
24
resources/sql/patches/20131020.pxaction.sql
Normal file
24
resources/sql/patches/20131020.pxaction.sql
Normal 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;
|
||||
92
resources/sql/patches/20131020.pxactionmig.php
Normal file
92
resources/sql/patches/20131020.pxactionmig.php
Normal 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";
|
||||
Reference in New Issue
Block a user