DDC-2229: Undefined method #2927

Closed
doctrinebot opened this Issue Jan 9, 2013 · 13 comments

2 participants

@doctrinebot

Jira issue originally created by user drak:

There is an undefined method called in Doctrine\ORM\Query\SqlWalker

Fatal error: Call to undefined method Doctrine\ORM\Query\AST\PathExpression::isSimpleArithmeticExpression() in vendor\doctrine\orm\lib\Doctrine\ORM\Query\SqlWalker.php on line 2091

@doctrinebot

Comment created by @FabioBatSilva:

Hi Karma

Could you provide the failing DQL ?

Cheers

@doctrinebot

Comment created by drak:

It's generating SQL from a Doctrine Collection in a proxy class. Here is a link to the example: zikula/core#674 (comment)

The SQL being generated is

`SELECT t0.name AS name1, t0.value AS value2, t0.user*id AS user_id3 FROM users_attributes t0 WHERE t0.user*id = ?`

The ? should be the value 2, but for some reason it's not being added. I've checked the files in the stack-trace below and the right values are entering into the process, just the wrong SQL seems to be generated.

Exception Trace
#0 Exception thrown in C:\xampp\htdocs\core13\src\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php, line 47.
#1 C:\xampp\htdocs\core13\src\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php(1599): Doctrine\DBAL\Connection->executeQuery('SELECT t0.name ...', Array, Array)
#2 C:\xampp\htdocs\core13\src\vendor\doctrine\orm\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php(1558): Doctrine\ORM\Persisters\BasicEntityPersister->getOneToManyStatement(Array, Object(Users\Entity\User))
#3 C:\xampp\htdocs\core13\src\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php(2673): Doctrine\ORM\Persisters\BasicEntityPersister->loadOneToManyCollection(Array, Object(Users\Entity\User), Object(Doctrine\ORM\PersistentCollection))
#4 C:\xampp\htdocs\core13\src\vendor\doctrine\orm\lib\Doctrine\ORM\PersistentCollection.php(224): Doctrine\ORM\UnitOfWork->loadCollection(Object(Doctrine\ORM\PersistentCollection))
#5 C:\xampp\htdocs\core13\src\vendor\doctrine\orm\lib\Doctrine\ORM\PersistentCollection.php(576): Doctrine\ORM\PersistentCollection->initialize()
#6 C:\xampp\htdocs\core13\src\lib\util\UserUtil.php(1152): Doctrine\ORM\PersistentCollection->getIterator()
#7 C:\xampp\htdocs\core13\src\lib\util\UserUtil.php(2007): UserUtil::getVars('admin', false, 'uname', false)

@doctrinebot

Comment created by @FabioBatSilva:

Hi Drak,

Could you try to write a failing test case please ?

Cheers

@doctrinebot

Comment created by @asm89:

ping! :)

@doctrinebot

Comment created by hussdl:

SqlWalker::walkInExpression() does this:

$sql = $this->walkArithmeticExpression($inExpr->expression)

However, $inExpr->expression could be an instance of PathExpression. The grammar allows this case:

sqlInExpression ::= SingleValuedPathExpression ["NOT"] "IN" "(" (InParameter {"," InParameter}* | Subselect) ")"

PathExpression and ArithmeticExpression both extend Node, but a PathExpression is not an ArithmeticExpression, and therefore it has no method isSimpleArithmeticExpression.

If you still need a failing test case, I'll write one when I get home from work.

@doctrinebot

Comment created by @FabioBatSilva:

Please Daniel Huss, A test case will be very useful..

@doctrinebot

Comment created by hussdl:

failing test case

@doctrinebot

Comment created by hussdl:

Bug still present in release 2.3.3

Is someone taking care of this? It seems easy enough to fix.

@doctrinebot

Comment created by @ocramius:

[~hussdl] you can open a PR with the attached patch + test. Can you do it or should I take care of it?

@doctrinebot

Comment created by hussdl:

Please take care of it for me this time. I'd rather avoid the git setup until I have a significant contribution to make.

@doctrinebot

Comment created by @beberlei:

This is invalid, you need to set the path expression differently, this is pseudo code:

new ArtihmeticExpression(new SimpleArithmeticExpression(arithmeticsTerms => new PathExpression)));
@doctrinebot

Issue was closed with resolution "Invalid"

@doctrinebot

Comment created by hussdl:

Could this be bug in the DQL grammar, then? If I'm not mistaken, the resolution of an InExpression cannot involve an ArithmeticPrimary non-terminal. I find the correct solution as shown by Benjamin Eberlei to be quite astonishing, since a path expression like "alias.field" is not something I'd associate with the term "arithmetic".

@beberlei beberlei was assigned by doctrinebot Dec 6, 2015
@doctrinebot doctrinebot closed this Dec 6, 2015
@doctrinebot doctrinebot added the Bug label Dec 7, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment