mirror of
https://github.com/doctrine/orm.git
synced 2026-03-23 22:42:18 +01:00
DDC-1256: Generated SQL error with DQL WITH and JOINED inheritance #1582
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @doctrinebot on GitHub (Jul 6, 2011).
Originally assigned to: @beberlei on GitHub.
Jira issue originally created by user toxygene:
I've created an entity that has a one to one relationship to a class in an inheritance tree and I'm using class table inheritance in Doctrine. When I try to add a DQL WITH statement on a column in the super class to the join, the generated SQL incorrectly places the statement in the child classes JOIN ON section.
Here's the DQL:
Here's the generated SQL:
Note that f2_.status = 'ok' is the correct statement, but it is in the wrong LEFT JOIN ON section.
Here are my entities (significantly clipped):
@doctrinebot commented on GitHub (Jul 6, 2011):
@doctrinebot commented on GitHub (Jul 6, 2011):
Comment created by mridgway:
I created a test for this:
1bb26a4618I'll see if I can figure this out.
@doctrinebot commented on GitHub (Jul 11, 2011):
Comment created by mridgway:
It doesn't seem that you would get the correct result if the WITH statement was on the 'flaggedcontent' table anyway. In order for this to work, the query would have to join 'flaggedcontent' first and then join to 'flaggedcontent_photo' based on f2_.id. While we can probably (but not easily) fix where the condition is placed, I don't think this will ever be able to give the expected results for ALL cases.
@doctrinebot commented on GitHub (Jul 12, 2011):
Comment created by @beberlei:
Formatting
@doctrinebot commented on GitHub (Jul 12, 2011):
Comment created by @beberlei:
This issue is unfixable, we tend towards throwing an exception in this case to notify developers that they cannot do this.
The only way to make it work is to move the status check to the WHERE clause.
@doctrinebot commented on GitHub (Aug 14, 2011):
Comment created by @guilhermeblanco:
This issue is fixable by applying what we call as nested joins when generating the SQL.
This issue report #DDC-349 (http://www.doctrine-project.org/jira/browse/DDC-349) suggest us to support it in DQL, but I think we can introduce this generation on SQL only.
It's not a trivial implementation, but it would solve a couple of other issue I was looking into.
Cheers,
@doctrinebot commented on GitHub (May 1, 2013):
Comment created by @beberlei:
Duplicate of DDC-349
@doctrinebot commented on GitHub (May 1, 2013):
Issue was closed with resolution "Duplicate"
@doctrinebot commented on GitHub (Dec 22, 2013):
Comment created by strate:
I do not understand why this issue is resolved. It is still reproduces!
Look to the source code:
https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/SqlWalker.php#L989
As you can see, sql conditions added only to first join. And after that, class table inheritance joins are added. (As in this ticket summary)
I think the best fix is adding ON conditions to last join of class table inheritance, because only in last join all needed tables are joined. In condition user can access to all tables.
@doctrinebot commented on GitHub (Dec 23, 2013):
Comment created by strate:
https://github.com/doctrine/doctrine2/pull/886
@doctrinebot commented on GitHub (Feb 17, 2014):
Comment created by @doctrinebot:
A related Github Pull-Request [GH-886] was closed:
https://github.com/doctrine/doctrine2/pull/886