Require a `_fk` suffix for explicit FOREIGN KEY names
authorTim Düsterhus <duesterhus@woltlab.com>
Tue, 1 Aug 2023 12:11:17 +0000 (14:11 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Tue, 1 Aug 2023 12:11:17 +0000 (14:11 +0200)
This is required to correctly uninstall these FOREIGN KEYs.

wcfsetup/install/files/lib/system/database/table/DatabaseTableChangeProcessor.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

index 3b9a902594aa0b99479ca922441301e71892bc4c..700b165d15612b5fb84d65d23fa7784747be4703 100644 (file)
@@ -1284,6 +1284,16 @@ final class DatabaseTableChangeProcessor
                             'type' => 'unknownTableInForeignKey',
                         ];
                     }
+
+                    if (!\str_ends_with($foreignKey->getName(), '_fk') && !$foreignKey->willBeDropped()) {
+                        $errors[] = [
+                            'name' => $foreignKey->getName(),
+                            'columnNames' => \implode(',', $foreignKey->getColumns()),
+                            'referencedTableName' => $foreignKey->getReferencedTable(),
+                            'tableName' => $table->getName(),
+                            'type' => 'missingFkSuffixInForeignKey',
+                        ];
+                    }
                 }
             }
         }
index 63d3eb4a121e74e5af1280bbcef9b1c7abdc73ca..154bbf8d120de60e4fec9fdea5f119898355415a 100644 (file)
@@ -1985,6 +1985,8 @@ Die Datenbestände werden sorgfältig gepflegt, aber es ist nicht ausgeschlossen
                Der Fremdschlüssel {$error[tableName]} ({$error[columnNames]}) gehört zu einem anderen Paket und kann deshalb nicht gelöscht werden.
        {else if $error[type] === 'unknownTableInForeignKey'}
                Der Fremdschlüssel {$error[tableName]} ({$error[columnNames]}) referenziert eine unbekannte Tabelle {$error[referencedTableName]}.
+       {else if $error[type] === 'missingFkSuffixInForeignKey'}
+               Der Name des Fremdschlüssels {$error[name]} hat kein '_fk'-Suffix.
        {else if $error[type] === 'duplicateColumnInIndex'}
                Der Index {$error[tableName]} ({$error[columnNames]}) enthält doppelte Spalten.
        {else if $error[type] === 'primaryNotCalledPrimary'}
index a46f633239db88417b673922d2521bc3ea4bea3a..3b4c860e74612f9296b325861560d17d26f89550 100644 (file)
@@ -1968,6 +1968,8 @@ If you have <strong>already bought the licenses for the listed apps</strong>, th
                The foreign key {$error[tableName]} ({$error[columnNames]}) belongs to a different package and thus cannot be dropped.
        {else if $error[type] === 'unknownTableInForeignKey'}
                The foreign key {$error[tableName]} ({$error[columnNames]}) references an unknown table {$error[referencedTableName]}.
+       {else if $error[type] === 'missingFkSuffixInForeignKey'}
+               The name of foreign key {$error[name]} does not have a '_fk' suffix.
        {else if $error[type] === 'duplicateColumnInIndex'}
                The index {$error[tableName]} ({$error[columnNames]}) contains duplicate columns.
        {else if $error[type] === 'primaryNotCalledPrimary'}