You are here

protected function SqlContentEntityStorageSchema::hasColumnChanges in Drupal 9

Same name and namespace in other branches
  1. 8 core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema::hasColumnChanges()
  2. 10 core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php \Drupal\Core\Entity\Sql\SqlContentEntityStorageSchema::hasColumnChanges()

Compares schemas to check for changes in the column definitions.

Parameters

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

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

Return value

bool Returns TRUE if there are schema changes in the column definitions.

2 calls to SqlContentEntityStorageSchema::hasColumnChanges()
SqlContentEntityStorageSchema::updateDedicatedTableSchema in core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
Updates the schema for a field stored in a shared table.
SqlContentEntityStorageSchema::updateSharedTableSchema in core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php
Updates the schema for a field stored in a shared table.

File

core/lib/Drupal/Core/Entity/Sql/SqlContentEntityStorageSchema.php, line 2466

Class

SqlContentEntityStorageSchema
Defines a schema handler that supports revisionable, translatable entities.

Namespace

Drupal\Core\Entity\Sql

Code

protected function hasColumnChanges(FieldStorageDefinitionInterface $storage_definition, FieldStorageDefinitionInterface $original) {
  if ($storage_definition
    ->getColumns() != $original
    ->getColumns()) {

    // Base field definitions have schema data stored in the original
    // definition.
    return TRUE;
  }
  if (!$storage_definition
    ->hasCustomStorage()) {
    $keys = array_flip($this
      ->getColumnSchemaRelevantKeys());
    $definition_schema = $this
      ->getSchemaFromStorageDefinition($storage_definition);
    foreach ($this
      ->loadFieldSchemaData($original) as $table => $table_schema) {
      foreach ($table_schema['fields'] as $name => $spec) {
        $definition_spec = array_intersect_key($definition_schema[$table]['fields'][$name], $keys);
        $stored_spec = array_intersect_key($spec, $keys);
        if ($definition_spec != $stored_spec) {
          return TRUE;
        }
      }
    }
  }
  return FALSE;
}