NodeStorageSchema.php 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace Drupal\node;
  3. use Drupal\Core\Entity\ContentEntityTypeInterface;
  4. use Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema;
  5. use Drupal\Core\Field\FieldStorageDefinitionInterface;
  6. /**
  7. * Defines the node schema handler.
  8. */
  9. class NodeStorageSchema extends SqlContentEntityStorageSchema {
  10. /**
  11. * {@inheritdoc}
  12. */
  13. protected function getEntitySchema(ContentEntityTypeInterface $entity_type, $reset = FALSE) {
  14. $schema = parent::getEntitySchema($entity_type, $reset);
  15. if ($data_table = $this->storage->getDataTable()) {
  16. $schema[$data_table]['indexes'] += [
  17. 'node__frontpage' => ['promote', 'status', 'sticky', 'created'],
  18. 'node__title_type' => ['title', ['type', 4]],
  19. ];
  20. }
  21. return $schema;
  22. }
  23. /**
  24. * {@inheritdoc}
  25. */
  26. protected function getSharedTableFieldSchema(FieldStorageDefinitionInterface $storage_definition, $table_name, array $column_mapping) {
  27. $schema = parent::getSharedTableFieldSchema($storage_definition, $table_name, $column_mapping);
  28. $field_name = $storage_definition->getName();
  29. if ($table_name == 'node_revision') {
  30. switch ($field_name) {
  31. case 'langcode':
  32. $this->addSharedTableFieldIndex($storage_definition, $schema, TRUE);
  33. break;
  34. case 'revision_uid':
  35. $this->addSharedTableFieldForeignKey($storage_definition, $schema, 'users', 'uid');
  36. break;
  37. }
  38. }
  39. if ($table_name == 'node_field_data') {
  40. switch ($field_name) {
  41. case 'promote':
  42. case 'status':
  43. case 'sticky':
  44. case 'title':
  45. // Improves the performance of the indexes defined
  46. // in getEntitySchema().
  47. $schema['fields'][$field_name]['not null'] = TRUE;
  48. break;
  49. case 'changed':
  50. case 'created':
  51. // @todo Revisit index definitions:
  52. // https://www.drupal.org/node/2015277.
  53. $this->addSharedTableFieldIndex($storage_definition, $schema, TRUE);
  54. break;
  55. }
  56. }
  57. return $schema;
  58. }
  59. }