From 5181eae8d683ffc0367229df40d52da9895568a6 Mon Sep 17 00:00:00 2001 From: Alessandro Lai Date: Wed, 21 Jun 2017 09:34:16 +0200 Subject: [PATCH] Refactor a bit the SqlWalker modifications --- lib/Doctrine/ORM/Query/SqlWalker.php | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/lib/Doctrine/ORM/Query/SqlWalker.php b/lib/Doctrine/ORM/Query/SqlWalker.php index baf05ffca..33ee45d19 100644 --- a/lib/Doctrine/ORM/Query/SqlWalker.php +++ b/lib/Doctrine/ORM/Query/SqlWalker.php @@ -2277,7 +2277,6 @@ class SqlWalker implements TreeWalker */ private function getChildDiscriminatorsFromClassMetadata(ClassMetadataInfo $discrClass, AST\InstanceOfExpression $instanceOfExpr) { - $knownSubclasses = array_flip($discrClass->subClasses); $sqlParameterList = []; $discriminators = []; foreach ($instanceOfExpr->value as $parameter) { @@ -2289,15 +2288,13 @@ class SqlWalker implements TreeWalker continue; } - // Trim first backslash - $parameter = ltrim($parameter, '\\'); + $metadata = $this->em->getClassMetadata($parameter); - if ($parameter !== $discrClass->name && ! array_key_exists($parameter, $knownSubclasses)) { + if ($metadata->getReflectionClass()->isSubclassOf($discrClass->name)) { throw QueryException::instanceOfUnrelatedClass($parameter, $discrClass->name); } // Include discriminators for parameter class and its subclass - $metadata = $this->em->getClassMetadata($parameter); $hierarchyClasses = $metadata->subClasses; $hierarchyClasses[] = $metadata->name; @@ -2305,15 +2302,13 @@ class SqlWalker implements TreeWalker $currentMetadata = $this->em->getClassMetadata($class); $currentDiscriminator = $currentMetadata->discriminatorValue; - if (is_string($currentDiscriminator) && ! array_key_exists($currentDiscriminator, $discriminators)) { - $discriminators[$currentDiscriminator] = true; + if (null !== $currentDiscriminator && ! array_key_exists($currentDiscriminator, $discriminators)) { + $discriminators[$currentDiscriminator] = null; } } } - foreach (array_keys($discriminators) as $dis) { - $sqlParameterList[] = $this->conn->quote($dis); - } + $sqlParameterList = array_map([$this->conn, 'quote'], array_keys($discriminators)); return '(' . implode(', ', $sqlParameterList) . ')'; }