1
0
mirror of synced 2025-01-19 06:51:40 +03:00

Fix some CS

This commit is contained in:
Fabio B. Silva 2012-08-12 14:40:26 -03:00
parent de93983dff
commit 1bd6e841bf
6 changed files with 61 additions and 54 deletions

View File

@ -236,10 +236,12 @@ abstract class AbstractHydrator
}
if (isset($this->_rsm->newObjectMappings[$key])) {
$mapping = $this->_rsm->newObjectMappings[$key];
$cache[$key]['isNewObjectParameter'] = true;
$cache[$key]['argIndex'] = $this->_rsm->newObjectMappings[$key]['argIndex'];
$cache[$key]['objIndex'] = $this->_rsm->newObjectMappings[$key]['objIndex'];
$cache[$key]['class'] = new \ReflectionClass($this->_rsm->newObjectMappings[$key]['className']);
$cache[$key]['argIndex'] = $mapping['argIndex'];
$cache[$key]['objIndex'] = $mapping['objIndex'];
$cache[$key]['class'] = new \ReflectionClass($mapping['className']);
}
}
@ -247,8 +249,7 @@ abstract class AbstractHydrator
$class = $cache[$key]['class'];
$argIndex = $cache[$key]['argIndex'];
$objIndex = $cache[$key]['objIndex'];
$value = $cache[$key]['type']
->convertToPHPValue($value, $this->_platform);
$value = $cache[$key]['type']->convertToPHPValue($value, $this->_platform);
$rowData['newObjects'][$objIndex]['class'] = $class;
$rowData['newObjects'][$objIndex]['args'][$argIndex] = $value;

View File

