Skip to content

Commit

Permalink
[apigee#321] Add an update hook to update storage definitions and schema
Browse files Browse the repository at this point in the history
  • Loading branch information
shadcn committed Jan 29, 2020
1 parent c0be22d commit 0f083ca
Showing 1 changed file with 54 additions and 0 deletions.
54 changes: 54 additions & 0 deletions apigee_edge.install
Original file line number Diff line number Diff line change
Expand Up @@ -182,3 +182,57 @@ function apigee_edge_update_8002() {
// Empty.
// Removed because Hybrid support makes this update hook unneeded.
}

/**
* Increase the max_length for first_name and last_name fields.
*/
function apigee_edge_update_8003() {
$entity_type_id = 'user';
$fields = ['first_name', 'last_name'];
$field_length = 64;

$definition_update_manager = \Drupal::entityDefinitionUpdateManager();
$last_installed_schema_repository = \Drupal::service('entity.last_installed_schema.repository');

/** @var \Drupal\Core\Field\FieldStorageDefinitionInterface[] $field_storage_definitions */
$field_storage_definitions = $last_installed_schema_repository->getLastInstalledFieldStorageDefinitions($entity_type_id);
$entity_type = $definition_update_manager->getEntityType($entity_type_id);

$definition = \Drupal::entityTypeManager()->getDefinition($entity_type_id);
$data_table = $definition->getDataTable();
$revision_data_table = $definition->getRevisionDataTable();
$entity_storage_schema_sql = \Drupal::keyValue('entity.storage_schema.sql');

$schema = \Drupal::database()->schema();

// Update the field storage definition.
foreach ($fields as $field_name) {
$field_storage_definitions[$field_name]->setSetting('max_length', $field_length);
}

$definition_update_manager->updateFieldableEntityType($entity_type, $field_storage_definitions, $sandbox);

// Update table schema.
foreach ($fields as $field_name) {
$schema_key = "$entity_type_id.field_schema_data.$field_name";
if ($field_schema_data = $entity_storage_schema_sql->get($schema_key)) {
// Update storage schema for data table.
$field_schema_data[$data_table]['fields'][$field_name]['length'] = $field_length;

// Update storage schema for the revision table.
if ($revision_data_table) {
$field_schema_data[$revision_data_table]['fields'][$field_name]['length'] = $field_length;
}

$entity_storage_schema_sql->set($schema_key, $field_schema_data);

// Update the base database field.
$schema->changeField($data_table, $field_name, $field_name, $field_schema_data[$data_table]['fields'][$field_name]);

// Update schema for the revision table.
if ($revision_data_table) {
$schema->changeField($revision_data_table, $field_name, $field_name, $field_schema_data[$revision_data_table]['fields'][$field_name]);
}
}
}
}

0 comments on commit 0f083ca

Please sign in to comment.