Browse Source

mustikas11: paranda field storage skeemi mismatch

D7->D11 migratsioon jättis väljatabelite langcode veeru varchar(32)-ks
(D11 ootab varchar(12)) ja field_nimi_value varchar(1)-ks (name tüübi
artefakt, config max_length=255).

- fix_schema.php: langcode 32->12 + field_nimi 1->255
- update_field_storage.php: updateFieldStorageDefinition() igale
  field-ile, et uuendada last-installed schema repository
- tulemus: getChangeList() = [] (pole enam mismatcheid)
ardo 1 day ago
parent
commit
cea55402a7

+ 32 - 0
third/drupal/mustikas11/fix_schema.php

@@ -0,0 +1,32 @@
+<?php
+// Paranda D7->D11 migratsiooni skeemi erinevused:
+// 1. langcode varchar(32) -> varchar(12) kõigil node field tabelitel
+// 2. field_nimi_value varchar(1) -> varchar(255) (name tüübi artefakt)
+use Drupal\Core\Database\Database;
+
+$conn = Database::getConnection();
+
+// 1. langcode 32 -> 12
+$tables = $conn->query(
+  "SELECT DISTINCT table_name FROM information_schema.columns
+   WHERE table_schema = :db AND column_name = 'langcode' AND column_type = 'varchar(32)'
+     AND (table_name LIKE 'node__%' OR table_name LIKE 'node_revision__%')",
+  [':db' => $conn->getConnectionOptions()['database']]
+)->fetchCol();
+
+foreach ($tables as $table) {
+  $conn->query("ALTER TABLE {{$table}} MODIFY langcode varchar(12) NOT NULL");
+  echo "langcode 12: $table\n";
+}
+
+// 2. field_nimi_value varchar(1) -> varchar(255)
+foreach (['node__field_nimi', 'node_revision__field_nimi'] as $table) {
+  try {
+    $conn->query("ALTER TABLE {{$table}} MODIFY field_nimi_value varchar(255)");
+    echo "field_nimi_value 255: $table\n";
+  } catch (\Exception $e) {
+    echo "skip $table: " . $e->getMessage() . "\n";
+  }
+}
+
+echo "done\n";

+ 32 - 0
third/drupal/mustikas11/update_field_storage.php

@@ -0,0 +1,32 @@
+<?php
+// Uuenda field storage definition'id, et need ühtiksid DB-skeemiga
+// (ja uuendaks last-installed schema repository).
+use Drupal\Core\Entity\EntityDefinitionUpdateManager;
+
+$update_manager = \Drupal::entityDefinitionUpdateManager();
+$change_list = $update_manager->getChangeList();
+
+$count = 0;
+foreach ($change_list as $entity_type_id => $changes) {
+  if (empty($changes['field_storage_definitions'])) {
+    continue;
+  }
+  $storage_definitions = \Drupal::service('entity_field.manager')
+    ->getFieldStorageDefinitions($entity_type_id);
+
+  foreach ($changes['field_storage_definitions'] as $field_name => $change) {
+    if ($change !== EntityDefinitionUpdateManager::DEFINITION_UPDATED
+        && $change !== EntityDefinitionUpdateManager::DEFINITION_CREATED) {
+      continue;
+    }
+    if (!isset($storage_definitions[$field_name])) {
+      echo "skip (puudub): $entity_type_id.$field_name\n";
+      continue;
+    }
+    $update_manager->updateFieldStorageDefinition($storage_definitions[$field_name]);
+    echo "uuendatud: $entity_type_id.$field_name\n";
+    $count++;
+  }
+}
+
+echo "done ($count)\n";