Refactor a bit the SqlWalker modifications
This commit is contained in:
parent
96bcee4fa9
commit
30256e7a08
@ -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) . ')';
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user