From 231a703be9b3e9b50855bde7bd3571934e8863f4 Mon Sep 17 00:00:00 2001 From: Mior Muhammad Zaki Date: Wed, 17 Nov 2021 22:29:04 +0800 Subject: [PATCH] [6.x] Fixes Query Builder to only cast integer when given other than `null` (#39644) * Add failing tests Signed-off-by: Mior Muhammad Zaki * Only cast integer when given other than null Signed-off-by: Mior Muhammad Zaki * Improve tests Signed-off-by: Mior Muhammad Zaki --- src/Illuminate/Database/Query/Builder.php | 2 +- tests/Database/DatabaseQueryBuilderTest.php | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Query/Builder.php b/src/Illuminate/Database/Query/Builder.php index fc3b9d86c445..60c61f441594 100755 --- a/src/Illuminate/Database/Query/Builder.php +++ b/src/Illuminate/Database/Query/Builder.php @@ -1959,7 +1959,7 @@ public function limit($value) $property = $this->unions ? 'unionLimit' : 'limit'; if ($value >= 0) { - $this->$property = (int) $value; + $this->$property = ! is_null($value) ? (int) $value : null; } return $this; diff --git a/tests/Database/DatabaseQueryBuilderTest.php b/tests/Database/DatabaseQueryBuilderTest.php index 8607434fea1a..a254f8ea443d 100755 --- a/tests/Database/DatabaseQueryBuilderTest.php +++ b/tests/Database/DatabaseQueryBuilderTest.php @@ -1249,6 +1249,14 @@ public function testLimitsAndOffsets() $builder->select('*')->from('users')->offset(5)->limit(10); $this->assertSame('select * from "users" limit 10 offset 5', $builder->toSql()); + $builder = $this->getBuilder(); + $builder->select('*')->from('users')->limit(null); + $this->assertSame('select * from "users"', $builder->toSql()); + + $builder = $this->getBuilder(); + $builder->select('*')->from('users')->limit(0); + $this->assertSame('select * from "users" limit 0', $builder->toSql()); + $builder = $this->getBuilder(); $builder->select('*')->from('users')->skip(5)->take(10); $this->assertSame('select * from "users" limit 10 offset 5', $builder->toSql()); @@ -1260,6 +1268,14 @@ public function testLimitsAndOffsets() $builder = $this->getBuilder(); $builder->select('*')->from('users')->skip(-5)->take(-10); $this->assertSame('select * from "users" offset 0', $builder->toSql()); + + $builder = $this->getBuilder(); + $builder->select('*')->from('users')->skip(null)->take(null); + $this->assertSame('select * from "users" offset 0', $builder->toSql()); + + $builder = $this->getBuilder(); + $builder->select('*')->from('users')->skip(5)->take(null); + $this->assertSame('select * from "users" offset 5', $builder->toSql()); } public function testForPage()