SET @xml='a1b1c1b2a2';
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/self::*');
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='a11b11b21c1b22a12';
SELECT extractValue(@xml,'/a/b/c/ancestor-or-self::*');
SELECT extractValue(@xml,'//@ba');
SET @xml='bc';
SELECT extractValue(@xml,'/a/b');
SELECT extractValue(@xml,'/a/c');
SELECT extractValue(@xml,'/a/child::b');
SELECT extractValue(@xml,'/a/child::c');
SET @xml='b1c1b2c2';
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='';
SELECT extractValue(@xml,'/a//@x');
SELECT extractValue(@xml,'/a//@x[1]');
SELECT extractValue(@xml,'/a//@x[2]');
SET @xml='b1b2c1b1c1b2c2b1/a>';
SELECT extractValue(@xml,'//b[1]');
SELECT extractValue(@xml,'/descendant::b[1]');
SET @xml='b1b2';
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='b11c11b21c21';
SELECT extractValue(@xml,'/a/b[c="c11"]');
SELECT extractValue(@xml,'/a/b[c="c21"]');
SET @xml='b11b21';
SELECT extractValue(@xml,'/a/b[@c="c11"]');
SELECT extractValue(@xml,'/a/b[@c="c21"]');
SET @xml='a1b11d11b21d21';
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[false()]');
SELECT extractValue('a', '/a[true()]');
SELECT extractValue('a', '/a[not(false())]');
SELECT extractValue('a', '/a[not(true())]');
SELECT extractValue('a', '/a[true() and true()]');
SELECT extractValue('a', '/a[true() and false()]');
SELECT extractValue('a', '/a[false()and false()]');
SELECT extractValue('a', '/a[false()and true()]');
SELECT extractValue('a', '/a[true() or true()]');
SELECT extractValue('a', '/a[true() or false()]');
SELECT extractValue('a', '/a[false()or false()]');
SELECT extractValue('a', '/a[false()or true()]');
SET @xml='abb1b2b3';
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='b1b2';
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='b1b2';
SELECT extractValue(@xml,'/a/b[@*]');
SELECT extractValue(@xml,'/a/b[not(@*)]');
SELECT extractValue('a', '/a[ceiling(3.1)=4]');
SELECT extractValue('a', '/a[floor(3.1)=3]');
SELECT extractValue('a', '/a[round(3.1)=3]');
SELECT extractValue('a', '/a[round(3.8)=4]');
SELECT extractValue('bc', '/a/b | /a/c');
select extractValue('','/a/@b[position()=1]');
select extractValue('','/a/@b[position()=2]');
select extractValue('','/a/@b[position()=3]');
select extractValue('','/a/@b[1=position()]');
select extractValue('','/a/@b[2=position()]');
select extractValue('','/a/@b[3=position()]');
select extractValue('','/a/@b[2>=position()]');
select extractValue('','/a/@b[2<=position()]');
select extractValue('','/a/@b[position()=3 or position()=2]');
SELECT extractValue('aa1c1a2','/a/b[count(c)=0]');
SELECT extractValue('aa1c1a2','/a/b[count(c)=1]');
select extractValue('a1b1b24','/a/b[sum(@ba)=3]');
select extractValue('b1b2','/a/b[1]');
select extractValue('b1b2','/a/b[boolean(1)]');
select extractValue('b1b2','/a/b[true()]');
select extractValue('b1b2','/a/b[number(true())]');
select extractValue('ab','/a[contains("abc","b")]');
select extractValue('ab','/a[contains(.,"a")]');
select extractValue('ab','/a[contains(.,"b")]');
select extractValue('ab','/a[contains(.,"c")]');
select extractValue('ab','/a[concat(@b,"2")="12"]');
SET @xml='ab';
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='';
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='a1b1c1b2a2';
select UpdateXML('a1b1c1b2a2','/a/b/c','+++++++++');
select UpdateXML('a1b1c1b2a2','/a/b/c','+++++++++');
select UpdateXML('a1b1c1b2a2','/a/b/c','');
SET @xml='bb';
select UpdateXML(@xml, '/a/b', 'ccc');
SET @xml='bb';
select UpdateXML(@xml, '/a/b', 'ccc');
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= 'lesser wombat';
select extractvalue(@xml,'order/clerk');
select extractvalue(@xml,'/order/clerk');
#
# Bug#16314 XML: extractvalue() crash if vertical bar
#
select extractvalue('B','/a|/b');
select extractvalue('B','/a|b');
select extractvalue('aB','/a|/b');
select extractvalue('aB','/a|b');
select extractvalue('aB','a|/b');
#
# Bug#16312 XML: extractvalue() crash if angle brackets
#
--error 1105
select extractvalue('A','/');
#
# Bug#16313 XML: extractvalue() ignores '!' in names
#
--error 1105
select extractvalue('bb!','//b!');
#
# Bug #16315 XML: extractvalue() handles self badly
#
select extractvalue('ABC','/a/descendant::*');
select extractvalue('ABC','/a/self::*');
select extractvalue('ABC','/a/descendant-or-self::*');
# Bug #16320 XML: extractvalue() won't accept names containing underscores
#
select extractvalue('A','/A_B');
#
# Bug#16316: XML: extractvalue() is case-sensitive with contains()
#
select extractvalue('Jack','/a[contains(../a,"J")]');
select extractvalue('Jack','/a[contains(../a,"j")]');
select extractvalue('Jack','/a[contains(../a,"j")]' collate latin1_bin);
select extractvalue('Jack' collate latin1_bin,'/a[contains(../a,"j")]');