From 1b0b5617b975df2bb91f749605eec26b5067ad84 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/r/xml.result | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) (limited to 'mysql-test/r/xml.result') diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result index 0b75b50f754..da2e2e400ad 100644 --- a/mysql-test/r/xml.result +++ b/mysql-test/r/xml.result @@ -561,3 +561,39 @@ A B C select extractvalue('A','/A_B'); extractvalue('A','/A_B') A +select extractvalue('AB1B2','/a/b[position()]'); +extractvalue('AB1B2','/a/b[position()]') +B1 B2 +select extractvalue('AB1B2','/a/b[count(.)=last()]'); +extractvalue('AB1B2','/a/b[count(.)=last()]') +B1 B2 +select extractvalue('AB1B2','/a/b[last()]'); +extractvalue('AB1B2','/a/b[last()]') +B2 +select extractvalue('AB1B2','/a/b[last()-1]'); +extractvalue('AB1B2','/a/b[last()-1]') +B1 +select extractvalue('AB1B2','/a/b[last()=1]'); +extractvalue('AB1B2','/a/b[last()=1]') + +select extractvalue('AB1B2','/a/b[last()=2]'); +extractvalue('AB1B2','/a/b[last()=2]') +B1 B2 +select extractvalue('AB1B2','/a/b[last()=position()]'); +extractvalue('AB1B2','/a/b[last()=position()]') +B2 +select extractvalue('AB1B2','/a/b[count(.)]'); +extractvalue('AB1B2','/a/b[count(.)]') +B2 +select extractvalue('AB1B2','/a/b[count(.)-1]'); +extractvalue('AB1B2','/a/b[count(.)-1]') +B1 +select extractvalue('AB1B2','/a/b[count(.)=1]'); +extractvalue('AB1B2','/a/b[count(.)=1]') + +select extractvalue('AB1B2','/a/b[count(.)=2]'); +extractvalue('AB1B2','/a/b[count(.)=2]') +B1 B2 +select extractvalue('AB1B2','/a/b[count(.)=position()]'); +extractvalue('AB1B2','/a/b[count(.)=position()]') +B2 -- cgit v1.2.1