[DDC-1260] Enable nesting of OR and AND statements in DQL queries Created: 08/Jul/11  Updated: 08/Aug/11  Resolved: 08/Aug/11

Status: Resolved
Project: Doctrine 2 - ORM
Component/s: DQL
Affects Version/s: 2.1
Fix Version/s: 2.2
Security Level: All

Type: Improvement Priority: Major
Reporter: Andreas Förthner Assignee: Guilherme Blanco
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
is required for DDC-1299 Allow for nested Andx and Orx in Quer... Resolved
is duplicated by DDC-1255 Can't add instance of Andx to QueryBu... Resolved


Currently it is not allowed to nest AND and OR conditions in themselves. However, this comes in handy if you try to do a dynamic query rewriting, where you want to add some more conditions without knowing the original query before.

The fix is trivial, just allow to add AND in AND. The same needs to be done for OR. Patch will follow in a second...

Comment by Guilherme Blanco [ 08/Jul/11 ]

This can lead to unpredictable situations inside QueryBuilder.
Maybe we can add a "merge" function to Expr\Composite, I'm not sure.

I need to actually test it on every driver to make sure if it doesn't break anything. It was not originally designed to hold same instances. If you pay attention:

((a AND b) AND c) 

Is the same as:

a AND b AND c

Can't you make a check internally and use addMultiple?
In the meantime, I can make tests to check if it doesn't break anything else.

Comment by Guilherme Blanco [ 08/Aug/11 ]

In this commit: https://github.com/doctrine/doctrine2/commit/816ce41f638d28934c79a12ef27f954124b2639e
I applied the support to this improvement, since it does not mess with generated code.

Generated at Thu Aug 28 09:09:32 UTC 2014 using JIRA 6.2.3#6260-sha1:63ef1d6dac3f4f4d7db4c1effd405ba38ccdc558.