diff --git a/core/modules/content_moderation/content_moderation.install b/core/modules/content_moderation/content_moderation.install index 2138f70..8b3f795 100644 --- a/core/modules/content_moderation/content_moderation.install +++ b/core/modules/content_moderation/content_moderation.install @@ -11,20 +11,38 @@ * Upgrade path from 8.3.2 to 8.3.3. */ function content_moderation_update_8001() { - - $update_manager = \Drupal::entityDefinitionUpdateManager(); - - // Update max_length of the content_entity_type_id so the unique index can - // be added without being too long. - // @see https://www.drupal.org/node/2779931 - $definition = $update_manager->getFieldStorageDefinition('content_entity_type_id', 'content_moderation_state'); - $definition->setSetting('max_length', EntityTypeInterface::ID_MAX_LENGTH); - $update_manager->updateFieldStorageDefinition($definition); - // Calling `setSetting` with a new `max_length` here doesn't appear to work, // so the database columns are directly updated. + $definition = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('content_entity_type_id', 'content_moderation_state'); $spec = $definition->getColumns(); $spec['value']['length'] = EntityTypeInterface::ID_MAX_LENGTH; db_change_field('content_moderation_state_field_data', 'content_entity_type_id', 'content_entity_type_id', $spec['value']); db_change_field('content_moderation_state_field_revision', 'content_entity_type_id', 'content_entity_type_id', $spec['value']); } + +/** + * Add new storage indexes, by applying all updates. + */ +function content_moderation_update_8002() { + $update_manager = \Drupal::entityDefinitionUpdateManager(); + $update_manager->applyUpdates(); +} + +/** + * Manually change the storage schema to have the new field length. + */ +function content_moderation_update_8003() { + $field_manager = \Drupal::getContainer()->get('entity_field.manager'); + $field_manager->clearCachedFieldDefinitions(); + $field_storage_configs = $field_manager->getFieldStorageDefinitions('content_moderation_state'); + + $last_installed_repo = \Drupal::getContainer()->get('entity.last_installed_schema.repository'); + $last_installed_configs = $last_installed_repo->getLastInstalledFieldStorageDefinitions('content_moderation_state'); + $last_installed_configs['content_entity_type_id'] = $field_storage_configs['content_entity_type_id']; + $last_installed_repo->setLastInstalledFieldStorageDefinitions('content_moderation_state', $last_installed_configs); + + $schema = \Drupal::keyValue('entity.storage_schema.sql')->get('content_moderation_state.field_schema_data.content_entity_type_id'); + $schema['content_moderation_state_field_data']['fields']['content_entity_type_id']['length'] = 32; + $schema['content_moderation_state_field_revision']['fields']['content_entity_type_id']['length'] = 32; + \Drupal::keyValue('entity.storage_schema.sql')->set('content_moderation_state.field_schema_data.content_entity_type_id', $schema); +} diff --git a/core/modules/content_moderation/src/Tests/UpgradeFrom32Test.php b/core/modules/content_moderation/src/Tests/UpgradeFrom32Test.php index 1d47d36..6548528 100644 --- a/core/modules/content_moderation/src/Tests/UpgradeFrom32Test.php +++ b/core/modules/content_moderation/src/Tests/UpgradeFrom32Test.php @@ -40,12 +40,6 @@ public function testUpdate() { $node = Node::load(1); $node->moderation_state->value = 'published'; $node->save(); - - - // Ensure the column size changed. - $definition = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('content_entity_type_id', 'content_moderation_state'); - $spec = $definition->getColumns(); - $this->assertEqual($spec['value']['length'], EntityTypeInterface::ID_MAX_LENGTH); } }