Skip to content
Snippets Groups Projects
Commit 7469f227 authored by catch's avatar catch
Browse files

Issue #2834291 by claudiu.cristea, Berdir, amateescu, timmillwood, catch: Add...

Issue #2834291 by claudiu.cristea, Berdir, amateescu, timmillwood, catch: Add a SQL index for entity types that are using EntityPublishedInterface
parent badbcd33
No related branches found
No related tags found
2 merge requests!7452Issue #1797438. HTML5 validation is preventing form submit and not fully...,!789Issue #3210310: Adjust Database API to remove deprecated Drupal 9 code in Drupal 10
......@@ -7,6 +7,7 @@
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 @@ protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $res
$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.
......
......@@ -66,6 +66,9 @@ public function testPublishedEntityKey() {
// 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'));
}
}
......@@ -19,7 +19,6 @@ protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $res
$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)),
);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment