From 764ee751d4fa82966480838a727f1846ee52360a Mon Sep 17 00:00:00 2001 From: JacksonIV Date: Mon, 13 May 2019 17:56:41 +0200 Subject: [PATCH 1/3] Fix the collation bug when changing columns in a migration. --- .../Database/Schema/Grammars/ChangeColumn.php | 3 ++ ...DatabaseSchemaBlueprintIntegrationTest.php | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php b/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php index 3941cd318262..d449dfc71ff0 100644 --- a/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php +++ b/src/Illuminate/Database/Schema/Grammars/ChangeColumn.php @@ -82,7 +82,10 @@ protected static function getTableWithColumnChanges(Blueprint $blueprint, Table if (! is_null($option = static::mapFluentOptionToDoctrine($key))) { if (method_exists($column, $method = 'set'.ucfirst($option))) { $column->{$method}(static::mapFluentValueToDoctrine($option, $value)); + continue; } + + $column->setCustomSchemaOption($option, static::mapFluentValueToDoctrine($option, $value)); } } } diff --git a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php index bb597d90054f..8c9b15b1a667 100644 --- a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php +++ b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php @@ -73,6 +73,37 @@ public function testRenamingAndChangingColumnsWork() $this->assertEquals($expected, $queries); } + public function testChangingColumnWithCollationWorks() + { + $this->db->connection()->getSchemaBuilder()->create('users', function ($table) { + $table->string('age'); + }); + $blueprint = new Blueprint('users', function ($table) { + $table->integer('age')->collation('RTRIM')->change(); + }); + $blueprint2 = new Blueprint('users', function ($table) { + $table->integer('age')->collation('NOCASE')->change(); + }); + $queries = $blueprint->toSql($this->db->connection(), new SQLiteGrammar); + $queries2 = $blueprint2->toSql($this->db->connection(), new SQLiteGrammar); + $expected = [ + 'CREATE TEMPORARY TABLE __temp__users AS SELECT age FROM users', + 'DROP TABLE users', + 'CREATE TABLE users (age INTEGER NOT NULL COLLATE RTRIM)', + 'INSERT INTO users (age) SELECT age FROM __temp__users', + 'DROP TABLE __temp__users' + ]; + $expected2 = [ + 'CREATE TEMPORARY TABLE __temp__users AS SELECT age FROM users', + 'DROP TABLE users', + 'CREATE TABLE users (age INTEGER NOT NULL COLLATE NOCASE)', + 'INSERT INTO users (age) SELECT age FROM __temp__users', + 'DROP TABLE __temp__users' + ]; + $this->assertEquals($expected, $queries); + $this->assertEquals($expected2, $queries2); + } + public function testRenameIndexWorks() { $this->db->connection()->getSchemaBuilder()->create('users', function ($table) { From 40d3ba829988fbc0389be8e20952f5acecd2d94e Mon Sep 17 00:00:00 2001 From: JacksonIV Date: Mon, 13 May 2019 18:00:22 +0200 Subject: [PATCH 2/3] Fix a styling issue. --- tests/Database/DatabaseSchemaBlueprintIntegrationTest.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php index 8c9b15b1a667..e3c93c1c60a2 100644 --- a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php +++ b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php @@ -78,14 +78,18 @@ public function testChangingColumnWithCollationWorks() $this->db->connection()->getSchemaBuilder()->create('users', function ($table) { $table->string('age'); }); + $blueprint = new Blueprint('users', function ($table) { $table->integer('age')->collation('RTRIM')->change(); }); + $blueprint2 = new Blueprint('users', function ($table) { $table->integer('age')->collation('NOCASE')->change(); }); + $queries = $blueprint->toSql($this->db->connection(), new SQLiteGrammar); $queries2 = $blueprint2->toSql($this->db->connection(), new SQLiteGrammar); + $expected = [ 'CREATE TEMPORARY TABLE __temp__users AS SELECT age FROM users', 'DROP TABLE users', @@ -93,6 +97,7 @@ public function testChangingColumnWithCollationWorks() 'INSERT INTO users (age) SELECT age FROM __temp__users', 'DROP TABLE __temp__users' ]; + $expected2 = [ 'CREATE TEMPORARY TABLE __temp__users AS SELECT age FROM users', 'DROP TABLE users', @@ -100,6 +105,7 @@ public function testChangingColumnWithCollationWorks() 'INSERT INTO users (age) SELECT age FROM __temp__users', 'DROP TABLE __temp__users' ]; + $this->assertEquals($expected, $queries); $this->assertEquals($expected2, $queries2); } From 12e82c5155687082dc5c444e0438f59d2fc901b9 Mon Sep 17 00:00:00 2001 From: JacksonIV Date: Mon, 13 May 2019 18:06:38 +0200 Subject: [PATCH 3/3] Fix a styling issue. --- tests/Database/DatabaseSchemaBlueprintIntegrationTest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php index e3c93c1c60a2..ef73fc384764 100644 --- a/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php +++ b/tests/Database/DatabaseSchemaBlueprintIntegrationTest.php @@ -95,7 +95,7 @@ public function testChangingColumnWithCollationWorks() 'DROP TABLE users', 'CREATE TABLE users (age INTEGER NOT NULL COLLATE RTRIM)', 'INSERT INTO users (age) SELECT age FROM __temp__users', - 'DROP TABLE __temp__users' + 'DROP TABLE __temp__users', ]; $expected2 = [ @@ -103,7 +103,7 @@ public function testChangingColumnWithCollationWorks() 'DROP TABLE users', 'CREATE TABLE users (age INTEGER NOT NULL COLLATE NOCASE)', 'INSERT INTO users (age) SELECT age FROM __temp__users', - 'DROP TABLE __temp__users' + 'DROP TABLE __temp__users', ]; $this->assertEquals($expected, $queries);