You are here

protected function DefaultTableMapping::generateFieldTableName in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php \Drupal\Core\Entity\Sql\DefaultTableMapping::generateFieldTableName()

Generates a safe and unambiguous field table name.

The method accounts for a maximum table name length of 64 characters, and takes care of disambiguation.

Parameters

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

bool $revision: TRUE for revision table, FALSE otherwise.

Return value

string The final table name.

2 calls to DefaultTableMapping::generateFieldTableName()
DefaultTableMapping::getDedicatedDataTableName in core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
Generates a table name for a field data table.
DefaultTableMapping::getDedicatedRevisionTableName in core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php
Generates a table name for a field revision archive table.

File

core/lib/Drupal/Core/Entity/Sql/DefaultTableMapping.php, line 378
Contains \Drupal\Core\Entity\Sql\DefaultTableMapping.

Class

DefaultTableMapping
Defines a default table mapping class.

Namespace

Drupal\Core\Entity\Sql

Code

protected function generateFieldTableName(FieldStorageDefinitionInterface $storage_definition, $revision) {
  $separator = $revision ? '_revision__' : '__';
  $table_name = $storage_definition
    ->getTargetEntityTypeId() . $separator . $storage_definition
    ->getName();

  // Limit the string to 48 characters, keeping a 16 characters margin for db
  // prefixes.
  if (strlen($table_name) > 48) {

    // Use a shorter separator, a truncated entity_type, and a hash of the
    // field UUID.
    $separator = $revision ? '_r__' : '__';

    // Truncate to the same length for the current and revision tables.
    $entity_type = substr($storage_definition
      ->getTargetEntityTypeId(), 0, 34);
    $field_hash = substr(hash('sha256', $storage_definition
      ->getUniqueStorageIdentifier()), 0, 10);
    $table_name = $entity_type . $separator . $field_hash;
  }
  return $table_name;
}