diff --git a/src/SQLParser/Node/Expression.php b/src/SQLParser/Node/Expression.php index ecd066d..362efe4 100644 --- a/src/SQLParser/Node/Expression.php +++ b/src/SQLParser/Node/Expression.php @@ -33,6 +33,7 @@ namespace SQLParser\Node; use Doctrine\DBAL\Connection; +use function is_iterable; use Mouf\MoufInstanceDescriptor; use Mouf\MoufManager; use SQLParser\Node\Traverser\NodeTraverser; @@ -263,10 +264,14 @@ public function walk(VisitorInterface $visitor) */ public function canBeBypassed(array $parameters): bool { - foreach ($this->subTree as $node) { - if (!$node instanceof BypassableInterface || !$node->canBeBypassed($parameters)) { - return false; + if (is_iterable($this->subTree)) { + foreach ($this->subTree as $node) { + if (!$node instanceof BypassableInterface || !$node->canBeBypassed($parameters)) { + return false; + } } + } elseif (!$this->subTree instanceof BypassableInterface || !$this->subTree->canBeBypassed($parameters)) { + return false; } return true; } diff --git a/tests/Mouf/Database/MagicQueryTest.php b/tests/Mouf/Database/MagicQueryTest.php index cf83918..43c8ca9 100644 --- a/tests/Mouf/Database/MagicQueryTest.php +++ b/tests/Mouf/Database/MagicQueryTest.php @@ -177,6 +177,9 @@ public function testStandardSelect() $sql = 'SELECT a FROM users u, users u2'; $this->assertEquals('SELECT a FROM users AS u CROSS JOIN users AS u2', self::simplifySql($magicQuery->build($sql))); + + $sql = 'SELECT a FROM users u WHERE status = (CASE WHEN u.id = 1 THEN u.status_1 ELSE u.status_2 END)'; + $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))); } /**