@ -397,11 +397,11 @@ class ObjectHydrator extends AbstractHydrator
continue;
}
$parentClass = $this->ce[$this->_rsm->aliasMap[$parentAlias]];
$oid = spl_object_hash($parentObject);
$relationField = $this->_rsm->relationMap[$dqlAlias];
$relation = $parentClass->associationMappings[$relationField];
$reflField = $parentClass->reflFields[$relationField];
$parentClass = $this->ce[$this->_rsm->aliasMap[$parentAlias]];
$oid = spl_object_hash($parentObject);
$relationField = $this->_rsm->relationMap[$dqlAlias];
$relation = $parentClass->associationMappings[$relationField];
$reflField = $parentClass->reflFields[$relationField];
// Check the type of the relation (many or single-valued)
if ( ! ($relation['type'] & ClassMetadata::TO_ONE)) {
@ -415,9 +415,9 @@ class ObjectHydrator extends AbstractHydrator
$reflFieldValue = $this->initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias);
}
$indexExists = isset($this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]]);
$index = $indexExists ? $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] : false;
$indexIsValid = $index !== false ? isset($reflFieldValue[$index]) : false;
$indexExists = isset($this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]]);
$index = $indexExists ? $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] : false;
$indexIsValid = $index !== false ? isset($reflFieldValue[$index]) : false;
if ( ! $indexExists || ! $indexIsValid) {
if (isset($this->existingCollections[$collKey])) {
@ -514,6 +514,7 @@ class ObjectHydrator extends AbstractHydrator
// check for existing result from the iterations before
if ( ! isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) {
$element = $this->getEntity($rowData[$dqlAlias], $dqlAlias);
if ($this->_rsm->isMixed) {
$element = array($entityKey => $element);
}
@ -585,6 +586,7 @@ class ObjectHydrator extends AbstractHydrator
if ($count === 1) {
$result[$resultKey] = $obj;
continue;
}
@ -602,7 +604,7 @@ class ObjectHydrator extends AbstractHydrator
{
parent::onClear($eventArgs);
$aliases = array_keys($this->identifierMap);
$aliases = array_keys($this->identifierMap);
$this->identifierMap = array();
foreach ($aliases as $alias) {

View File

@ -46,7 +46,7 @@ class NewObjectExpression extends Node
public function __construct($className, array $args)
{
$this->className = $className;
$this->args = $args;
$this->args = $args;
}
/**

View File

@ -581,28 +581,18 @@ class Parser
private function processDeferredNewObjectExpressions($AST)
{
foreach ($this->deferredNewObjectExpressions as $deferredItem) {
$expression = $deferredItem['expression'];
$token = $deferredItem['token'];
$className = $expression->className;
$args = $expression->args;
$expression = $deferredItem['expression'];
$token = $deferredItem['token'];
$className = $expression->className;
$args = $expression->args;
$fromClassName = isset($AST->fromClause->identificationVariableDeclarations[0]->rangeVariableDeclaration->abstractSchemaName)
? $AST->fromClause->identificationVariableDeclarations[0]->rangeVariableDeclaration->abstractSchemaName
: null;
//first from item
if ( strpos($className, '\\') === false
&& ! class_exists($className)
&& isset($AST->fromClause
->identificationVariableDeclarations[0]
->rangeVariableDeclaration
->abstractSchemaName)) {
$fromClassName = $AST->fromClause
->identificationVariableDeclarations[0]
->rangeVariableDeclaration
->abstractSchemaName;
if (strpos($fromClassName, '\\') !== false) {
$fromClassName = substr($fromClassName, 0 , strrpos($fromClassName, '\\'));
$className = $fromClassName . '\\' . $className;
}
// If the namespace is not given then assumes the first from entity namespace
if (strpos($className, '\\') === false && ! class_exists($className) && strpos($fromClassName, '\\') !== false) {
$namespace = substr($fromClassName, 0 , strrpos($fromClassName, '\\'));
$className = $namespace . '\\' . $className;
if (class_exists($className)) {
$expression->className = $className;
@ -610,26 +600,21 @@ class Parser
}
if ( ! class_exists($className)) {
$this->semanticalError(sprintf(
'Class "%s" is not defined.',
$expression->className
), $token);
$this->semanticalError(sprintf('Class "%s" is not defined.', $expression->className), $token);
}
$class = new \ReflectionClass($className);
if($class->getConstructor() === null) {
$this->semanticalError(sprintf(
'Class "%s" has not a valid contructor.',
$className
), $token);
if ( ! $class->isInstantiable()) {
$this->semanticalError(sprintf('Class "%s" can not be instantiated.', $className), $token);
}
if($class->getConstructor()->getNumberOfRequiredParameters() > sizeof($args)) {
$this->semanticalError(sprintf(
'Number of arguments does not match with "%s" constructor declaration.',
$className
), $token);
if ($class->getConstructor() === null) {
$this->semanticalError(sprintf('Class "%s" has not a valid contructor.', $className), $token);
}
if ($class->getConstructor()->getNumberOfRequiredParameters() > sizeof($args)) {
$this->semanticalError(sprintf('Number of arguments does not match with "%s" constructor declaration.', $className), $token);
}
}
}
@ -1719,6 +1704,7 @@ class Parser
/**
* NewObjectExpression ::= "NEW" IdentificationVariable "(" NewObjectArg {"," NewObjectArg}* ")"
*
* @return \Doctrine\ORM\Query\AST\NewObjectExpression
*/
public function NewObjectExpression()
@ -1732,6 +1718,7 @@ class Parser
$this->match(Lexer::T_OPEN_PARENTHESIS);
$args[] = $this->NewObjectArg();
while ($this->lexer->isNextToken(Lexer::T_COMMA)) {
$this->match(Lexer::T_COMMA);
@ -2090,7 +2077,7 @@ class Parser
// NewObjectExpression (New ClassName(id, name))
case ($lookaheadType === Lexer::T_NEW):
$expression = $this->NewObjectExpression();
$expression = $this->NewObjectExpression();
break;
default:

View File

@ -1406,15 +1406,14 @@ class SqlWalker implements TreeWalker
public function walkNewObject($newObjectExpression)
{
$sqlSelectExpressions = array();
$objIndex = $this->newObjectCounter ++;
$objIndex = $this->newObjectCounter++;
foreach ($newObjectExpression->args as $argIndex => $e) {
$resultAlias = $this->scalarResultCounter++;
$columnAlias = $this->getSQLColumnAlias('sclr');
switch (true) {
case $e instanceof AST\NewObjectExpression:
case ($e instanceof AST\NewObjectExpression):
$sqlSelectExpressions[] = $e->dispatch($this);
break;

View File

@ -504,6 +504,16 @@ class NewOperatorTest extends \Doctrine\Tests\OrmFunctionalTestCase
$dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithTooMuchArgs(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
$this->_em->createQuery($dql)->getResult();
}
/**
* @expectedException Doctrine\ORM\Query\QueryException
* @expectedExceptionMessage [Semantical Error] line 0, col 11 near 'Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor(u.name)': Error: Class "Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor" can not be instantiated.
*/
public function testClassCantBeInstantiatedException()
{
$dql = "SELECT new Doctrine\Tests\ORM\Functional\ClassWithPrivateConstructor(u.name) FROM Doctrine\Tests\Models\CMS\CmsUser u";
$this->_em->createQuery($dql)->getResult();
}
}
class ClassWithTooMuchArgs
@ -513,4 +523,12 @@ class ClassWithTooMuchArgs
$this->foo = $foo;
$this->bor = $bar;
}
}
class ClassWithPrivateConstructor
{
private function __construct($foo)
{
$this->foo = $foo;
}
}