From d19e9955f96f1d0571c501d4dd89ed93d3e67c07 Mon Sep 17 00:00:00 2001 From: Bojan Lozo Date: Thu, 5 Oct 2023 17:55:02 +0200 Subject: [PATCH 1/6] Fixed issue: Added a call to the getValue method. Without this, raw SQL queries in conditions throw an exception. --- src/Illuminate/Database/Query/Grammars/Grammar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 5419ad07fbb3..6efe88b47ada 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -246,7 +246,7 @@ protected function concatenateWhereClauses($query, $sql) */ protected function whereRaw(Builder $query, $where) { - return $where['sql']; + return $where['sql']->getValue($this); } /** From 60039e7e6bebb739438d09c93196e30273649e2a Mon Sep 17 00:00:00 2001 From: Bojan Lozo Date: Thu, 5 Oct 2023 18:11:12 +0200 Subject: [PATCH 2/6] Added check to prevent call on types other than Expression --- src/Illuminate/Database/Query/Grammars/Grammar.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 6efe88b47ada..7750bb00b0d6 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -5,6 +5,7 @@ use Illuminate\Database\Concerns\CompilesJsonPaths; use Illuminate\Database\Grammar as BaseGrammar; use Illuminate\Database\Query\Builder; +use Illuminate\Database\Query\Expression; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Arr; use RuntimeException; @@ -246,7 +247,7 @@ protected function concatenateWhereClauses($query, $sql) */ protected function whereRaw(Builder $query, $where) { - return $where['sql']->getValue($this); + return $where['sql'] instanceof Expression ? $where['sql']->getValue($this) : $where['sql']; } /** From ed40f2963f3a903da550ec496818895d9cdfab22 Mon Sep 17 00:00:00 2001 From: Bojan Lozo Date: Fri, 6 Oct 2023 10:55:27 +0200 Subject: [PATCH 3/6] Added new test cases for the modified method --- tests/Database/DatabaseQueryGrammarTest.php | 43 +++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 tests/Database/DatabaseQueryGrammarTest.php diff --git a/tests/Database/DatabaseQueryGrammarTest.php b/tests/Database/DatabaseQueryGrammarTest.php new file mode 100644 index 000000000000..6d8dc90426e2 --- /dev/null +++ b/tests/Database/DatabaseQueryGrammarTest.php @@ -0,0 +1,43 @@ +getMethod('whereRaw'); + $expression = ['sql' => new Expression('select * from "users"')]; + + $rawQuery = $method->invoke($grammar, $builder, $expression); + + $this->assertSame('select * from "users"', $rawQuery); + } + + public function testWhereRawReturnsStringWhenStringPassed() + { + $builder = m::mock(Builder::class); + $grammar = new Grammar; + $reflection = new ReflectionClass($grammar); + $method = $reflection->getMethod('whereRaw'); + $array = ['sql' => 'select * from "users"']; + + $rawQuery = $method->invoke($grammar, $builder, $array); + + $this->assertSame('select * from "users"', $rawQuery); + } +} From fc32a7022ebf9095e4fde44a59a346c01d66db80 Mon Sep 17 00:00:00 2001 From: Bojan Lozo Date: Fri, 6 Oct 2023 10:56:57 +0200 Subject: [PATCH 4/6] Refactored the variable names --- tests/Database/DatabaseQueryGrammarTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Database/DatabaseQueryGrammarTest.php b/tests/Database/DatabaseQueryGrammarTest.php index 6d8dc90426e2..c454a58932d1 100644 --- a/tests/Database/DatabaseQueryGrammarTest.php +++ b/tests/Database/DatabaseQueryGrammarTest.php @@ -21,9 +21,9 @@ public function testWhereRawReturnsStringWhenExpressionPassed() $grammar = new Grammar; $reflection = new ReflectionClass($grammar); $method = $reflection->getMethod('whereRaw'); - $expression = ['sql' => new Expression('select * from "users"')]; + $expressionArray = ['sql' => new Expression('select * from "users"')]; - $rawQuery = $method->invoke($grammar, $builder, $expression); + $rawQuery = $method->invoke($grammar, $builder, $expressionArray); $this->assertSame('select * from "users"', $rawQuery); } @@ -34,9 +34,9 @@ public function testWhereRawReturnsStringWhenStringPassed() $grammar = new Grammar; $reflection = new ReflectionClass($grammar); $method = $reflection->getMethod('whereRaw'); - $array = ['sql' => 'select * from "users"']; + $stringArray = ['sql' => 'select * from "users"']; - $rawQuery = $method->invoke($grammar, $builder, $array); + $rawQuery = $method->invoke($grammar, $builder, $stringArray); $this->assertSame('select * from "users"', $rawQuery); } From f0ef1ebbc0f120fd1734d9c3f11102f8950de58a Mon Sep 17 00:00:00 2001 From: Bojan Lozo Date: Fri, 6 Oct 2023 11:01:50 +0200 Subject: [PATCH 5/6] Fixed a StyleCI issue --- tests/Database/DatabaseQueryGrammarTest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Database/DatabaseQueryGrammarTest.php b/tests/Database/DatabaseQueryGrammarTest.php index c454a58932d1..aee7f822caba 100644 --- a/tests/Database/DatabaseQueryGrammarTest.php +++ b/tests/Database/DatabaseQueryGrammarTest.php @@ -15,6 +15,7 @@ protected function tearDown(): void { m::close(); } + public function testWhereRawReturnsStringWhenExpressionPassed() { $builder = m::mock(Builder::class); From 9f20130209da042c11755270e7f93d81aef31c68 Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Mon, 9 Oct 2023 12:23:56 -0500 Subject: [PATCH 6/6] Update Grammar.php --- src/Illuminate/Database/Query/Grammars/Grammar.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Illuminate/Database/Query/Grammars/Grammar.php b/src/Illuminate/Database/Query/Grammars/Grammar.php index 7750bb00b0d6..3b4f117693f6 100755 --- a/src/Illuminate/Database/Query/Grammars/Grammar.php +++ b/src/Illuminate/Database/Query/Grammars/Grammar.php @@ -2,10 +2,10 @@ namespace Illuminate\Database\Query\Grammars; +use Illuminate\Contracts\Database\Query\Expression; use Illuminate\Database\Concerns\CompilesJsonPaths; use Illuminate\Database\Grammar as BaseGrammar; use Illuminate\Database\Query\Builder; -use Illuminate\Database\Query\Expression; use Illuminate\Database\Query\JoinClause; use Illuminate\Support\Arr; use RuntimeException;