From a5694ba4cf36bbb4434d319665831fb25b1c995e Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 3 Mar 2006 18:36:14 +0400 Subject: Bug#16318: XML: extractvalue() incorrectly returns last() = 1 xml.result, xml.test: Adding test case. item_xmlfunc.cc: - adding "size" member into MY_XPATH_FLT struct, to pass parent's context size when iterating in a predicate. Previously, temporaty context size was calculated instead, which is always 1. As a result, things like last() and count() didn't work fine. - adding iteration into Item_func_xpath_elementbyindex: similar to Item_func_xpath_predicate. This is to make things like last() and count() work inside square brackets. sql/item_xmlfunc.cc: Bug#16318: XML: extractvalue() incorrectly returns last() = 1 - adding "size" member into MY_XPATH_FLT struct, to pass parent's context size when iterating in a predicate. Previously, temporaty context size was calculated instead, which is always 1. As a result, things like last() and count() didn't work fine. - adding iteration into Item_func_xpath_elementbyindex: similar to Item_func_xpath_predicate. This is to make things like last() and count() work inside square brackets. mysql-test/t/xml.test: Adding test case. mysql-test/r/xml.result: Adding test case. --- mysql-test/t/xml.test | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'mysql-test/t/xml.test') diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test index 6a91d785d4e..b4272c7cabc 100644 --- a/mysql-test/t/xml.test +++ b/mysql-test/t/xml.test @@ -254,3 +254,19 @@ select extractvalue('ABC','/a/descendant-or-self::*'); # Bug #16320 XML: extractvalue() won't accept names containing underscores # select extractvalue('A','/A_B'); + +# +# Bug#16318: XML: extractvalue() incorrectly returns last() = 1 +# +select extractvalue('AB1B2','/a/b[position()]'); +select extractvalue('AB1B2','/a/b[count(.)=last()]'); +select extractvalue('AB1B2','/a/b[last()]'); +select extractvalue('AB1B2','/a/b[last()-1]'); +select extractvalue('AB1B2','/a/b[last()=1]'); +select extractvalue('AB1B2','/a/b[last()=2]'); +select extractvalue('AB1B2','/a/b[last()=position()]'); +select extractvalue('AB1B2','/a/b[count(.)]'); +select extractvalue('AB1B2','/a/b[count(.)-1]'); +select extractvalue('AB1B2','/a/b[count(.)=1]'); +select extractvalue('AB1B2','/a/b[count(.)=2]'); +select extractvalue('AB1B2','/a/b[count(.)=position()]'); -- cgit v1.2.1