From d834187251af3fe31f7be92f9e5e3d196bc342d4 Mon Sep 17 00:00:00 2001 From: Bennett Treptow Date: Mon, 12 Apr 2021 07:23:06 -0500 Subject: [PATCH] [8.x] Add tinyText data type to Blueprint and to available database grammars (#36949) * Add tinyText to available grammars * Update test to also check that nullable() also works on the new type * Update style --- src/Illuminate/Database/Schema/Blueprint.php | 11 ++++ .../Database/Schema/Grammars/MySqlGrammar.php | 11 ++++ .../Schema/Grammars/PostgresGrammar.php | 11 ++++ .../Schema/Grammars/SQLiteGrammar.php | 11 ++++ .../Schema/Grammars/SqlServerGrammar.php | 11 ++++ .../Database/DatabaseSchemaBlueprintTest.php | 58 +++++++++++++++++++ 6 files changed, 113 insertions(+) diff --git a/src/Illuminate/Database/Schema/Blueprint.php b/src/Illuminate/Database/Schema/Blueprint.php index 622659995410..e2b968ab6bd4 100755 --- a/src/Illuminate/Database/Schema/Blueprint.php +++ b/src/Illuminate/Database/Schema/Blueprint.php @@ -677,6 +677,17 @@ public function string($column, $length = null) return $this->addColumn('string', $column, compact('length')); } + /** + * Create a new tiny text column on the table. + * + * @param string $column + * @return \Illuminate\Database\Schema\ColumnDefinition + */ + public function tinyText($column) + { + return $this->addColumn('tinyText', $column); + } + /** * Create a new text column on the table. * diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index dd53b9fe9bed..37df3337b040 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -490,6 +490,17 @@ protected function typeString(Fluent $column) return "varchar({$column->length})"; } + /** + * Create the column definition for a tiny text type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeTinyText(Fluent $column) + { + return 'tinytext'; + } + /** * Create the column definition for a text type. * diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index adaf21f90e4c..fb7005b09df3 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -472,6 +472,17 @@ protected function typeString(Fluent $column) return "varchar({$column->length})"; } + /** + * Create the column definition for a tiny text type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeTinyText(Fluent $column) + { + return 'varchar(255)'; + } + /** * Create the column definition for a text type. * diff --git a/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php b/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php index 556d749e23b2..b7e406f578ef 100755 --- a/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php @@ -432,6 +432,17 @@ protected function typeString(Fluent $column) return 'varchar'; } + /** + * Create the column definition for a tiny text type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeTinyText(Fluent $column) + { + return 'text'; + } + /** * Create the column definition for a text type. * diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index c3fc442e2368..b147628ec2f3 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -417,6 +417,17 @@ protected function typeString(Fluent $column) return "nvarchar({$column->length})"; } + /** + * Create the column definition for a tiny text type. + * + * @param \Illuminate\Support\Fluent $column + * @return string + */ + protected function typeTinyText(Fluent $column) + { + return 'nvarchar(255)'; + } + /** * Create the column definition for a text type. * diff --git a/tests/Database/DatabaseSchemaBlueprintTest.php b/tests/Database/DatabaseSchemaBlueprintTest.php index 94303415e8f4..5247df35c3ba 100755 --- a/tests/Database/DatabaseSchemaBlueprintTest.php +++ b/tests/Database/DatabaseSchemaBlueprintTest.php @@ -291,4 +291,62 @@ public function testGenerateRelationshipColumnWithUuidModel() 'alter table `posts` add `eloquent_model_uuid_stub_id` char(36) not null', ], $blueprint->toSql($connection, new MySqlGrammar)); } + + public function testTinyTextColumn() + { + $base = new Blueprint('posts', function ($table) { + $table->tinyText('note'); + }); + + $connection = m::mock(Connection::class); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table `posts` add `note` tinytext not null', + ], $blueprint->toSql($connection, new MySqlGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add column "note" text not null', + ], $blueprint->toSql($connection, new SQLiteGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add column "note" varchar(255) not null', + ], $blueprint->toSql($connection, new PostgresGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add "note" nvarchar(255) not null', + ], $blueprint->toSql($connection, new SqlServerGrammar)); + } + + public function testTinyTextNullableColumn() + { + $base = new Blueprint('posts', function ($table) { + $table->tinyText('note')->nullable(); + }); + + $connection = m::mock(Connection::class); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table `posts` add `note` tinytext null', + ], $blueprint->toSql($connection, new MySqlGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add column "note" text', + ], $blueprint->toSql($connection, new SQLiteGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add column "note" varchar(255) null', + ], $blueprint->toSql($connection, new PostgresGrammar)); + + $blueprint = clone $base; + $this->assertEquals([ + 'alter table "posts" add "note" nvarchar(255) null', + ], $blueprint->toSql($connection, new SqlServerGrammar)); + } }