From 62fc0856d38c8f975ec47e5ffc009bfdb1141e88 Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Wed, 21 Feb 2024 14:43:45 +0100 Subject: [PATCH 1/4] Use native UUID column type on MariaDB --- .../Database/Schema/Grammars/MariaDbGrammar.php | 11 +++++++++++ tests/Database/DatabaseMariaDbSchemaGrammarTest.php | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index 3f418c22e6fc..39ae68619127 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -54,6 +54,17 @@ public function compileRenameColumn(Blueprint $blueprint, Fluent $command, Conne return parent::compileRenameColumn($blueprint, $command, $connection); } + /** + * Create the column definition for a uuid type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeUuid(Fluent $column) + { + return 'uuid'; + } + /** * Create the column definition for a spatial Geometry type. * diff --git a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php index 601e7479c568..c78355e4f768 100755 --- a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php +++ b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php @@ -57,7 +57,7 @@ public function testBasicCreateTable() $statements = $blueprint->toSql($conn, $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('create table `users` (`id` char(36) not null, primary key (`id`))', $statements[0]); + $this->assertSame('create table `users` (`id` uuid not null, primary key (`id`))', $statements[0]); } public function testAutoIncrementStartingValue() @@ -1090,7 +1090,7 @@ public function testAddingUuid() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `foo` char(36) not null', $statements[0]); + $this->assertSame('alter table `users` add `foo` uuid not null', $statements[0]); } public function testAddingUuidDefaultsColumnName() @@ -1100,7 +1100,7 @@ public function testAddingUuidDefaultsColumnName() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `uuid` char(36) not null', $statements[0]); + $this->assertSame('alter table `users` add `uuid` uuid not null', $statements[0]); } public function testAddingForeignUuid() @@ -1116,7 +1116,7 @@ public function testAddingForeignUuid() $this->assertInstanceOf(ForeignIdColumnDefinition::class, $foreignUuid); $this->assertSame([ - 'alter table `users` add `foo` char(36) not null, add `company_id` char(36) not null, add `laravel_idea_id` char(36) not null, add `team_id` char(36) not null, add `team_column_id` char(36) not null', + 'alter table `users` add `foo` uuid not null, add `company_id` uuid not null, add `laravel_idea_id` uuid not null, add `team_id` uuid not null, add `team_column_id` uuid not null', 'alter table `users` add constraint `users_company_id_foreign` foreign key (`company_id`) references `companies` (`id`)', 'alter table `users` add constraint `users_laravel_idea_id_foreign` foreign key (`laravel_idea_id`) references `laravel_ideas` (`id`)', 'alter table `users` add constraint `users_team_id_foreign` foreign key (`team_id`) references `teams` (`id`)', From 3859a4e2ca03398628360715c16de2cb08e26f82 Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Fri, 23 Feb 2024 01:27:34 +0100 Subject: [PATCH 2/4] Revert changes --- .../Database/Schema/Grammars/MariaDbGrammar.php | 11 ----------- tests/Database/DatabaseMariaDbSchemaGrammarTest.php | 8 ++++---- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index 39ae68619127..3f418c22e6fc 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -54,17 +54,6 @@ public function compileRenameColumn(Blueprint $blueprint, Fluent $command, Conne return parent::compileRenameColumn($blueprint, $command, $connection); } - /** - * Create the column definition for a uuid type. - * - * @param \Illuminate\Support\Fluent $column - * @return string - */ - protected function typeUuid(Fluent $column) - { - return 'uuid'; - } - /** * Create the column definition for a spatial Geometry type. * diff --git a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php index c78355e4f768..601e7479c568 100755 --- a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php +++ b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php @@ -57,7 +57,7 @@ public function testBasicCreateTable() $statements = $blueprint->toSql($conn, $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('create table `users` (`id` uuid not null, primary key (`id`))', $statements[0]); + $this->assertSame('create table `users` (`id` char(36) not null, primary key (`id`))', $statements[0]); } public function testAutoIncrementStartingValue() @@ -1090,7 +1090,7 @@ public function testAddingUuid() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `foo` uuid not null', $statements[0]); + $this->assertSame('alter table `users` add `foo` char(36) not null', $statements[0]); } public function testAddingUuidDefaultsColumnName() @@ -1100,7 +1100,7 @@ public function testAddingUuidDefaultsColumnName() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `uuid` uuid not null', $statements[0]); + $this->assertSame('alter table `users` add `uuid` char(36) not null', $statements[0]); } public function testAddingForeignUuid() @@ -1116,7 +1116,7 @@ public function testAddingForeignUuid() $this->assertInstanceOf(ForeignIdColumnDefinition::class, $foreignUuid); $this->assertSame([ - 'alter table `users` add `foo` uuid not null, add `company_id` uuid not null, add `laravel_idea_id` uuid not null, add `team_id` uuid not null, add `team_column_id` uuid not null', + 'alter table `users` add `foo` char(36) not null, add `company_id` char(36) not null, add `laravel_idea_id` char(36) not null, add `team_id` char(36) not null, add `team_column_id` char(36) not null', 'alter table `users` add constraint `users_company_id_foreign` foreign key (`company_id`) references `companies` (`id`)', 'alter table `users` add constraint `users_laravel_idea_id_foreign` foreign key (`laravel_idea_id`) references `laravel_ideas` (`id`)', 'alter table `users` add constraint `users_team_id_foreign` foreign key (`team_id`) references `teams` (`id`)', From f1cfe02551e849b3c20039a916927a62a0bd2eae Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Fri, 23 Feb 2024 01:39:15 +0100 Subject: [PATCH 3/4] Add column type for native UUID --- src/Illuminate/Database/Schema/Blueprint.php | 11 +++++++++++ src/Illuminate/Database/Schema/Grammars/Grammar.php | 11 +++++++++++ .../Database/Schema/Grammars/MariaDbGrammar.php | 11 +++++++++++ .../Database/Schema/Grammars/PostgresGrammar.php | 11 +++++++++++ .../Database/Schema/Grammars/SqlServerGrammar.php | 11 +++++++++++ tests/Database/DatabaseMariaDbSchemaGrammarTest.php | 10 ++++++++++ tests/Database/DatabaseMySqlSchemaGrammarTest.php | 11 +++++++++++ tests/Database/DatabasePostgresSchemaGrammarTest.php | 10 ++++++++++ tests/Database/DatabaseSQLiteSchemaGrammarTest.php | 10 ++++++++++ tests/Database/DatabaseSqlServerSchemaGrammarTest.php | 10 ++++++++++ 10 files changed, 106 insertions(+) diff --git a/src/Illuminate/Database/Schema/Blueprint.php b/src/Illuminate/Database/Schema/Blueprint.php index cd254b71b3f2..51a93c3433da 100755 --- a/src/Illuminate/Database/Schema/Blueprint.php +++ b/src/Illuminate/Database/Schema/Blueprint.php @@ -1332,6 +1332,17 @@ public function foreignUlid($column, $length = 26) ])); } + /** + * Create a new native UUID column on the table. + * + * @param string $column + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function nativeUuid($column = 'uuid') + { + return $this->addColumn('nativeUuid', $column); + } + /** * Create a new IP address column on the table. * diff --git a/src/Illuminate/Database/Schema/Grammars/Grammar.php b/src/Illuminate/Database/Schema/Grammars/Grammar.php index 86f4290b39d8..b5519ae33330 100755 --- a/src/Illuminate/Database/Schema/Grammars/Grammar.php +++ b/src/Illuminate/Database/Schema/Grammars/Grammar.php @@ -209,6 +209,17 @@ protected function getType(Fluent $column) return $this->{'type'.ucfirst($column->type)}($column); } + /** + * Create the column definition for a native uuid type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeNativeUuid(Fluent $column) + { + throw new RuntimeException('This database driver does not support the native UUID type.'); + } + /** * Create the column definition for a generated, computed column type. * diff --git a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php index 3f418c22e6fc..1ad4b7402600 100755 --- a/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MariaDbGrammar.php @@ -54,6 +54,17 @@ public function compileRenameColumn(Blueprint $blueprint, Fluent $command, Conne return parent::compileRenameColumn($blueprint, $command, $connection); } + /** + * Create the column definition for a native uuid type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeNativeUuid(Fluent $column) + { + return 'uuid'; + } + /** * Create the column definition for a spatial Geometry type. * diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index aad87542d552..9387e32a84b4 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -995,6 +995,17 @@ protected function typeUuid(Fluent $column) return 'uuid'; } + /** + * Create the column definition for a native uuid type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeNativeUuid(Fluent $column) + { + return $this->typeUuid($column); + } + /** * Create the column definition for an IP address type. * diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index b719f127f3dc..f59743195a53 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -888,6 +888,17 @@ protected function typeUuid(Fluent $column) return 'uniqueidentifier'; } + /** + * Create the column definition for a native uuid type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeNativeUuid(Fluent $column) + { + return $this->typeUuid($column); + } + /** * Create the column definition for an IP address type. * diff --git a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php index 601e7479c568..f855758cfbf1 100755 --- a/tests/Database/DatabaseMariaDbSchemaGrammarTest.php +++ b/tests/Database/DatabaseMariaDbSchemaGrammarTest.php @@ -1124,6 +1124,16 @@ public function testAddingForeignUuid() ], $statements); } + public function testAddingNativeUuid() + { + $blueprint = new Blueprint('users'); + $blueprint->nativeUuid('foo'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + + $this->assertCount(1, $statements); + $this->assertSame('alter table `users` add `foo` uuid not null', $statements[0]); + } + public function testAddingIpAddress() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabaseMySqlSchemaGrammarTest.php b/tests/Database/DatabaseMySqlSchemaGrammarTest.php index e5eb104605ea..3bbf365fbc5e 100755 --- a/tests/Database/DatabaseMySqlSchemaGrammarTest.php +++ b/tests/Database/DatabaseMySqlSchemaGrammarTest.php @@ -10,6 +10,7 @@ use Illuminate\Tests\Database\Fixtures\Enums\Foo; use Mockery as m; use PHPUnit\Framework\TestCase; +use RuntimeException; class DatabaseMySqlSchemaGrammarTest extends TestCase { @@ -1124,6 +1125,16 @@ public function testAddingForeignUuid() ], $statements); } + public function testAddingNativeUuid() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('This database driver does not support the native UUID type.'); + + $blueprint = new Blueprint('users'); + $blueprint->nativeUuid('foo'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + } + public function testAddingIpAddress() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabasePostgresSchemaGrammarTest.php b/tests/Database/DatabasePostgresSchemaGrammarTest.php index c95601e92223..82380294b48e 100755 --- a/tests/Database/DatabasePostgresSchemaGrammarTest.php +++ b/tests/Database/DatabasePostgresSchemaGrammarTest.php @@ -923,6 +923,16 @@ public function testAddingForeignUuid() ], $statements); } + public function testAddingNativeUuid() + { + $blueprint = new Blueprint('users'); + $blueprint->nativeUuid('foo'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + + $this->assertCount(1, $statements); + $this->assertSame('alter table "users" add column "foo" uuid not null', $statements[0]); + } + public function testAddingGeneratedAs() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php index ece08b8ae087..ca5863065967 100755 --- a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php +++ b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php @@ -742,6 +742,16 @@ public function testAddingForeignUuid() ], $statements); } + public function testAddingNativeUuid() + { + $this->expectException(RuntimeException::class); + $this->expectExceptionMessage('This database driver does not support the native UUID type.'); + + $blueprint = new Blueprint('users'); + $blueprint->nativeUuid('foo'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + } + public function testAddingIpAddress() { $blueprint = new Blueprint('users'); diff --git a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php index 7fb9a89f08fc..527c7ead8b71 100755 --- a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php +++ b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php @@ -783,6 +783,16 @@ public function testAddingForeignUuid() ], $statements); } + public function testAddingNativeUuid() + { + $blueprint = new Blueprint('users'); + $blueprint->nativeUuid('foo'); + $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); + + $this->assertCount(1, $statements); + $this->assertSame('alter table "users" add "foo" uniqueidentifier not null', $statements[0]); + } + public function testAddingIpAddress() { $blueprint = new Blueprint('users'); From 3dcbe763ab46348894d104cc6bf0618006f42e0e Mon Sep 17 00:00:00 2001 From: Jonas Staudenmeir Date: Fri, 23 Feb 2024 01:41:48 +0100 Subject: [PATCH 4/4] Refactoring --- src/Illuminate/Database/Schema/Blueprint.php | 22 ++++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Illuminate/Database/Schema/Blueprint.php b/src/Illuminate/Database/Schema/Blueprint.php index 51a93c3433da..7714786591e9 100755 --- a/src/Illuminate/Database/Schema/Blueprint.php +++ b/src/Illuminate/Database/Schema/Blueprint.php @@ -1304,6 +1304,17 @@ public function foreignUuid($column) ])); } + /** + * Create a new native UUID column on the table. + * + * @param string $column + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function nativeUuid($column = 'uuid') + { + return $this->addColumn('nativeUuid', $column); + } + /** * Create a new ULID column on the table. * @@ -1332,17 +1343,6 @@ public function foreignUlid($column, $length = 26) ])); } - /** - * Create a new native UUID column on the table. - * - * @param string $column - * @return \Illuminate\Database\Schema\ColumnDefinition - */ - public function nativeUuid($column = 'uuid') - { - return $this->addColumn('nativeUuid', $column); - } - /** * Create a new IP address column on the table. *