[ https://issues.apache.org/jira/browse/JCR-1650?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12605233#action_12605233 ]
yabon edited comment on JCR-1650 at 6/16/08 2:42 AM: ---------------------------------------------------------------- I think this is the same bug as JCR-1075. was (Author: yabon): I think this is the same bug. > XPathQueryBuilder may not handle multiple jcr:deref correctly > ------------------------------------------------------------- > > Key: JCR-1650 > URL: https://issues.apache.org/jira/browse/JCR-1650 > Project: Jackrabbit > Issue Type: Bug > Components: jackrabbit-spi-commons, xpath > Affects Versions: 1.4, core 1.4.5 > Reporter: Sébastien Launay > Fix For: 1.5 > > Attachments: jackrabbit-1.4.x-fix-multiple-jcr-deref-2008-06-16.patch > > > If you have the following tree (inspired from DerefTest) : > + people > + carl (worksfor -> company/microsoft) > + frank (worksfor -> company/microsoft) > + company > + microsoft (eotm -> carl) > The following queries will be translated to : > testroot/people/frank/jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*') > + Root node > + Select properties: * > + PathQueryNode > + LocationStepQueryNode: NodeTest={}testroot Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}people Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}frank Descendants=false Index=NONE > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > => Matching carl node > testroot/people/frank/jcr:deref(@worksfor, '*')/jcr:deref(@eotm, '*')[EMAIL > PROTECTED]:uuid] > + Root node > + Select properties: * > + PathQueryNode > + LocationStepQueryNode: NodeTest={}testroot Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}people Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}frank Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest=* Descendants=false Index=NONE > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > + RelationQueryNode: Op: NOT NULL [EMAIL > PROTECTED]://www.jcp.org/jcr/1.0}uuid > => Not matching carl node > testroot/people/frank/jcr:deref(@worksfor, '*')[EMAIL > PROTECTED]:uuid]/jcr:deref(@eotm, '*')[EMAIL PROTECTED]:uuid] > + Root node > + Select properties: * > + PathQueryNode > + LocationStepQueryNode: NodeTest={}testroot Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}people Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}frank Descendants=false Index=NONE > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > + RelationQueryNode: Op: NOT NULL [EMAIL > PROTECTED]://www.jcp.org/jcr/1.0}uuid > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > + RelationQueryNode: Op: NOT NULL [EMAIL > PROTECTED]://www.jcp.org/jcr/1.0}uuid > => Matching carl node > testroot/people/frank/jcr:deref(@worksfor, '*')[EMAIL > PROTECTED]:uuid]/jcr:deref(@eotm, '*') > + Root node > + Select properties: * > + PathQueryNode > + LocationStepQueryNode: NodeTest={}testroot Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}people Descendants=false Index=NONE > + LocationStepQueryNode: NodeTest={}frank Descendants=false Index=NONE > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > + RelationQueryNode: Op: NOT NULL [EMAIL > PROTECTED]://www.jcp.org/jcr/1.0}uuid > + DerefQueryNode: NodeTest=* Descendants=false Index=NONE > => Matching carl node > This is because XPathQueryBuilder calls NAryQueryNode#removeOperand(QueryNode) > in order to replace current LocationStepQueryNode with a DerefQueryNode. > NAryQueryNode#removeOperand(QueryNode) uses internally a List and thus > relies on Object#equals(Object) for retrieving the object to remove. > But the equals method is redefined for every QueryNode with a different > semantic. > Then, the call to NAryQueryNode#removeOperand(QueryNode) will not remove the > wanted operand but the first operand returning true after calling equals in > ArrayList#remove(Object). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.