You are here

protected function TermStorageSchema::getDedicatedTableSchema in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/taxonomy/src/TermStorageSchema.php \Drupal\taxonomy\TermStorageSchema::getDedicatedTableSchema()

Gets the SQL schema for a dedicated table.

Parameters

\Drupal\Core\Field\FieldStorageDefinitionInterface $storage_definition: The field storage definition.

\Drupal\Core\Entity\ContentEntityTypeInterface $entity_type: (optional) The entity type definition. Defaults to the one provided by the entity storage.

Return value

array The schema definition for the table with the following keys:

  • fields: The schema definition for the each field columns.
  • indexes: The schema definition for the indexes.
  • unique keys: The schema definition for the unique keys.
  • foreign keys: The schema definition for the foreign keys.

Throws

\Drupal\Core\Field\FieldException Exception thrown if the schema contains reserved column names.

Overrides SqlContentEntityStorageSchema::getDedicatedTableSchema

See also

hook_schema()

File

core/modules/taxonomy/src/TermStorageSchema.php, line 114

Class

TermStorageSchema
Defines the term schema handler.

Namespace

Drupal\taxonomy

Code

protected function getDedicatedTableSchema(FieldStorageDefinitionInterface $storage_definition, ContentEntityTypeInterface $entity_type = NULL) {
  $dedicated_table_schema = parent::getDedicatedTableSchema($storage_definition, $entity_type);

  // Add an index on 'bundle', 'delta' and 'parent_target_id' columns to
  // increase the performance of the query from
  // \Drupal\taxonomy\TermStorage::getVocabularyHierarchyType().
  if ($storage_definition
    ->getName() === 'parent') {

    /** @var \Drupal\Core\Entity\Sql\DefaultTableMapping $table_mapping */
    $table_mapping = $this->storage
      ->getTableMapping();
    $dedicated_table_name = $table_mapping
      ->getDedicatedDataTableName($storage_definition);
    unset($dedicated_table_schema[$dedicated_table_name]['indexes']['bundle']);
    $dedicated_table_schema[$dedicated_table_name]['indexes']['bundle_delta_target_id'] = [
      'bundle',
      'delta',
      $table_mapping
        ->getFieldColumnName($storage_definition, 'target_id'),
    ];
  }
  return $dedicated_table_schema;
}