1
0
mirror of synced 2025-02-10 17:29:27 +03:00

Refactor a bit the SqlWalker modifications

This commit is contained in:
Alessandro Lai 2017-06-21 09:34:16 +02:00
parent 96bcee4fa9
commit 30256e7a08
No known key found for this signature in database
GPG Key ID: 5D9C513BE4F5798D

View File

@ -2280,7 +2280,6 @@ class SqlWalker implements TreeWalker
*/ */
private function getChildDiscriminatorsFromClassMetadata(ClassMetadataInfo $discrClass, AST\InstanceOfExpression $instanceOfExpr) private function getChildDiscriminatorsFromClassMetadata(ClassMetadataInfo $discrClass, AST\InstanceOfExpression $instanceOfExpr)
{ {
$knownSubclasses = array_flip($discrClass->subClasses);
$sqlParameterList = []; $sqlParameterList = [];
$discriminators = []; $discriminators = [];
foreach ($instanceOfExpr->value as $parameter) { foreach ($instanceOfExpr->value as $parameter) {
@ -2292,15 +2291,13 @@ class SqlWalker implements TreeWalker
continue; continue;
} }
// Trim first backslash $metadata = $this->em->getClassMetadata($parameter);
$parameter = ltrim($parameter, '\\');
if ($parameter !== $discrClass->name && ! array_key_exists($parameter, $knownSubclasses)) { if ($metadata->getReflectionClass()->isSubclassOf($discrClass->name)) {
throw QueryException::instanceOfUnrelatedClass($parameter, $discrClass->name); throw QueryException::instanceOfUnrelatedClass($parameter, $discrClass->name);
} }
// Include discriminators for parameter class and its subclass // Include discriminators for parameter class and its subclass
$metadata = $this->em->getClassMetadata($parameter);
$hierarchyClasses = $metadata->subClasses; $hierarchyClasses = $metadata->subClasses;
$hierarchyClasses[] = $metadata->name; $hierarchyClasses[] = $metadata->name;
@ -2308,15 +2305,13 @@ class SqlWalker implements TreeWalker
$currentMetadata = $this->em->getClassMetadata($class); $currentMetadata = $this->em->getClassMetadata($class);
$currentDiscriminator = $currentMetadata->discriminatorValue; $currentDiscriminator = $currentMetadata->discriminatorValue;
if (is_string($currentDiscriminator) && ! array_key_exists($currentDiscriminator, $discriminators)) { if (null !== $currentDiscriminator && ! array_key_exists($currentDiscriminator, $discriminators)) {
$discriminators[$currentDiscriminator] = true; $discriminators[$currentDiscriminator] = null;
} }
} }
} }
foreach (array_keys($discriminators) as $dis) { $sqlParameterList = array_map([$this->conn, 'quote'], array_keys($discriminators));
$sqlParameterList[] = $this->conn->quote($dis);
}
return '(' . implode(', ', $sqlParameterList) . ')'; return '(' . implode(', ', $sqlParameterList) . ')';
} }