Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

DDC-2229: Undefined method #2927

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

DDC-2229: Undefined method #2927

doctrinebot opened this issue Jan 9, 2013 · 13 comments
Assignees
Labels

Comments

@doctrinebot
Copy link

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
Copy link
Author

Comment created by @FabioBatSilva:

Hi Karma

Could you provide the failing DQL ?

Cheers

@doctrinebot
Copy link
Author

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
Copy link
Author

Comment created by @FabioBatSilva:

Hi Drak,

Could you try to write a failing test case please ?

Cheers

@doctrinebot
Copy link
Author

Comment created by @asm89:

ping! :)

@doctrinebot
Copy link
Author

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
Copy link
Author

Comment created by @FabioBatSilva:

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

@doctrinebot
Copy link
Author

Comment created by hussdl:

failing test case

@doctrinebot
Copy link
Author

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
Copy link
Author

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
Copy link
Author

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
Copy link
Author

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
Copy link
Author

Issue was closed with resolution "Invalid"

@doctrinebot
Copy link
Author

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".

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants