Public bug reported: A query like let $x:=<a/> return by-ref(ref($x))
gets rewritten (in some case, depending on the complexity of the expression and number of references to the variable) as: by-ref(ref(<a/>)) Thus the node has been destroyed when by-ref is called. The following test named reference_5.xq: import module namespace idd = "http://www.zorba-xquery.com/reference" at "reference.xqlib"; import module namespace id = "http://www.zorba-xquery.com/modules/node-reference"; import module namespace doc = "http://www.zorba-xquery.com/modules/store/dynamic/documents"; variable $node:=<root>global</root>; fn:put(<root>doc</root>,"doc"); <result> <temporary-variable-in-scope>{let $temp:=<root>temp</root> return id:node-by-reference(id:node-reference($temp))}</temporary-variable-in-scope> <temporary-variable-in-scope>{ let $temp:=<root>temp</root> return let $ref:=id:node-reference($temp) return id:node-by-reference($ref) }</temporary-variable-in-scope> <temporary-variable-in-scope>{ for $i in (1 to 3) let $temp:=<root>temp</root> let $ref:=id:node-reference($temp) return id:node-by-reference($ref) }</temporary-variable-in-scope> <temporary-variable-in-scope>{let $temp:=<root>temp</root> return id :node-by-reference(id:node-reference($temp))}</temporary-variable-in- scope> </result> Should return: <?xml version="1.0" encoding="UTF-8"?> <result> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> <root>temp</root> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> </result> Instead it returns: <?xml version="1.0" encoding="UTF-8"?> <result> <temporary-variable-in-scope/> <temporary-variable-in-scope/> <temporary-variable-in-scope/> <temporary-variable-in-scope/> </result> ** Affects: zorba Importance: Medium Assignee: Markos Zaharioudakis (markos-za) Status: New ** Changed in: zorba Assignee: (unassigned) => Markos Zaharioudakis (markos-za) ** Changed in: zorba Importance: Undecided => Medium -- You received this bug notification because you are a member of Zorba Coders, which is the registrant for Zorba. https://bugs.launchpad.net/bugs/868640 Title: Node lifetime is shorter than expected due to let variable inlining Status in Zorba - The XQuery Processor: New Bug description: A query like let $x:=<a/> return by-ref(ref($x)) gets rewritten (in some case, depending on the complexity of the expression and number of references to the variable) as: by-ref(ref(<a/>)) Thus the node has been destroyed when by-ref is called. The following test named reference_5.xq: import module namespace idd = "http://www.zorba-xquery.com/reference" at "reference.xqlib"; import module namespace id = "http://www.zorba-xquery.com/modules/node-reference"; import module namespace doc = "http://www.zorba-xquery.com/modules/store/dynamic/documents"; variable $node:=<root>global</root>; fn:put(<root>doc</root>,"doc"); <result> <temporary-variable-in-scope>{let $temp:=<root>temp</root> return id:node-by-reference(id:node-reference($temp))}</temporary-variable-in-scope> <temporary-variable-in-scope>{ let $temp:=<root>temp</root> return let $ref:=id:node-reference($temp) return id:node-by-reference($ref) }</temporary-variable-in-scope> <temporary-variable-in-scope>{ for $i in (1 to 3) let $temp:=<root>temp</root> let $ref:=id:node-reference($temp) return id:node-by-reference($ref) }</temporary-variable-in-scope> <temporary-variable-in-scope>{let $temp:=<root>temp</root> return id :node-by-reference(id:node-reference($temp))}</temporary-variable-in- scope> </result> Should return: <?xml version="1.0" encoding="UTF-8"?> <result> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> <root>temp</root> <root>temp</root> </temporary-variable-in-scope> <temporary-variable-in-scope> <root>temp</root> </temporary-variable-in-scope> </result> Instead it returns: <?xml version="1.0" encoding="UTF-8"?> <result> <temporary-variable-in-scope/> <temporary-variable-in-scope/> <temporary-variable-in-scope/> <temporary-variable-in-scope/> </result> To manage notifications about this bug go to: https://bugs.launchpad.net/zorba/+bug/868640/+subscriptions -- Mailing list: https://launchpad.net/~zorba-coders Post to : zorba-coders@lists.launchpad.net Unsubscribe : https://launchpad.net/~zorba-coders More help : https://help.launchpad.net/ListHelp