diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php index 85d6fbed33ec5d519ae75a6d47e568c7d4e6e94e..f9dd0c0850a02d6933fb24e2fac6ce31d5e65bae 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -162,11 +162,19 @@ protected function hasSharedTableStructureChange(EntityTypeInterface $entity_typ * Returns TRUE if there have been changes. */ protected function hasSharedTableNameChanges(EntityTypeInterface $entity_type, EntityTypeInterface $original) { + $base_table = $this->database->schema()->tableExists($entity_type->getBaseTable()); + $data_table = $this->database->schema()->tableExists($entity_type->getDataTable()); + $revision_table = $this->database->schema()->tableExists($entity_type->getRevisionTable()); + $revision_data_table = $this->database->schema()->tableExists($entity_type->getRevisionDataTable()); + + // We first check if the new table already exists because the storage might + // have created it even though it wasn't specified in the entity type + // definition. return - $entity_type->getBaseTable() != $original->getBaseTable() || - $entity_type->getDataTable() != $original->getDataTable() || - $entity_type->getRevisionTable() != $original->getRevisionTable() || - $entity_type->getRevisionDataTable() != $original->getRevisionDataTable(); + (!$base_table && $entity_type->getBaseTable() != $original->getBaseTable()) || + (!$data_table && $entity_type->getDataTable() != $original->getDataTable()) || + (!$revision_table && $entity_type->getRevisionTable() != $original->getRevisionTable()) || + (!$revision_data_table && $entity_type->getRevisionDataTable() != $original->getRevisionDataTable()); } /** diff --git a/core/modules/block_content/block_content.install b/core/modules/block_content/block_content.install index 4279cdef722865bf0c436173aae2a581a350a94a..6af2ac4e8f2569531443e6a145fe227d3d897bb1 100644 --- a/core/modules/block_content/block_content.install +++ b/core/modules/block_content/block_content.install @@ -61,3 +61,14 @@ function block_content_update_8003() { \Drupal::entityDefinitionUpdateManager() ->installFieldStorageDefinition('revision_user', 'block_content', 'block_content', $revision_user); } + +/** + * Fix the block_content entity type to specify its revision data table. + */ +function block_content_update_8300() { + $definition_update_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_type = $definition_update_manager->getEntityType('block_content'); + $entity_type->set('revision_data_table', 'block_content_field_revision'); + $definition_update_manager->updateEntityType($entity_type); + +} diff --git a/core/modules/block_content/src/Entity/BlockContent.php b/core/modules/block_content/src/Entity/BlockContent.php index 11c0c5470d81da95d906cba334848f09a5c534f7..b7c3d4dc1278c4aa85059333e399ff529bccce96 100644 --- a/core/modules/block_content/src/Entity/BlockContent.php +++ b/core/modules/block_content/src/Entity/BlockContent.php @@ -35,6 +35,7 @@ * base_table = "block_content", * revision_table = "block_content_revision", * data_table = "block_content_field_data", + * revision_data_table = "block_content_field_revision", * show_revision_ui = TRUE, * links = { * "canonical" = "/block/{block_content}", diff --git a/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php b/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php deleted file mode 100644 index ab59eba282aa6330108433c8cef64eb422b0c02e..0000000000000000000000000000000000000000 --- a/core/modules/block_content/src/Tests/BlockContentUpdateEntityFields.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php - -namespace Drupal\block_content\Tests; - -use Drupal\Core\Field\BaseFieldDefinition; -use Drupal\system\Tests\Update\UpdatePathTestBase; - -/** - * Tests adding revision_user and revision_created fields. - * - * @group Update - */ -class BlockContentUpdateEntityFields extends UpdatePathTestBase { - - /** - * {@inheritdoc} - */ - protected function setDatabaseDumpFiles() { - $this->databaseDumpFiles = [ - __DIR__ . '/../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', - ]; - } - - /** - * Tests that email token in status_blocked of user.mail is updated. - */ - public function testAddingFields() { - $this->runUpdates(); - - $post_revision_created = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('revision_created', 'block_content'); - $post_revision_user = \Drupal::entityDefinitionUpdateManager()->getFieldStorageDefinition('revision_user', 'block_content'); - $this->assertTrue($post_revision_created instanceof BaseFieldDefinition, "Revision created field found"); - $this->assertTrue($post_revision_user instanceof BaseFieldDefinition, "Revision user field found"); - - $this->assertEqual('created', $post_revision_created->getType(), "Field is type created"); - $this->assertEqual('entity_reference', $post_revision_user->getType(), "Field is type entity_reference"); - } - -} diff --git a/core/modules/block_content/src/Tests/BlockContentUpdateTest.php b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php new file mode 100644 index 0000000000000000000000000000000000000000..77c12c653bbc553cae8cad8f4f4c1520e6f45f5d --- /dev/null +++ b/core/modules/block_content/src/Tests/BlockContentUpdateTest.php @@ -0,0 +1,46 @@ +<?php + +namespace Drupal\block_content\Tests; + +use Drupal\Core\Field\BaseFieldDefinition; +use Drupal\system\Tests\Update\UpdatePathTestBase; + +/** + * Tests update functions for the Block Content module. + * + * @group Update + */ +class BlockContentUpdateTest extends UpdatePathTestBase { + + /** + * {@inheritdoc} + */ + protected function setDatabaseDumpFiles() { + $this->databaseDumpFiles = [ + __DIR__ . '/../../../system/tests/fixtures/update/drupal-8.bare.standard.php.gz', + ]; + } + + /** + * Tests the revision metadata fields and revision data table additions. + */ + public function testSimpleUpdates() { + $entity_definition_update_manager = \Drupal::entityDefinitionUpdateManager(); + $entity_type = $entity_definition_update_manager->getEntityType('block_content'); + $this->assertNull($entity_type->getRevisionDataTable()); + + $this->runUpdates(); + + $post_revision_created = $entity_definition_update_manager->getFieldStorageDefinition('revision_created', 'block_content'); + $post_revision_user = $entity_definition_update_manager->getFieldStorageDefinition('revision_user', 'block_content'); + $this->assertTrue($post_revision_created instanceof BaseFieldDefinition, "Revision created field found"); + $this->assertTrue($post_revision_user instanceof BaseFieldDefinition, "Revision user field found"); + + $this->assertEqual('created', $post_revision_created->getType(), "Field is type created"); + $this->assertEqual('entity_reference', $post_revision_user->getType(), "Field is type entity_reference"); + + $entity_type = $entity_definition_update_manager->getEntityType('block_content'); + $this->assertEqual('block_content_field_revision', $entity_type->getRevisionDataTable()); + } + +}