From 2da80d09ca03c79eeeac27933c82f3a13681423c Mon Sep 17 00:00:00 2001 From: Hafez Divandari Date: Mon, 30 Oct 2023 21:52:39 +0330 Subject: [PATCH 1/4] make floating-types consistent --- src/Illuminate/Database/Schema/Blueprint.php | 59 +++---------------- .../Database/Schema/Grammars/MySqlGrammar.php | 10 ++-- .../Schema/Grammars/PostgresGrammar.php | 6 +- .../Schema/Grammars/SQLiteGrammar.php | 2 +- .../Schema/Grammars/SqlServerGrammar.php | 6 +- 5 files changed, 23 insertions(+), 60 deletions(-) diff --git a/src/Illuminate/Database/Schema/Blueprint.php b/src/Illuminate/Database/Schema/Blueprint.php index ec5a87bb2399..9986ce9ea54c 100755 --- a/src/Illuminate/Database/Schema/Blueprint.php +++ b/src/Illuminate/Database/Schema/Blueprint.php @@ -958,28 +958,23 @@ public function foreignIdFor($model, $column = null) * Create a new float column on the table. * * @param string $column - * @param int $total - * @param int $places - * @param bool $unsigned + * @param int $precision * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function float($column, $total = 8, $places = 2, $unsigned = false) + public function float($column, $precision = 53) { - return $this->addColumn('float', $column, compact('total', 'places', 'unsigned')); + return $this->addColumn('float', $column, compact('precision')); } /** * Create a new double column on the table. * * @param string $column - * @param int|null $total - * @param int|null $places - * @param bool $unsigned * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function double($column, $total = 15, $places = 6, $unsigned = false) + public function double($column) { - return $this->addColumn('double', $column, compact('total', 'places', 'unsigned')); + return $this->addColumn('double', $column); } /** @@ -988,51 +983,11 @@ public function double($column, $total = 15, $places = 6, $unsigned = false) * @param string $column * @param int $total * @param int $places - * @param bool $unsigned - * @return \Illuminate\Database\Schema\ColumnDefinition - */ - public function decimal($column, $total = 8, $places = 2, $unsigned = false) - { - return $this->addColumn('decimal', $column, compact('total', 'places', 'unsigned')); - } - - /** - * Create a new unsigned float column on the table. - * - * @param string $column - * @param int $total - * @param int $places - * @return \Illuminate\Database\Schema\ColumnDefinition - */ - public function unsignedFloat($column, $total = 8, $places = 2) - { - return $this->float($column, $total, $places, true); - } - - /** - * Create a new unsigned double column on the table. - * - * @param string $column - * @param int $total - * @param int $places - * @return \Illuminate\Database\Schema\ColumnDefinition - */ - public function unsignedDouble($column, $total = null, $places = null) - { - return $this->double($column, $total, $places, true); - } - - /** - * Create a new unsigned decimal column on the table. - * - * @param string $column - * @param int $total - * @param int $places * @return \Illuminate\Database\Schema\ColumnDefinition */ - public function unsignedDecimal($column, $total = 8, $places = 2) + public function decimal($column, $total = 8, $places = 2) { - return $this->decimal($column, $total, $places, true); + return $this->addColumn('decimal', $column, compact('total', 'places')); } /** diff --git a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php index 7f940b95f975..1d0fce442c2e 100755 --- a/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/MySqlGrammar.php @@ -716,7 +716,11 @@ protected function typeSmallInteger(Fluent $column) */ protected function typeFloat(Fluent $column) { - return $this->typeDouble($column); + if ($column->precision) { + return "float({$column->precision})"; + } + + return 'float'; } /** @@ -727,10 +731,6 @@ protected function typeFloat(Fluent $column) */ protected function typeDouble(Fluent $column) { - if ($column->total && $column->places) { - return "double({$column->total}, {$column->places})"; - } - return 'double'; } diff --git a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php index 845e818de542..f3e0e42cacd7 100755 --- a/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/PostgresGrammar.php @@ -756,7 +756,11 @@ protected function typeSmallInteger(Fluent $column) */ protected function typeFloat(Fluent $column) { - return $this->typeDouble($column); + if ($column->precision) { + return "float({$column->precision})"; + } + + return 'float'; } /** diff --git a/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php b/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php index 4a07a52ecc11..108ce38f228b 100755 --- a/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SQLiteGrammar.php @@ -636,7 +636,7 @@ protected function typeFloat(Fluent $column) */ protected function typeDouble(Fluent $column) { - return 'float'; + return 'double'; } /** diff --git a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php index d70aedadc0e9..4a3576a5a471 100755 --- a/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php +++ b/src/Illuminate/Database/Schema/Grammars/SqlServerGrammar.php @@ -653,6 +653,10 @@ protected function typeSmallInteger(Fluent $column) */ protected function typeFloat(Fluent $column) { + if ($column->precision) { + return "float({$column->precision})"; + } + return 'float'; } @@ -664,7 +668,7 @@ protected function typeFloat(Fluent $column) */ protected function typeDouble(Fluent $column) { - return 'float'; + return 'double precision'; } /** From 57276f4ac886940b9f8d19a644eeb31693e46022 Mon Sep 17 00:00:00 2001 From: Hafez Divandari Date: Mon, 30 Oct 2023 22:05:20 +0330 Subject: [PATCH 2/4] fix tests --- .../Database/DatabaseMySqlSchemaGrammarTest.php | 16 +++------------- .../DatabasePostgresSchemaGrammarTest.php | 6 +++--- .../Database/DatabaseSQLiteSchemaGrammarTest.php | 6 +++--- .../DatabaseSqlServerSchemaGrammarTest.php | 8 ++++---- .../Database/DatabaseSchemaBlueprintTest.php | 4 ++-- 5 files changed, 15 insertions(+), 25 deletions(-) diff --git a/tests/Database/DatabaseMySqlSchemaGrammarTest.php b/tests/Database/DatabaseMySqlSchemaGrammarTest.php index d601b04a6fb0..44db739a2b8f 100755 --- a/tests/Database/DatabaseMySqlSchemaGrammarTest.php +++ b/tests/Database/DatabaseMySqlSchemaGrammarTest.php @@ -742,11 +742,11 @@ public function testAddingTinyInteger() public function testAddingFloat() { $blueprint = new Blueprint('users'); - $blueprint->float('foo', 5, 2); + $blueprint->float('foo', 5); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `foo` double(5, 2) not null', $statements[0]); + $this->assertSame('alter table `users` add `foo` float(5) not null', $statements[0]); } public function testAddingDouble() @@ -756,17 +756,7 @@ public function testAddingDouble() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `foo` double(15, 6) not null', $statements[0]); - } - - public function testAddingDoubleSpecifyingPrecision() - { - $blueprint = new Blueprint('users'); - $blueprint->double('foo', 15, 8); - $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); - - $this->assertCount(1, $statements); - $this->assertSame('alter table `users` add `foo` double(15, 8) not null', $statements[0]); + $this->assertSame('alter table `users` add `foo` double not null', $statements[0]); } public function testAddingDecimal() diff --git a/tests/Database/DatabasePostgresSchemaGrammarTest.php b/tests/Database/DatabasePostgresSchemaGrammarTest.php index db139e523280..133cde50065d 100755 --- a/tests/Database/DatabasePostgresSchemaGrammarTest.php +++ b/tests/Database/DatabasePostgresSchemaGrammarTest.php @@ -605,17 +605,17 @@ public function testAddingSmallInteger() public function testAddingFloat() { $blueprint = new Blueprint('users'); - $blueprint->float('foo', 5, 2); + $blueprint->float('foo', 5); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table "users" add column "foo" double precision not null', $statements[0]); + $this->assertSame('alter table "users" add column "foo" float(5) precision not null', $statements[0]); } public function testAddingDouble() { $blueprint = new Blueprint('users'); - $blueprint->double('foo', 15, 8); + $blueprint->double('foo'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); diff --git a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php index a414e813a49a..551ce3ca9550 100755 --- a/tests/Database/DatabaseSQLiteSchemaGrammarTest.php +++ b/tests/Database/DatabaseSQLiteSchemaGrammarTest.php @@ -463,7 +463,7 @@ public function testAddingSmallInteger() public function testAddingFloat() { $blueprint = new Blueprint('users'); - $blueprint->float('foo', 5, 2); + $blueprint->float('foo', 5); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); @@ -473,11 +473,11 @@ public function testAddingFloat() public function testAddingDouble() { $blueprint = new Blueprint('users'); - $blueprint->double('foo', 15, 8); + $blueprint->double('foo'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table "users" add column "foo" float not null', $statements[0]); + $this->assertSame('alter table "users" add column "foo" double not null', $statements[0]); } public function testAddingDecimal() diff --git a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php index cc110d1edaad..4dec15caebb8 100755 --- a/tests/Database/DatabaseSqlServerSchemaGrammarTest.php +++ b/tests/Database/DatabaseSqlServerSchemaGrammarTest.php @@ -509,21 +509,21 @@ public function testAddingSmallInteger() public function testAddingFloat() { $blueprint = new Blueprint('users'); - $blueprint->float('foo', 5, 2); + $blueprint->float('foo', 5); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table "users" add "foo" float not null', $statements[0]); + $this->assertSame('alter table "users" add "foo" float(5) not null', $statements[0]); } public function testAddingDouble() { $blueprint = new Blueprint('users'); - $blueprint->double('foo', 15, 2); + $blueprint->double('foo'); $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table "users" add "foo" float not null', $statements[0]); + $this->assertSame('alter table "users" add "foo" double precision not null', $statements[0]); } public function testAddingDecimal() diff --git a/tests/Integration/Database/DatabaseSchemaBlueprintTest.php b/tests/Integration/Database/DatabaseSchemaBlueprintTest.php index 66a217a02f15..3dee06143062 100644 --- a/tests/Integration/Database/DatabaseSchemaBlueprintTest.php +++ b/tests/Integration/Database/DatabaseSchemaBlueprintTest.php @@ -123,7 +123,7 @@ public function testNativeColumnModifyingOnMySql() $schema->useNativeSchemaOperationsIfPossible(); $blueprint = new Blueprint('users', function ($table) { - $table->double('amount', 6, 2)->nullable()->invisible()->after('name')->change(); + $table->double('amount')->nullable()->invisible()->after('name')->change(); $table->timestamp('added_at', 4)->nullable(false)->useCurrent()->useCurrentOnUpdate()->change(); $table->enum('difficulty', ['easy', 'hard'])->default('easy')->charset('utf8mb4')->collation('unicode')->change(); $table->multiPolygon('positions')->srid(1234)->storedAs('expression')->change(); @@ -133,7 +133,7 @@ public function testNativeColumnModifyingOnMySql() $this->assertEquals([ 'alter table `users` ' - .'modify `amount` double(6, 2) null invisible after `name`, ' + .'modify `amount` double null invisible after `name`, ' .'modify `added_at` timestamp(4) not null default CURRENT_TIMESTAMP(4) on update CURRENT_TIMESTAMP(4), ' ."modify `difficulty` enum('easy', 'hard') character set utf8mb4 collate 'unicode' not null default 'easy', " .'modify `positions` multipolygon as (expression) stored srid 1234, ' From 773b71f3e9039f497503239538cf77bd4dfbac75 Mon Sep 17 00:00:00 2001 From: Hafez Divandari Date: Mon, 30 Oct 2023 22:09:48 +0330 Subject: [PATCH 3/4] fix tests --- tests/Database/DatabasePostgresSchemaGrammarTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Database/DatabasePostgresSchemaGrammarTest.php b/tests/Database/DatabasePostgresSchemaGrammarTest.php index 133cde50065d..7519f3e578ac 100755 --- a/tests/Database/DatabasePostgresSchemaGrammarTest.php +++ b/tests/Database/DatabasePostgresSchemaGrammarTest.php @@ -609,7 +609,7 @@ public function testAddingFloat() $statements = $blueprint->toSql($this->getConnection(), $this->getGrammar()); $this->assertCount(1, $statements); - $this->assertSame('alter table "users" add column "foo" float(5) precision not null', $statements[0]); + $this->assertSame('alter table "users" add column "foo" float(5) not null', $statements[0]); } public function testAddingDouble() From 680eccd18b655c74de9d125c5721cf1383bb7314 Mon Sep 17 00:00:00 2001 From: Hafez Divandari Date: Mon, 30 Oct 2023 22:14:45 +0330 Subject: [PATCH 4/4] fix tests --- tests/Database/DatabaseSchemaBlueprintTest.php | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/tests/Database/DatabaseSchemaBlueprintTest.php b/tests/Database/DatabaseSchemaBlueprintTest.php index 884434ddc642..b1bf206988ee 100755 --- a/tests/Database/DatabaseSchemaBlueprintTest.php +++ b/tests/Database/DatabaseSchemaBlueprintTest.php @@ -146,18 +146,6 @@ public function testDefaultCurrentTimestamp() $this->assertEquals(['alter table "users" add "created" datetime not null default CURRENT_TIMESTAMP'], $blueprint->toSql($connection, new SqlServerGrammar)); } - public function testUnsignedDecimalTable() - { - $base = new Blueprint('users', function ($table) { - $table->unsignedDecimal('money', 10, 2)->useCurrent(); - }); - - $connection = m::mock(Connection::class); - - $blueprint = clone $base; - $this->assertEquals(['alter table `users` add `money` decimal(10, 2) unsigned not null'], $blueprint->toSql($connection, new MySqlGrammar)); - } - public function testRemoveColumn() { $base = new Blueprint('users', function ($table) {