diff --git a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php index 61da55f04ff..96cea9f49db 100644 --- a/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php +++ b/core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php @@ -7,6 +7,7 @@ use Drupal\Core\Database\DatabaseException; use Drupal\Core\DependencyInjection\DependencySerializationTrait; use Drupal\Core\Entity\ContentEntityTypeInterface; use Drupal\Core\Entity\EntityManagerInterface; +use Drupal\Core\Entity\EntityPublishedInterface; use Drupal\Core\Entity\EntityStorageException; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Entity\Exception\FieldStorageDefinitionUpdateForbiddenException; @@ -548,6 +549,24 @@ class SqlContentEntityStorageSchema implements DynamicallyFieldableEntityStorage $this->processRevisionDataTable($entity_type, $schema[$tables['revision_data_table']]); } + // Add an index for the 'published' entity key. + if (is_subclass_of($entity_type->getClass(), EntityPublishedInterface::class)) { + $published_key = $entity_type->getKey('published'); + if ($published_key && !$storage_definitions[$published_key]->hasCustomStorage()) { + $published_field_table = $table_mapping->getFieldTableName($published_key); + $id_key = $entity_type->getKey('id'); + if ($bundle_key = $entity_type->getKey('bundle')) { + $key = "{$published_key}_{$bundle_key}"; + $columns = [$published_key, $bundle_key, $id_key]; + } + else { + $key = $published_key; + $columns = [$published_key, $id_key]; + } + $schema[$published_field_table]['indexes'][$this->getEntityIndexName($entity_type, $key)] = $columns; + } + } + $this->schema[$entity_type_id] = $schema; // Restore the actual definition. diff --git a/core/modules/comment/src/Tests/Update/CommentUpdateTest.php b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php index 1bf3bdc3409..3db9c4a67b3 100644 --- a/core/modules/comment/src/Tests/Update/CommentUpdateTest.php +++ b/core/modules/comment/src/Tests/Update/CommentUpdateTest.php @@ -66,6 +66,9 @@ class CommentUpdateTest extends UpdatePathTestBase { // Check that the entity key exists and it has the correct value. $entity_type = \Drupal::entityDefinitionUpdateManager()->getEntityType('comment'); $this->assertEqual('status', $entity_type->getKey('published')); + + // Check that the {comment_field_data} table status index has been created. + $this->assertTrue(\Drupal::database()->schema()->indexExists('comment_field_data', 'comment__status_comment_type')); } } diff --git a/core/modules/node/src/NodeStorageSchema.php b/core/modules/node/src/NodeStorageSchema.php index 43bd465dff7..18d6303458a 100644 --- a/core/modules/node/src/NodeStorageSchema.php +++ b/core/modules/node/src/NodeStorageSchema.php @@ -19,7 +19,6 @@ class NodeStorageSchema extends SqlContentEntityStorageSchema { $schema['node_field_data']['indexes'] += array( 'node__frontpage' => array('promote', 'status', 'sticky', 'created'), - 'node__status_type' => array('status', 'type', 'nid'), 'node__title_type' => array('title', array('type', 4)), );