Skip to content

Commit e6c267f

Browse files
authored
Merge pull request #50 from moufmouf/case_in_where
Case statement in where condition is removed by magic parameters
2 parents 91dda2c + e1b88d4 commit e6c267f

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

src/SQLParser/Node/Expression.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
namespace SQLParser\Node;
3434

3535
use Doctrine\DBAL\Connection;
36+
use function is_iterable;
3637
use Mouf\MoufInstanceDescriptor;
3738
use Mouf\MoufManager;
3839
use SQLParser\Node\Traverser\NodeTraverser;
@@ -263,10 +264,14 @@ public function walk(VisitorInterface $visitor)
263264
*/
264265
public function canBeBypassed(array $parameters): bool
265266
{
266-
foreach ($this->subTree as $node) {
267-
if (!$node instanceof BypassableInterface || !$node->canBeBypassed($parameters)) {
268-
return false;
267+
if (is_iterable($this->subTree)) {
268+
foreach ($this->subTree as $node) {
269+
if (!$node instanceof BypassableInterface || !$node->canBeBypassed($parameters)) {
270+
return false;
271+
}
269272
}
273+
} elseif (!$this->subTree instanceof BypassableInterface || !$this->subTree->canBeBypassed($parameters)) {
274+
return false;
270275
}
271276
return true;
272277
}

tests/Mouf/Database/MagicQueryTest.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,9 @@ public function testStandardSelect()
177177

178178
$sql = 'SELECT a FROM users u, users u2';
179179
$this->assertEquals('SELECT a FROM users AS u CROSS JOIN users AS u2', self::simplifySql($magicQuery->build($sql)));
180+
181+
$sql = 'SELECT a FROM users u WHERE status = (CASE WHEN u.id = 1 THEN u.status_1 ELSE u.status_2 END)';
182+
$this->assertEquals('SELECT a FROM users AS u WHERE status = (CASE WHEN u.id = 1 THEN u.status_1 ELSE u.status_2 END)', self::simplifySql($magicQuery->build($sql)));
180183
}
181184

182185
/**

0 commit comments

Comments
 (0)