diff --git a/src/Controllers/Table/Structure/MoveColumnsController.php b/src/Controllers/Table/Structure/MoveColumnsController.php index 3de73fb9a9..33e7b31d24 100644 --- a/src/Controllers/Table/Structure/MoveColumnsController.php +++ b/src/Controllers/Table/Structure/MoveColumnsController.php @@ -93,12 +93,12 @@ final class MoveColumnsController implements InvocableController $parser = new Parser($createTableSql); /** @var CreateStatement $statement */ $statement = $parser->statements[0]; - /** @var CreateDefinition[] $fields */ + /** @var CreateDefinition[] $fields For CREATE TABLE statement the type is CreateDefinition[] */ $fields = $statement->fields; $columns = []; $columnNames = []; foreach ($fields as $field) { - if ($field->name === null) { + if ($field->name === null || $field->isConstraint === true || $field->key !== null) { continue; } diff --git a/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php b/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php index e1849ebfff..8f5f29b0e4 100644 --- a/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php +++ b/tests/unit/Controllers/Table/Structure/MoveColumnsControllerTest.php @@ -178,6 +178,45 @@ class MoveColumnsControllerTest extends AbstractTestCase CHANGE `0` `0` enum('yes','no') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'no' FIRST SQL, ], + // with foreign key + [ + <<<'SQL' + CREATE TABLE orders ( + order_id INT AUTO_INCREMENT PRIMARY KEY, + user_id INT NOT NULL, + order_date DATE NOT NULL, + amount DECIMAL(10, 2) NOT NULL, + status VARCHAR(50) DEFAULT 'pending', + CONSTRAINT fk_user + FOREIGN KEY (user_id) + REFERENCES users(user_id) + ON DELETE CASCADE + ON UPDATE CASCADE + ) + SQL, + ['order_id','user_id','order_date','status','amount'], + <<<'SQL' + ALTER TABLE `orders` + CHANGE `status` `status` varchar(50) DEFAULT 'pending' AFTER `order_date` + SQL, + ], + // With non-primary index + [ + <<<'SQL' + CREATE TABLE `test_table` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `val` int(11) DEFAULT NULL, + `note` varchar(100) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `val_index` (`val`) + ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci + SQL, + ['id', 'note', 'val'], + <<<'SQL' + ALTER TABLE `test_table` + CHANGE `note` `note` varchar(100) DEFAULT NULL AFTER `id` + SQL, + ], ]; // phpcs:enable }