diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php index 8031830e73..d3ff6cf1dd 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorage.php @@ -604,6 +604,9 @@ protected function doDeleteRevisionFieldItems(ContentEntityInterface $revision) ->condition($this->revisionKey, $revision->getRevisionId()) ->execute(); $this->deleteRevisionFromDedicatedTables($revision); + $this->database->delete($this->revisionDataTable) + ->condition($this->revisionKey, $revision->getRevisionId()) + ->execute(); } /** diff --git a/core/modules/node/src/Tests/NodeRevisionsTest.php b/core/modules/node/src/Tests/NodeRevisionsTest.php index bfdd213f41..8e2bf17928 100644 --- a/core/modules/node/src/Tests/NodeRevisionsTest.php +++ b/core/modules/node/src/Tests/NodeRevisionsTest.php @@ -195,6 +195,7 @@ function testRevisions() { array('%revision-date' => format_date($nodes[1]->getRevisionCreationTime()), '@type' => 'Basic page', '%title' => $nodes[1]->label())), 'Revision deleted.'); $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_revision} WHERE nid = :nid and vid = :vid', array(':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()))->fetchField() == 0, 'Revision not found.'); + $this->assertTrue(db_query('SELECT COUNT(vid) FROM {node_field_revision} WHERE nid = :nid and vid = :vid', array(':nid' => $node->id(), ':vid' => $nodes[1]->getRevisionId()))->fetchField() == 0, 'Field revision not found.'); // Set the revision timestamp to an older date to make sure that the // confirmation message correctly displays the stored revision date. diff --git a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php index a64ffc552d..13e0f1373f 100644 --- a/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php +++ b/core/modules/system/src/Tests/Entity/EntityRevisionsTest.php @@ -2,6 +2,7 @@ namespace Drupal\system\Tests\Entity; +use Drupal\Core\Database\Database; use Drupal\entity_test\Entity\EntityTestMulRev; use Drupal\language\Entity\ConfigurableLanguage; use Drupal\simpletest\WebTestBase; @@ -10,6 +11,8 @@ * Create a entity with revisions and test viewing, saving, reverting, and * deleting revisions. * + * @todo - add tests for saving and reverting revisions. + * * @group Entity */ class EntityRevisionsTest extends WebTestBase { @@ -98,6 +101,7 @@ protected function runRevisionsTests($entity_type) { $this->assertNotEqual($entity->field_test_text->value, $legacy_text, format_string('%entity_type: Text changed.', array('%entity_type' => $entity_type))); } + /** @var \Drupal\Core\Entity\EntityStorageInterface $storage */ $storage = $this->container->get('entity_type.manager')->getStorage($entity_type); for ($i = 0; $i < $revision_count; $i++) { // Load specific revision. @@ -120,6 +124,43 @@ protected function runRevisionsTests($entity_type) { $this->drupalGet($entity_type . '/manage/' . $entity->id->value . '/edit'); $this->assertFieldById('edit-name-0-value', $entity->name->value, format_string('%entity_type: Name matches in UI.', array('%entity_type' => $entity_type))); $this->assertFieldById('edit-field-test-text-0-value', $entity->field_test_text->value, format_string('%entity_type: Text matches in UI.', array('%entity_type' => $entity_type))); + + // Delete the second revision. + $revision_to_delete = 1; + $entity_revision = $storage->loadRevision($revision_ids[$revision_to_delete]); + $entity_revision->delete(); + + /** @var \Drupal\Core\Entity\Sql\SqlContentEntityStorage $storage */ + // @fixme + $revision_table = $storage->getRevisionTable(); + $this->assertFalse(empty($revision_table)); + + for ($i = 0; $i < $revision_count; $i++) { + $query = db_query('SELECT COUNT(revision_id) FROM {' . $revision_table . '} WHERE id = :id and revision_id = :vid', array( + ':id' => $entity_revision->id(), + ':vid' => $entity_revision->getRevisionId(), + )); + if ($i == $revision_to_delete) { + $this->assertTrue($query->fetchField() == 0, 'Revision not found.'); + } + else { + $this->assertTrue($query->fetchField() > 0, 'Revision found.'); + } + + $field_revision_table = $storage->getRevisionDataTable(); + if (!empty($field_revision_table)) { + $query = db_query('SELECT COUNT(revision_id) FROM {' . $field_revision_table . '} WHERE id = :id and revision_id = :vid', array( + ':nid' => $entity_revision->id(), + ':vid' => $entity_revision->getRevisionId(), + )); + if ($i == $revision_to_delete) { + $this->assertTrue($query->fetchField() == 0, 'Field revision not found.'); + } + else { + $this->assertTrue($query->fetchField() > 0, 'Field revision found.'); + } + } + } } /**