diff --git a/src/Illuminate/Database/Schema/Blueprint.php b/src/Illuminate/Database/Schema/Blueprint.php index cd254b71b3f2..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. * 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');