mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
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.
This commit is contained in:
@@ -561,3 +561,39 @@ A B C
|
||||
select extractvalue('<A_B>A</A_B>','/A_B');
|
||||
extractvalue('<A_B>A</A_B>','/A_B')
|
||||
A
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[position()]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[position()]')
|
||||
B1 B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=last()]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=last()]')
|
||||
B1 B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()]')
|
||||
B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()-1]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()-1]')
|
||||
B1
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=1]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=1]')
|
||||
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=2]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=2]')
|
||||
B1 B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=position()]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=position()]')
|
||||
B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)]')
|
||||
B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)-1]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)-1]')
|
||||
B1
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=1]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=1]')
|
||||
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=2]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=2]')
|
||||
B1 B2
|
||||
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=position()]');
|
||||
extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=position()]')
|
||||
B2
|
||||
|
||||
Reference in New Issue
Block a user