mirror of
https://github.com/MariaDB/server.git
synced 2025-05-01 08:45:04 +03:00

xml.result, xml.test: Adding test case. item_xmlfunc.cc: Fixed that the "!" character written at the end was ignored. Now if we try to scan "!=", and if "!" is not followed by "=", we rollback lex scanner back to "!" token, so the parser will start to check the next rule from the "!" character again. Previously parser started from the next character, which was EOF in the example in xml.test, which led to query being successfully parsed, instead of producing a syntax error.
246 lines
9.7 KiB
Plaintext
246 lines
9.7 KiB
Plaintext
SET @xml='<a aa1="aa1" aa2="aa2">a1<b ba1="ba1">b1<c>c1</c>b2</b>a2</a>';
|
|
SELECT extractValue(@xml,'/a');
|
|
SELECT extractValue(@xml,'/a/b');
|
|
SELECT extractValue(@xml,'/a/b/c');
|
|
SELECT extractValue(@xml,'/a/@aa1');
|
|
SELECT extractValue(@xml,'/a/@aa2');
|
|
SELECT extractValue(@xml,'/a/@*');
|
|
SELECT extractValue(@xml,'//@ba1');
|
|
|
|
SELECT extractValue(@xml,'//a');
|
|
SELECT extractValue(@xml,'//b');
|
|
SELECT extractValue(@xml,'//c');
|
|
SELECT extractValue(@xml,'/a//b');
|
|
SELECT extractValue(@xml,'/a//c');
|
|
SELECT extractValue(@xml,'//*');
|
|
SELECT extractValue(@xml,'/a//*');
|
|
SELECT extractValue(@xml,'/./a');
|
|
SELECT extractValue(@xml,'/a/b/.');
|
|
SELECT extractValue(@xml,'/a/b/..');
|
|
SELECT extractValue(@xml,'/a/b/../@aa1');
|
|
SELECT extractValue(@xml,'/*');
|
|
SELECT extractValue(@xml,'/*/*');
|
|
SELECT extractValue(@xml,'/*/*/*');
|
|
|
|
SELECT extractValue(@xml,'/a/child::*');
|
|
SELECT extractValue(@xml,'/a/descendant::*');
|
|
SELECT extractValue(@xml,'/a/descendant-or-self::*');
|
|
SELECT extractValue(@xml,'/a/attribute::*');
|
|
SELECT extractValue(@xml,'/a/b/c/parent::*');
|
|
SELECT extractValue(@xml,'/a/b/c/ancestor::*');
|
|
SELECT extractValue(@xml,'/a/b/c/ancestor-or-self::*');
|
|
SELECT extractValue(@xml,'/descendant-or-self::*');
|
|
|
|
SET @xml='<a>a11<b ba="ba11" ba="ba12">b11</b><b ba="ba21" ba="ba22">b21<c>c1</c>b22</b>a12</a>';
|
|
SELECT extractValue(@xml,'/a/b/c/ancestor-or-self::*');
|
|
SELECT extractValue(@xml,'//@ba');
|
|
|
|
SET @xml='<a><b>b</b><c>c</c></a>';
|
|
SELECT extractValue(@xml,'/a/b');
|
|
SELECT extractValue(@xml,'/a/c');
|
|
SELECT extractValue(@xml,'/a/child::b');
|
|
SELECT extractValue(@xml,'/a/child::c');
|
|
|
|
SET @xml='<a><b>b1</b><c>c1</c><b>b2</b><c>c2</c></a>';
|
|
SELECT extractValue(@xml,'/a/b[1]');
|
|
SELECT extractValue(@xml,'/a/b[2]');
|
|
SELECT extractValue(@xml,'/a/c[1]');
|
|
SELECT extractValue(@xml,'/a/c[2]');
|
|
|
|
SET @xml='<a><b x="xb1" x="xb2"/><c x="xc1" x="xc2"/></a>';
|
|
SELECT extractValue(@xml,'/a//@x');
|
|
SELECT extractValue(@xml,'/a//@x[1]');
|
|
SELECT extractValue(@xml,'/a//@x[2]');
|
|
|
|
SET @xml='<a><b>b1</b><b>b2</b><c><b>c1b1</b><b>c1b2</b></c><c><b>c2b1</c></b>/a>';
|
|
SELECT extractValue(@xml,'//b[1]');
|
|
SELECT extractValue(@xml,'/descendant::b[1]');
|
|
|
|
SET @xml='<a><b>b1</b><b>b2</b></a>';
|
|
SELECT extractValue(@xml,'/a/b[1+0]');
|
|
SELECT extractValue(@xml,'/a/b[1*1]');
|
|
SELECT extractValue(@xml,'/a/b[--1]');
|
|
SELECT extractValue(@xml,'/a/b[2*1-1]');
|
|
|
|
SELECT extractValue(@xml,'/a/b[1+1]');
|
|
SELECT extractValue(@xml,'/a/b[1*2]');
|
|
SELECT extractValue(@xml,'/a/b[--2]');
|
|
SELECT extractValue(@xml,'/a/b[1*(3-1)]');
|
|
|
|
SELECT extractValue(@xml,'//*[1=1]');
|
|
SELECT extractValue(@xml,'//*[1!=1]');
|
|
SELECT extractValue(@xml,'//*[1>1]');
|
|
SELECT extractValue(@xml,'//*[2>1]');
|
|
SELECT extractValue(@xml,'//*[1>2]');
|
|
SELECT extractValue(@xml,'//*[1>=1]');
|
|
SELECT extractValue(@xml,'//*[2>=1]');
|
|
SELECT extractValue(@xml,'//*[1>=2]');
|
|
SELECT extractValue(@xml,'//*[1<1]');
|
|
SELECT extractValue(@xml,'//*[2<1]');
|
|
SELECT extractValue(@xml,'//*[1<2]');
|
|
SELECT extractValue(@xml,'//*[1<=1]');
|
|
SELECT extractValue(@xml,'//*[2<=1]');
|
|
SELECT extractValue(@xml,'//*[1<=2]');
|
|
|
|
SET @xml='<a><b>b11<c>c11</c></b><b>b21<c>c21</c></b></a>';
|
|
SELECT extractValue(@xml,'/a/b[c="c11"]');
|
|
SELECT extractValue(@xml,'/a/b[c="c21"]');
|
|
|
|
SET @xml='<a><b c="c11">b11</b><b c="c21">b21</b></a>';
|
|
SELECT extractValue(@xml,'/a/b[@c="c11"]');
|
|
SELECT extractValue(@xml,'/a/b[@c="c21"]');
|
|
|
|
SET @xml='<a>a1<b c="c11">b11<d>d11</d></b><b c="c21">b21<d>d21</d></b></a>';
|
|
SELECT extractValue(@xml, '/a/b[@c="c11"]/d');
|
|
SELECT extractValue(@xml, '/a/b[@c="c21"]/d');
|
|
SELECT extractValue(@xml, '/a/b[d="d11"]/@c');
|
|
SELECT extractValue(@xml, '/a/b[d="d21"]/@c');
|
|
SELECT extractValue(@xml, '/a[b="b11"]');
|
|
SELECT extractValue(@xml, '/a[b/@c="c11"]');
|
|
SELECT extractValue(@xml, '/a[b/d="d11"]');
|
|
SELECT extractValue(@xml, '/a[/a/b="b11"]');
|
|
SELECT extractValue(@xml, '/a[/a/b/@c="c11"]');
|
|
SELECT extractValue(@xml, '/a[/a/b/d="d11"]');
|
|
|
|
SELECT extractValue('<a>a</a>', '/a[false()]');
|
|
SELECT extractValue('<a>a</a>', '/a[true()]');
|
|
SELECT extractValue('<a>a</a>', '/a[not(false())]');
|
|
SELECT extractValue('<a>a</a>', '/a[not(true())]');
|
|
SELECT extractValue('<a>a</a>', '/a[true() and true()]');
|
|
SELECT extractValue('<a>a</a>', '/a[true() and false()]');
|
|
SELECT extractValue('<a>a</a>', '/a[false()and false()]');
|
|
SELECT extractValue('<a>a</a>', '/a[false()and true()]');
|
|
SELECT extractValue('<a>a</a>', '/a[true() or true()]');
|
|
SELECT extractValue('<a>a</a>', '/a[true() or false()]');
|
|
SELECT extractValue('<a>a</a>', '/a[false()or false()]');
|
|
SELECT extractValue('<a>a</a>', '/a[false()or true()]');
|
|
|
|
SET @xml='<a>ab<b c="c" c="e">b1</b><b c="d">b2</b><b c="f" c="e">b3</b></a>';
|
|
select extractValue(@xml,'/a/b[@c="c"]');
|
|
select extractValue(@xml,'/a/b[@c="d"]');
|
|
select extractValue(@xml,'/a/b[@c="e"]');
|
|
select extractValue(@xml,'/a/b[not(@c="e")]');
|
|
select extractValue(@xml,'/a/b[@c!="e"]');
|
|
select extractValue(@xml,'/a/b[@c="c" or @c="d"]');
|
|
select extractValue(@xml,'/a/b[@c="c" and @c="e"]');
|
|
|
|
SET @xml='<a><b c="c" d="d">b1</b><b d="d" e="e">b2</b></a>';
|
|
select extractValue(@xml,'/a/b[@c]');
|
|
select extractValue(@xml,'/a/b[@d]');
|
|
select extractValue(@xml,'/a/b[@e]');
|
|
select extractValue(@xml,'/a/b[not(@c)]');
|
|
select extractValue(@xml,'/a/b[not(@d)]');
|
|
select extractValue(@xml,'/a/b[not(@e)]');
|
|
|
|
select extractValue(@xml, '/a/b[boolean(@c) or boolean(@d)]');
|
|
select extractValue(@xml, '/a/b[boolean(@c) or boolean(@e)]');
|
|
select extractValue(@xml, '/a/b[boolean(@d) or boolean(@e)]');
|
|
select extractValue(@xml, '/a/b[boolean(@c) and boolean(@d)]');
|
|
select extractValue(@xml, '/a/b[boolean(@c) and boolean(@e)]');
|
|
select extractValue(@xml, '/a/b[boolean(@d) and boolean(@e)]');
|
|
|
|
select extractValue(@xml, '/a/b[@c or @d]');
|
|
select extractValue(@xml, '/a/b[@c or @e]');
|
|
select extractValue(@xml, '/a/b[@d or @e]');
|
|
select extractValue(@xml, '/a/b[@c and @d]');
|
|
select extractValue(@xml, '/a/b[@c and @e]');
|
|
select extractValue(@xml, '/a/b[@d and @e]');
|
|
|
|
SET @xml='<a><b c="c">b1</b><b>b2</b></a>';
|
|
SELECT extractValue(@xml,'/a/b[@*]');
|
|
SELECT extractValue(@xml,'/a/b[not(@*)]');
|
|
|
|
SELECT extractValue('<a>a</a>', '/a[ceiling(3.1)=4]');
|
|
SELECT extractValue('<a>a</a>', '/a[floor(3.1)=3]');
|
|
SELECT extractValue('<a>a</a>', '/a[round(3.1)=3]');
|
|
SELECT extractValue('<a>a</a>', '/a[round(3.8)=4]');
|
|
|
|
SELECT extractValue('<a><b>b</b><c>c</c></a>', '/a/b | /a/c');
|
|
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[position()=1]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[position()=2]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[position()=3]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[1=position()]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[2=position()]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[3=position()]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[2>=position()]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[2<=position()]');
|
|
select extractValue('<a b="b1" b="b2" b="b3"/>','/a/@b[position()=3 or position()=2]');
|
|
|
|
SELECT extractValue('<a>a<b>a1<c>c1</c></b><b>a2</b></a>','/a/b[count(c)=0]');
|
|
SELECT extractValue('<a>a<b>a1<c>c1</c></b><b>a2</b></a>','/a/b[count(c)=1]');
|
|
select extractValue('<a>a1<b ba="1" ba="2">b1</b><b>b2</b>4</a>','/a/b[sum(@ba)=3]');
|
|
|
|
select extractValue('<a><b>b1</b><b>b2</b></a>','/a/b[1]');
|
|
select extractValue('<a><b>b1</b><b>b2</b></a>','/a/b[boolean(1)]');
|
|
select extractValue('<a><b>b1</b><b>b2</b></a>','/a/b[true()]');
|
|
select extractValue('<a><b>b1</b><b>b2</b></a>','/a/b[number(true())]');
|
|
|
|
select extractValue('<a>ab</a>','/a[contains("abc","b")]');
|
|
select extractValue('<a>ab</a>','/a[contains(.,"a")]');
|
|
select extractValue('<a>ab</a>','/a[contains(.,"b")]');
|
|
select extractValue('<a>ab</a>','/a[contains(.,"c")]');
|
|
|
|
select extractValue('<a b="1">ab</a>','/a[concat(@b,"2")="12"]');
|
|
|
|
SET @xml='<a b="11" b="12" b="21" b="22">ab</a>';
|
|
select extractValue(@xml, '/a/@b[substring(.,2)="1"]');
|
|
select extractValue(@xml, '/a/@b[substring(.,2)="2"]');
|
|
select extractValue(@xml, '/a/@b[substring(.,1,1)="1"]');
|
|
select extractValue(@xml, '/a/@b[substring(.,1,1)="2"]');
|
|
select extractValue(@xml, '/a/@b[substring(.,2,1)="1"]');
|
|
select extractValue(@xml, '/a/@b[substring(.,2,1)="2"]');
|
|
|
|
SET @xml='<a b="b11" b="b12" b="b21" b="22"/>';
|
|
select extractValue(@xml,'/a/@b');
|
|
select extractValue(@xml,'/a/@b[contains(.,"1")]');
|
|
select extractValue(@xml,'/a/@b[contains(.,"1")][contains(.,"2")]');
|
|
select extractValue(@xml,'/a/@b[contains(.,"1")][contains(.,"2")][2]');
|
|
|
|
SET @xml='<a>a1<b>b1<c>c1</c>b2</b>a2</a>';
|
|
select UpdateXML('<a>a1<b>b1<c>c1</c>b2</b>a2</a>','/a/b/c','+++++++++');
|
|
select UpdateXML('<a>a1<b>b1<c>c1</c>b2</b>a2</a>','/a/b/c','<c1>+++++++++</c1>');
|
|
select UpdateXML('<a>a1<b>b1<c>c1</c>b2</b>a2</a>','/a/b/c','<c1/>');
|
|
|
|
SET @xml='<a><b>bb</b></a>';
|
|
select UpdateXML(@xml, '/a/b', '<b>ccc</b>');
|
|
|
|
SET @xml='<a aa1="aa1" aa2="aa2"><b bb1="bb1" bb2="bb2">bb</b></a>';
|
|
select UpdateXML(@xml, '/a/b', '<b>ccc</b>');
|
|
select UpdateXML(@xml, '/a/@aa1', '');
|
|
select UpdateXML(@xml, '/a/@aa1', 'aa3="aa3"');
|
|
select UpdateXML(@xml, '/a/@aa2', '');
|
|
select UpdateXML(@xml, '/a/@aa2', 'aa3="aa3"');
|
|
select UpdateXML(@xml, '/a/b/@bb1', '');
|
|
select UpdateXML(@xml, '/a/b/@bb1', 'bb3="bb3"');
|
|
select UpdateXML(@xml, '/a/b/@bb2', '');
|
|
select UpdateXML(@xml, '/a/b/@bb2', 'bb3="bb3"');
|
|
|
|
#
|
|
# Bug#16234 XML: Crash if ExtractValue()
|
|
#
|
|
SET @xml= '<order><clerk>lesser wombat</clerk></order>';
|
|
select extractvalue(@xml,'order/clerk');
|
|
select extractvalue(@xml,'/order/clerk');
|
|
|
|
#
|
|
# Bug#16314 XML: extractvalue() crash if vertical bar
|
|
#
|
|
select extractvalue('<a><b>B</b></a>','/a|/b');
|
|
select extractvalue('<a><b>B</b></a>','/a|b');
|
|
select extractvalue('<a>a<b>B</b></a>','/a|/b');
|
|
select extractvalue('<a>a<b>B</b></a>','/a|b');
|
|
select extractvalue('<a>a<b>B</b></a>','a|/b');
|
|
|
|
#
|
|
# Bug#16312 XML: extractvalue() crash if angle brackets
|
|
#
|
|
--error 1105
|
|
select extractvalue('<a>A</a>','/<a>');
|
|
|
|
#
|
|
# Bug#16313 XML: extractvalue() ignores '!' in names
|
|
#
|
|
--error 1105
|
|
select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!');
|