From: Max R. A. (JIRA) <no...@at...> - 2006-07-21 10:08:14
|
[ http://opensource.atlassian.com/projects/hibernate/browse/HHH-1929?page=all ] Max Rydahl Andersen closed HHH-1929: ------------------------------------ Resolution: Rejected as requested by the user ;) > Parenthesis removal without honouring order in HQL query > -------------------------------------------------------- > > Key: HHH-1929 > URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-1929 > Project: Hibernate3 > Type: Bug > Components: query-hql > Versions: 3.1.3, 3.2.0.cr3 > Environment: Hibernate 3.1.3 and Hibernate 3.2.0.cr3, MySQL 5.0.22 community edition, Tomcat 5.5.17, Eclipse 3.2, WTP 1.5.0.2 > Reporter: James Andrews > Priority: Critical > > > Parenthesis in the where clause of a HQL query are being removed in the produced SQL query, modifying the results from those intended. > The HQL used is as follows: > select inv from Involvement inv > left outer join inv.outcomes out > where ( > out.type.needsDate = true > and out.dateFinished <= now() > ) or ( > out is null > and inv.charge is not null > ) or ( > out.dateCreated = ( > select max(out2.dateCreated) > from Outcome out2 > where out2.involvementId = inv.id > ) and out.type.terminal = false > ) > group by inv.id > And results in the following SQL: > select > involvemen0_.involvementId as involvem1_2_, > involvemen0_.chargeId as chargeId2_, > involvemen0_.personId as personId2_, > involvemen0_.involvementTypeId as involvem4_2_ > from > incident.involvement involvemen0_ > left outer join > incident.outcome outcomes1_ > on involvemen0_.involvementId=outcomes1_.involvementId, > incident.outcometype outcometyp2_ > where > outcomes1_.typeId=outcometyp2_.typeId > and ( > outcometyp2_.needsDate=1 > and outcomes1_.dateFinished<=now() > or ( > outcomes1_.outcomeId is null > ) > and ( > involvemen0_.chargeId is not null > ) > or outcomes1_.dateCreated=( > select > max(outcome3_.dateCreated) > from > incident.outcome outcome3_ > where > outcome3_.involvementId=involvemen0_.involvementId > ) > and outcometyp2_.isTerminal=0 > ) > group by > involvemen0_.involvementId > The initial subgroup of the clause is fine, however the ".charge is not null" and ".isTerminal = false" clauses are being promoted out of their subgroups, causing them to filter all results, rather than just those tuples with related criteria. > This seems similar to issue HHH-377 and HHH-284, although it is not related to MySQL's issues with operator precedence, as the generated where clause does not fulfil the intent of the HQL where clause for any precedence rules. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira |