protected Schema::getNormalizedIndexes(array $spec)
Gets normalized indexes from a table specification.
Shortens indexes to 191 characters if they apply to utf8mb4-encoded fields, in order to comply with the InnoDB index limitation of 756 bytes.
Parameters
array $spec: The table specification.
Return value
array List of shortened indexes.
Throws
\Drupal\Core\Database\SchemaException Thrown if field specification is missing.
File
- core/lib/Drupal/Core/Database/Driver/mysql/Schema.php, line 308
Class
- Schema
- MySQL implementation of \Drupal\Core\Database\Schema.
Namespace
Drupal\Core\Database\Driver\mysql
Code
protected function getNormalizedIndexes(array $spec) { $indexes = isset($spec['indexes']) ? $spec['indexes'] : []; foreach ($indexes as $index_name => $index_fields) { foreach ($index_fields as $index_key => $index_field) { // Get the name of the field from the index specification. $field_name = is_array($index_field) ? $index_field[0] : $index_field; // Check whether the field is defined in the table specification. if (isset($spec['fields'][$field_name])) { // Get the MySQL type from the processed field. $mysql_field = $this->processField($spec['fields'][$field_name]); if (in_array($mysql_field['mysql_type'], $this->mysqlStringTypes)) { // Check whether we need to shorten the index. if ((!isset($mysql_field['type']) || $mysql_field['type'] != 'varchar_ascii') && (!isset($mysql_field['length']) || $mysql_field['length'] > 191)) { // Limit the index length to 191 characters. $this->shortenIndex($indexes[$index_name][$index_key]); } } } else { throw new SchemaException("MySQL needs the '$field_name' field specification in order to normalize the '$index_name' index"); } } } return $indexes; }
Please login to continue.