Page MenuHomePhabricator

D8355.id19862.diff
No OneTemporary

D8355.id19862.diff

diff --git a/resources/sql/autopatches/20140226.dxcustom.1.fielddata.php b/resources/sql/autopatches/20140226.dxcustom.1.fielddata.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20140226.dxcustom.1.fielddata.php
@@ -0,0 +1,22 @@
+<?php
+
+$conn_w = id(new DifferentialRevision())->establishConnection('w');
+$rows = new LiskRawMigrationIterator($conn_w, 'differential_auxiliaryfield');
+
+echo "Modernizing Differential auxiliary field storage...\n";
+
+$table_name = id(new DifferentialCustomFieldStorage())->getTableName();
+foreach ($rows as $row) {
+ $id = $row['id'];
+ echo "Migrating row {$id}...\n";
+ queryfx(
+ $conn_w,
+ 'INSERT IGNORE INTO %T (objectPHID, fieldIndex, fieldValue)
+ VALUES (%s, %s, %s)',
+ $table_name,
+ $row['revisionPHID'],
+ PhabricatorHash::digestForIndex($row['name']),
+ $row['value']);
+}
+
+echo "Done.\n";
diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -2881,7 +2881,6 @@
'DifferentialAsanaRepresentationFieldSpecification' => 'DifferentialFieldSpecification',
'DifferentialAuditorsFieldSpecification' => 'DifferentialFieldSpecification',
'DifferentialAuthorFieldSpecification' => 'DifferentialFieldSpecification',
- 'DifferentialAuxiliaryField' => 'DifferentialDAO',
'DifferentialBlameRevisionFieldSpecification' => 'DifferentialFieldSpecification',
'DifferentialBranchFieldSpecification' => 'DifferentialFieldSpecification',
'DifferentialCCWelcomeMail' => 'DifferentialReviewRequestMail',
diff --git a/src/applications/differential/editor/DifferentialRevisionEditor.php b/src/applications/differential/editor/DifferentialRevisionEditor.php
--- a/src/applications/differential/editor/DifferentialRevisionEditor.php
+++ b/src/applications/differential/editor/DifferentialRevisionEditor.php
@@ -707,14 +707,14 @@
$revision = $this->revision;
- $fields = id(new DifferentialAuxiliaryField())->loadAllWhere(
- 'revisionPHID = %s AND name IN (%Ls)',
- $revision->getPHID(),
- array_keys($aux_map));
- $fields = mpull($fields, null, 'getName');
+ $fields = id(new DifferentialCustomFieldStorage())->loadAllWhere(
+ 'objectPHID = %s',
+ $revision->getPHID());
+ $fields = mpull($fields, null, 'getFieldIndex');
foreach ($aux_map as $key => $val) {
- $obj = idx($fields, $key);
+ $index = PhabricatorHash::digestForIndex($key);
+ $obj = idx($fields, $index);
if (!strlen($val)) {
// If the new value is empty, just delete the old row if one exists and
// don't add a new row if it doesn't.
@@ -723,9 +723,9 @@
}
} else {
if (!$obj) {
- $obj = new DifferentialAuxiliaryField();
- $obj->setRevisionPHID($revision->getPHID());
- $obj->setName($key);
+ $obj = new DifferentialCustomFieldStorage();
+ $obj->setObjectPHID($revision->getPHID());
+ $obj->setFieldIndex($index);
}
if ($obj->getValue() !== $val) {
diff --git a/src/applications/differential/storage/DifferentialAuxiliaryField.php b/src/applications/differential/storage/DifferentialAuxiliaryField.php
--- a/src/applications/differential/storage/DifferentialAuxiliaryField.php
+++ b/src/applications/differential/storage/DifferentialAuxiliaryField.php
@@ -1,20 +1,6 @@
<?php
-final class DifferentialAuxiliaryField extends DifferentialDAO {
-
- protected $revisionPHID;
- protected $name;
- protected $value;
-
- public function setName($name) {
- if (strlen($name) > 32) {
- throw new Exception(
- "Tried to set name '{$name}' for a Differential auxiliary field; ".
- "auxiliary field names must be no longer than 32 characters.");
- }
- $this->name = $name;
- return $this;
- }
+final class DifferentialAuxiliaryField {
public static function loadFromStorage(
DifferentialRevision $revision,
@@ -24,11 +10,20 @@
$storage_keys = array_filter(mpull($aux_fields, 'getStorageKey'));
$field_data = array();
if ($storage_keys) {
- $field_data = id(new DifferentialAuxiliaryField())->loadAllWhere(
- 'revisionPHID = %s AND name IN (%Ls)',
+ $index_map = array();
+ foreach ($storage_keys as $key) {
+ $index_map[PhabricatorHash::digestForIndex($key)] = $key;
+ }
+
+ $index_data = id(new DifferentialCustomFieldStorage())->loadAllWhere(
+ 'objectPHID = %s AND fieldIndex IN (%Ls)',
$revision->getPHID(),
- $storage_keys);
- $field_data = mpull($field_data, 'getValue', 'getName');
+ array_keys($index_map));
+ $index_data = mpull($index_data, 'getFieldValue', 'getFieldIndex');
+
+ foreach ($index_data as $index => $data) {
+ $field_data[$index_map[$index]] = $data;
+ }
}
foreach ($aux_fields as $aux_field) {
diff --git a/src/applications/differential/storage/DifferentialRevision.php b/src/applications/differential/storage/DifferentialRevision.php
--- a/src/applications/differential/storage/DifferentialRevision.php
+++ b/src/applications/differential/storage/DifferentialRevision.php
@@ -209,13 +209,6 @@
$inline->delete();
}
- $fields = id(new DifferentialAuxiliaryField())->loadAllWhere(
- 'revisionPHID = %s',
- $this->getPHID());
- foreach ($fields as $field) {
- $field->delete();
- }
-
// we have to do paths a little differentally as they do not have
// an id or phid column for delete() to act on
$dummy_path = new DifferentialAffectedPath();

File Metadata

Mime Type
text/plain
Expires
May 18 2024, 6:51 AM (5 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6299642
Default Alt Text
D8355.id19862.diff (5 KB)

Event Timeline