Revert "Revert "Issue #2834291 by claudiu.cristea, Berdir, amateescu, timmillwood, catch: Add a SQL index for entity types that are using EntityPublishedInterface""

This reverts commit d2e8cbdc2e.
8.3.x
Nathaniel Catchpole 2016-12-29 16:26:55 +00:00
parent d1eacac2e2
commit 83018b7596
3 changed files with 22 additions and 1 deletions

View File

@ -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.

View File

@ -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'));
}
}

View File

@ -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)),
);