SELECT extractValue('<a>a</a>', '/a[true()]');
extractValue('<a>a</a>', '/a[true()]')
a
SELECT extractValue('<a>a</a>', '/a[not(false())]');
extractValue('<a>a</a>', '/a[not(false())]')
a
SELECT extractValue('<a>a</a>', '/a[not(true())]');
extractValue('<a>a</a>', '/a[not(true())]')
SELECT extractValue('<a>a</a>', '/a[true() and true()]');
extractValue('<a>a</a>', '/a[true() and true()]')
a
SELECT extractValue('<a>a</a>', '/a[true() and false()]');
extractValue('<a>a</a>', '/a[true() and false()]')
SELECT extractValue('<a>a</a>', '/a[true() or true()]');
extractValue('<a>a</a>', '/a[true() or true()]')
a
SELECT extractValue('<a>a</a>', '/a[true() or false()]');
extractValue('<a>a</a>', '/a[true() or false()]')
a
SELECT extractValue('<a>a</a>', '/a[false()or false()]');
extractValue('<a>a</a>', '/a[false()or false()]')
select extractvalue('<a>a<b>B</b></a>','/a|/b');
extractvalue('<a>a<b>B</b></a>','/a|/b')
a
select extractvalue('<a>a<b>B</b></a>','/a|b');
extractvalue('<a>a<b>B</b></a>','/a|b')
a
select extractvalue('<a>a<b>B</b></a>','a|/b');
extractvalue('<a>a<b>B</b></a>','a|/b')
a
select extractvalue('<a>A</a>','/<a>'); ERROR HY000: XPATH error: comparison of two nodesets is not supported: '<a>'
select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!'); ERROR HY000: XPATH syntax error: '!'
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*');
extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant::*')
B C
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/self::*');
extractvalue('<a>A<b>B<c>C</c></b></a>','/a/self::*')
A
select extractvalue('<a>A<b>B<c>C</c></b></a>','/a/descendant-or-self::*') as xml;
xml
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()]') as xml;
xml
B1 B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=last()]') as xml;
xml
B1 B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()]') as xml;
xml
B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()-1]') as xml;
xml
B1
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=1]') as xml;
xml
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=2]') as xml;
xml
B1 B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[last()=position()]') as xml;
xml
B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)]') as xml;
xml
B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)-1]') as xml;
xml
B1
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=1]') as xml;
xml
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=2]') as xml;
xml
B1 B2
select extractvalue('<a>A<b>B1</b><b>B2</b></a>','/a/b[count(.)=position()]') as xml;
xml
B2
select extractvalue('<a>Jack</a>','/a[contains(../a,"J")]') as xml;
xml
Jack
select extractvalue('<a>Jack</a>','/a[contains(../a,"j")]') as xml;
xml
Jack
select extractvalue('<a>Jack</a>','/a[contains(../a,"j")]' collate latin1_bin) as xml;
xml
select extractvalue('<a>Jack</a>' collate latin1_bin,'/a[contains(../a,"j")]') as xml;
xml
select ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1');
ExtractValue('<tag1><![CDATA[test]]></tag1>','/tag1')
test
select extractValue('<a>a','/a');
extractValue('<a>a','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 5: unexpected END-OF-INPUT'
select extractValue('<a>a<','/a');
extractValue('<a>a<','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 6: END-OF-INPUT unexpected (ident or '/' wanted)'
select extractValue('<a>a</','/a');
extractValue('<a>a</','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 7: END-OF-INPUT unexpected (ident wanted)'
select extractValue('<a>a</a','/a');
extractValue('<a>a</a','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 8: END-OF-INPUT unexpected ('>' wanted)'
select extractValue('<a>a</a></b>','/a');
extractValue('<a>a</a></b>','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 12: '</b>' unexpected (END-OF-INPUT wanted)'
select extractValue('<a b=>a</a>','/a');
extractValue('<a b=>a</a>','/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 7: '>' unexpected (ident or string wanted)'
select extractValue('<e>1</e>','position()'); ERROR HY000: XPATH syntax error: ''
select extractValue('<e>1</e>','last()'); ERROR HY000: XPATH syntax error: ''
select extractValue('<e><a>1</a></e>','/e/'); ERROR HY000: XPATH syntax error: '' set names utf8;
select extractValue('<Ñ><r>r</r></Ñ>','/Ñ/r');
extractValue('<Ñ><r>r</r></Ñ>','/Ñ/r')
r
select extractValue('<r><Ñ>Ñ</Ñ></r>','/r/Ñ');
extractValue('<r><Ñ>Ñ</Ñ></r>','/r/Ñ')
Ñ
select extractValue('<Ñ r="r"/>','/Ñ/@r');
extractValue('<Ñ r="r"/>','/Ñ/@r')
r
select extractValue('<r Ñ="Ñ"/>','/r/@Ñ');
extractValue('<r Ñ="Ñ"/>','/r/@Ñ')
Ñ
DROP PROCEDURE IF EXISTS p2;
CREATE PROCEDURE p2 ()
BEGIN
DECLARE p LONGTEXT CHARACTER SET UTF8 DEFAULT '<Ñ><r>A</r></Ñ>';
SELECT EXTRACTVALUE(p,'/Ñ/r');
END//
CALL p2();
EXTRACTVALUE(p,'/Ñ/r')
A
DROP PROCEDURE p2;
select extractValue('<ns:element xmlns:ns="myns"/>','count(ns:element)') as xml;
xml 1
select extractValue('<ns:element xmlns:ns="myns">a</ns:element>','/ns:element') as xml;
xml
a
select extractValue('<ns:element xmlns:ns="myns">a</ns:element>','/ns:element/@xmlns:ns') as xml;
xml
myns
select extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/foo.bar') as xml;
xml
Data
select extractValue('<foo><foo.bar>Data</foo.bar><something>Otherdata</something></foo>','/foo/something') as xml;
xml
Otherdata
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','/zot/tim0/02') as xml; ERROR HY000: XPATH syntax error: '02'
select extractValue('<zot><tim0><01>10:39:15</01><02>140</02></tim0></zot>','//*') as xml;
xml
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 13: unknown token unexpected (ident or '/' wanted)'
select extractValue('<.>test</.>','//*');
extractValue('<.>test</.>','//*')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
select extractValue('<->test</->','//*');
extractValue('<->test</->','//*')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
select extractValue('<:>test</:>','//*');
extractValue('<:>test</:>','//*')
test
select extractValue('<_>test</_>','//*');
extractValue('<_>test</_>','//*')
test
select extractValue('<x.-_:>test</x.-_:>','//*');
extractValue('<x.-_:>test</x.-_:>','//*')
test set @xml= "<entry><id>pt10</id><pt>10</pt></entry><entry><id>pt50</id><pt>50</pt></entry>";
select ExtractValue(@xml, "/entry[(pt=10)]/id");
ExtractValue(@xml, "/entry[(pt=10)]/id")
pt10
select ExtractValue(@xml, "/entry[(pt!=10)]/id");
ExtractValue(@xml, "/entry[(pt!=10)]/id")
pt50
select ExtractValue(@xml, "/entry[(pt<10)]/id");
ExtractValue(@xml, "/entry[(pt<10)]/id")
select ExtractValue(@xml, "/entry[(50<=pt)]/id");
ExtractValue(@xml, "/entry[(50<=pt)]/id")
pt50
select ExtractValue('<a><b><Text>test</Text></b></a>','/a/b/Text') as xml;
xml
test
select ExtractValue('<a><b><comment>test</comment></b></a>','/a/b/comment') as xml;
xml
test
select ExtractValue('<a><b><node>test</node></b></a>','/a/b/node') as xml;
xml
test
select ExtractValue('<a><b><processing-instruction>test</processing-instruction></b></a>','/a/b/processing-instruction') as xml;
xml
test
select ExtractValue('<a><and>test</and></a>', '/a/and');
ExtractValue('<a><and>test</and></a>', '/a/and')
test
select ExtractValue('<a><or>test</or></a>', '/a/or');
ExtractValue('<a><or>test</or></a>', '/a/or')
test
select ExtractValue('<a><mod>test</mod></a>', '/a/mod');
ExtractValue('<a><mod>test</mod></a>', '/a/mod')
test
select ExtractValue('<a><div>test</div></a>', '/a/div');
ExtractValue('<a><div>test</div></a>', '/a/div')
test
select ExtractValue('<a><and:and>test</and:and></a>', '/a/and:and');
ExtractValue('<a><and:and>test</and:and></a>', '/a/and:and')
test
select ExtractValue('<a><or:or>test</or:or></a>', '/a/or:or');
ExtractValue('<a><or:or>test</or:or></a>', '/a/or:or')
test
select ExtractValue('<a><mod:mod>test</mod:mod></a>', '/a/mod:mod');
ExtractValue('<a><mod:mod>test</mod:mod></a>', '/a/mod:mod')
test
select ExtractValue('<a><div:div>test</div:div></a>', '/a/div:div');
ExtractValue('<a><div:div>test</div:div></a>', '/a/div:div')
test
select ExtractValue('<a><ancestor>test</ancestor></a>', '/a/ancestor') as xml;
xml
test
select ExtractValue('<a><ancestor-or-self>test</ancestor-or-self></a>', '/a/ancestor-or-self') as xml;
xml
test
select ExtractValue('<a><attribute>test</attribute></a>', '/a/attribute') as xml;
xml
test
select ExtractValue('<a><child>test</child></a>', '/a/child') as xml;
xml
test
select ExtractValue('<a><descendant>test</descendant></a>', '/a/descendant') as xml;
xml
test
select ExtractValue('<a><descendant-or-self>test</descendant-or-self></a>', '/a/descendant-or-self') as xml;
xml
test
select ExtractValue('<a><following>test</following></a>', '/a/following') as xml;
xml
test
select ExtractValue('<a><following-sibling>test</following-sibling></a>', '/a/following-sibling') as xml;
xml
test
select ExtractValue('<a><namespace>test</namespace></a>', '/a/namespace') as xml;
xml
test
select ExtractValue('<a><parent>test</parent></a>', '/a/parent') as xml;
xml
test
select ExtractValue('<a><preceding>test</preceding></a>', '/a/preceding') as xml;
xml
test
select ExtractValue('<a><preceding-sibling>test</preceding-sibling></a>', '/a/preceding-sibling') as xml;
xml
test
select ExtractValue('<a><self>test</self></a>', '/a/self') as xml;
xml
test set @i=1;
select ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]')
b1 set @i=2;
select ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]')
b2 set @i=NULL;
select ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[$@i]')
CREATE PROCEDURE spxml(xml VARCHAR(128))
BEGIN
DECLARE c INT;
DECLARE i INT DEFAULT 1; SET c= ExtractValue(xml,'count(/a/b)'); SET @i= c;
WHILE i <= c DO
BEGIN
SELECT i, @i, ExtractValue(xml,'/a/b[$i]'), ExtractValue(xml,'/a/b[$@i]'); SET i= i + 1; SET @i= @i - 1;
END;
END WHILE;
END|
call spxml('<a><b>b1</b><b>b2</b><b>b3</b></a>');
i @i ExtractValue(xml,'/a/b[$i]') ExtractValue(xml,'/a/b[$@i]') 13 b1 b3
i @i ExtractValue(xml,'/a/b[$i]') ExtractValue(xml,'/a/b[$@i]') 22 b2 b2
i @i ExtractValue(xml,'/a/b[$i]') ExtractValue(xml,'/a/b[$@i]') 31 b3 b1
drop procedure spxml;
Multiple matches, but no index specification
SELECT ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b')
b1 b2
No matches
SELECT ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/c');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/c')
Index out of range
SELECT ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[-1]');
ExtractValue('<a><b>b1</b><b>b2</b></a>','/a/b[-1]')
Warnings:
Warning 1292 Truncated incorrect INTEGER value: 'string'
Warning 1292 Truncated incorrect INTEGER value: 'string'
DROP PROCEDURE spxml;
select UpdateXML('<a>a</a>',repeat('a b ',1000),''); ERROR HY000: XPATH syntax error: 'b a b a b a b a b a b a b a b...'
select ExtractValue('<a>a</a>', '/a[@x=@y0123456789_0123456789_0123456789_0123456789]'); ERROR HY000: XPATH error: comparison of two nodesets is not supported: '=@y0123456789_0123456789_0123...'
select ExtractValue('<a>a</a>', '/a[@x=$y0123456789_0123456789_0123456789_0123456789]'); ERROR HY000: Unknown XPATH variable at: '$y0123456789_0123456789_01234...'
select updatexml(NULL, 1, 1), updatexml(1, NULL, 1), updatexml(1, 1, NULL);
updatexml(NULL, 1, 1) updatexml(1, NULL, 1) updatexml(1, 1, NULL)
NULL NULL NULL
select updatexml(NULL, NULL, 1), updatexml(1, NULL, NULL),
updatexml(NULL, 1, NULL);
updatexml(NULL, NULL, 1) updatexml(1, NULL, NULL) updatexml(NULL, 1, NULL)
NULL NULL NULL
select updatexml(NULL, NULL, NULL);
updatexml(NULL, NULL, NULL)
NULL
CREATE TABLE t1(a INT NOT NULL);
INSERT INTO t1 VALUES (0), (0);
SELECT 1 FROM t1 ORDER BY(UPDATEXML(a, '1', '1')); 1 1 1
DROP TABLE t1; SET @xml= '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> Title - document with document declaration</title>
</head>
<body> Hi, Im a webpage with document a declaration </body>
</html>';
SELECT ExtractValue(@xml, 'html/head/title');
ExtractValue(@xml, 'html/head/title')
Title - document with document declaration
SELECT ExtractValue(@xml, 'html/body');
ExtractValue(@xml, 'html/body')
Hi, Im a webpage with document a declaration
SELECT ExtractValue('<xml "xxx" "yyy">CharData</xml>', '/xml');
ExtractValue('<xml "xxx" "yyy">CharData</xml>', '/xml')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 11: STRING unexpected ('>' wanted)'
SELECT ExtractValue('<xml xxx "yyy">CharData</xml>', '/xml');
ExtractValue('<xml xxx "yyy">CharData</xml>', '/xml')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 17: STRING unexpected ('>' wanted)' set @x=10;
select extractvalue('<a></a>','$@x/a'); ERROR HY000: XPATH syntax error: '/a'
select extractvalue('<a></a>','round(123.4)/a'); ERROR HY000: XPATH syntax error: '/a'
select extractvalue('<a></a>','1/a'); ERROR HY000: XPATH syntax error: '/a'
select extractvalue('<a></a>','"b"/a'); ERROR HY000: XPATH syntax error: '/a'
select extractvalue('<a></a>','(1)/a'); ERROR HY000: XPATH syntax error: '/a'
CREATE TABLE IFNOT EXISTS t1 (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
xml text,
PRIMARY KEY (id)
) ENGINE=MyISAM;
INSERT INTO t1 (id, xml) VALUES
(15, '<?xml version="1.0"?><bla name="blubb"></bla>'),
(14, '<xml version="kaputt">');
SELECT
extractvalue( xml, '/bla/@name' ),
extractvalue( xml, '/bla/@name' )
FROM t1 ORDER BY t1.id;
extractvalue( xml, '/bla/@name' ) extractvalue( xml, '/bla/@name' )
NULL NULL
blubb blubb
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 23: unexpected END-OF-INPUT'
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 23: unexpected END-OF-INPUT'
SELECT
UpdateXML(xml, '/bla/@name', 'test'),
UpdateXML(xml, '/bla/@name', 'test')
FROM t1 ORDER BY t1.id;
UpdateXML(xml, '/bla/@name', 'test') UpdateXML(xml, '/bla/@name', 'test')
NULL NULL
<?xml version="1.0"?><bla test></bla> <?xml version="1.0"?><bla test></bla>
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 23: unexpected END-OF-INPUT'
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 23: unexpected END-OF-INPUT'
DROP TABLE t1;
#
# Bug#57257Replace(ExtractValue(...)) causes MySQL crash
# SET NAMES utf8;
SELECT REPLACE(EXTRACTVALUE('1', '/a'),'ds',''); REPLACE(EXTRACTVALUE('1', '/a'),'ds','')
#
# Bug #57820 extractvalue crashes
#
SELECT AVG(DISTINCT EXTRACTVALUE((''),('$@k')));
AVG(DISTINCT EXTRACTVALUE((''),('$@k')))
NULL
#
# Bug#57279 updatexml dies with: Assertion failed: str_arg[length] == 0
#
SELECT UPDATEXML(NULL, (LPAD(0.1111E-15, '2011', 1)), 1); ERROR22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...' value found during parsing
SELECT EXTRACTVALUE('', LPAD(0.1111E-15, '2011', 1)); ERROR22007: Illegal double '111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111...' value found during parsing
#
# Bug #44332 my_xml_scan reads behind the end of buffer
#
SELECT UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1');
UPDATEXML(CONVERT(_latin1'<' USING utf8),'1','1')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: END-OF-INPUT unexpected (ident or '/' wanted)'
SELECT UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1');
UPDATEXML(CONVERT(_latin1'<!--' USING utf8),'1','1')
NULL
#
# Bug#11766725 (bug#59901): EXTRACTVALUE STILL BROKEN AFTER FIX FOR BUG #44332
#
SELECT ExtractValue(CONVERT('<\"', BINARY(10)), 1);
ExtractValue(CONVERT('<\"', BINARY(10)), 1)
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 11: STRING unexpected (ident or '/' wanted)'
End of 5.1 tests
#
# Start of 5.3 tests
#
#
# MDEV-5338 XML parser accepts malformed data
#
SELECT ExtractValue('<a>xxx</c>','/a/b');
ExtractValue('<a>xxx</c>','/a/b')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 10: '</c>' unexpected ('</a>' wanted)'
SELECT ExtractValue('<a><b>xxx</c></a>','/a/b');
ExtractValue('<a><b>xxx</c></a>','/a/b')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 13: '</c>' unexpected ('</b>' wanted)'
#
# End of 5.3 tests
#
# Start of 5.5 tests
#
#
# Bug#58175 xml functions read initialized bytes when conversions happen
# SET NAMES latin1;
SELECT UPDATEXML(CONVERT('' USING swe7), TRUNCATE('',1), 0);
UPDATEXML(CONVERT('' USING swe7), TRUNCATE('',1), 0)
NULL
Warnings:
Warning 1292 Truncated incorrect DOUBLE value: ''
#
# Bug#12375190: UPDATEXML CRASHES ON SIMPLE INPUTS
#
SELECT UPDATEXML('','(a)/a','');
UPDATEXML('','(a)/a','')
SELECT UPDATEXML('<a><a>x</a></a>','(a)/a','<b />');
UPDATEXML('<a><a>x</a></a>','(a)/a','<b />')
<a><b /></a>
SELECT UPDATEXML('<a><c><a>x</a></c></a>','(a)/a','<b />');
UPDATEXML('<a><c><a>x</a></c></a>','(a)/a','<b />')
<a><c><a>x</a></c></a>
SELECT UPDATEXML('<a><c><a>x</a></c></a>','(a)//a','<b />');
UPDATEXML('<a><c><a>x</a></c></a>','(a)//a','<b />')
<a><c><b /></c></a>
SELECT ExtractValue('<a><a>aa</a><b>bb</b></a>','(a)/a|(a)/b');
ExtractValue('<a><a>aa</a><b>bb</b></a>','(a)/a|(a)/b')
aa bb
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,..)') as xml;
xml
Warnings:
Warning 1292 Truncated incorrect INTEGER value: ''
#
# Bug#62429 XML: ExtractValue, UpdateXML max arg length 127 chars
#
CREATE TABLE t1 (id INT AUTO_INCREMENT, txt VARCHAR(1000), PRIMARY KEY(id));
INSERT INTO t1 (txt) VALUES
(CONCAT('<', REPEAT('a',127), '>127</', REPEAT('a',127), '>')),
(CONCAT('<', REPEAT('a',128), '>128</', REPEAT('a',128), '>')),
(CONCAT('<', REPEAT('a',63), '><', REPEAT('b',63), '>63/63</', REPEAT('b',63), '></', REPEAT('a',63),'>')),
(CONCAT('<', REPEAT('a',63), '><', REPEAT('b',64), '>63/64</', REPEAT('b',64), '></', REPEAT('a',63),'>'));
SELECT
txt,
EXTRACTVALUE(txt, CONCAT('/', REPEAT('a', 127))) as a127,
EXTRACTVALUE(txt, CONCAT('/', REPEAT('a', 128))) as a128,
EXTRACTVALUE(txt, CONCAT('//', REPEAT('b', 63))) as a63b63,
EXTRACTVALUE(txt, CONCAT('//', REPEAT('b', 64))) as a63b64
FROM t1;
txt <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>127</aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
a127 127
a128
a63b63
a63b64
txt <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>128</aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
a127
a128 128
a63b63
a63b64
txt <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa><bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb>63/63</bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb></aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
a127
a128
a63b63 63/63
a63b64
txt <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa><bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb>63/64</bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb></aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
a127
a128
a63b63
a63b64 63/64
SELECT UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') FROM t1;
UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>127</aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>128</aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>63/63+</aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
UPDATEXML(txt, CONCAT('//', REPEAT('b', 63)), '63/63+') <aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa><bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb>63/64</bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb></aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa>
DROP TABLE t1;
CREATE TABLE t1 (a TEXT);
INSERT INTO t1 VALUES (CONCAT('<a><', REPEAT('b',128),'>b128</',REPEAT('b',128),'><',REPEAT('c',512),'>c512</',REPEAT('c',512),'></a>'));
SELECT ExtractValue (a, CONCAT('//',REPEAT('c',512))) AS c512 FROM t1;
c512 c512
DROP TABLE t1;
#
# End of 5.5 tests
#
#
# Start of 10.0 tests
#
#
# MDEV-5689 ExtractValue(xml, 'substring(/x,/y)') crashes
#
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,..)') AS e;
e
Warnings:
Warning 1292 Truncated incorrect INTEGER value: ''
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,/a/c)') AS e;
e
bc
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,/a/d)') AS e;
e
abc
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,/a/c,/a/d)') AS e;
e
b
SELECT ExtractValue('<a><b>abc</b><c>2</c><d>1</d></a>','substring(/a/b,/a/d,/a/c)') AS e;
e
ab
#
# MDEV-5709 ExtractValue() with XPath variable references returns wrong result
#
CREATE TABLE t1 (c1 INT, c2 VARCHAR(10));
INSERT INTO t1 VALUES (1,'b1'),(2,'b2');
SELECT *,IF(@i:=c1,ExtractValue('<a><b>b1</b><b>b2</b></a>','//b[$@i]'),0) AS xpath FROM t1;
c1 c2 xpath 1 b1 b1 2 b2 b2
SELECT * FROM t1 WHERE c2=IF(@i:=c1,ExtractValue('<a><b>b1</b><b>b2</b></a>','//b[$@i]'),0);
c1 c2 1 b1 2 b2
DROP TABLE t1;
#
# MDEV-15118 ExtractValue(xml,something_complex) does not work
#
CREATE TABLE t1 (a TEXT);
INSERT INTO t1 VALUES (CONCAT('<a>aaa</a>'));
SELECT ExtractValue(a, '/a') AS a FROM t1;
a
aaa
SELECT ExtractValue(a, FROM_BASE64(TO_BASE64('/a'))) AS a FROM t1;
a
aaa
DROP TABLE t1;
#
# End of 10.0 tests
#
#
# Start of 10.2 tests
#
#
# MDEV-10134 Add full support for DEFAULT
#
CREATE TABLE t1 (a TEXT, b TEXT DEFAULT ExtractValue(a, '/a/b'));
INSERT INTO t1 (a) VALUES ('<a><b>bbb</b></a>');
SELECT b FROM t1;
b
bbb
DROP TABLE t1;
CREATE TABLE t1 (a TEXT, b TEXT DEFAULT UpdateXML(a, '/a/b','<b>xxx</b>'));
INSERT INTO t1 (a) VALUES ('<a><b>bbb</b></a>');
SELECT b FROM t1;
b
<a><b>xxx</b></a>
DROP TABLE t1;
#
# End of 10.2 tests
#
#
# Start of 10.5 tests
#
#
# MDEV-20818 ER_CRASHED_ON_USAGE or Assertion `length <= column->length' failed in write_block_record on temporary table
#
SELECT 'foo' AS f UNION SELECT BINARY( UpdateXML('<a></a>', '/a', '<b></b>')) AS f;
f
foo
<b></b>
#
# End of 10.5 tests
#
#
# Start of 10.6 tests
#
#
# MDEV-39210 ExtractValue/UpdateXML crash
#
SELECT ExtractValue('<!a/><!b/>', '/a');
ExtractValue('<!a/><!b/>', '/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
SELECT UpdateXML('<!a/><!b/>', '/a', '<new/>');
UpdateXML('<!a/><!b/>', '/a', '<new/>')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
SELECT ExtractValue('<!a/><!b/><!c/>', '/a');
ExtractValue('<!a/><!b/><!c/>', '/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)'
SELECT ExtractValue('<?a/?><?b/?>', '/a');
ExtractValue('<?a/?><?b/?>', '/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 5: unknown token unexpected (ident wanted)'
SELECT ExtractValue('<!a/><?b/?>', '/a');
ExtractValue('<!a/><?b/?>', '/a')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 2: unknown token unexpected (ident or '/' wanted)' SET @xml='<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note [
<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>See you this weekend!</body>
</note> ';
SELECT ExtractValue(@xml, '/note/from');
ExtractValue(@xml, '/note/from')
Jani set @xml= '<?xml version="1.0"?>
<employee>
<dt1>--01--+01:00</dt1>
<dt2>--12--+01:00</dt2>
<?dt3 123456 ?>
<dt3>--02--</dt3>
<dt4>--03--Z</dt4>
<?dt4 123456 ?>
</employee>
<?employee ABSDEV !@#$ ?>';
SELECT ExtractValue(@xml, '/employee/dt3');
ExtractValue(@xml, '/employee/dt3')
--02-- set @xml= '<? xml version="1.0"?>
<employee>
<dt1>--01--+01:00</dt1>
<dt2>--12--+01:00</dt2>
<?dt3 123456 ?>
<dt3>--02--</dt3>
<dt4>--03--Z</dt4>
<?dt4 123456 ?>
</employee>
<? employee ABSDEV !@#$ ?>';
SELECT ExtractValue(@xml, '/employee/dt3');
ExtractValue(@xml, '/employee/dt3')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 1 pos 21: unknown token unexpected ('>' wanted)' set @xml= '<?xml version="1.0"?>
<employee>
<dt1>--01--+01:00</dt1>
<dt2>--12--+01:00</dt2>
<?dt3 123456 ?>
<dt3>--02--</dt3>
<dt4>--03--Z</dt4>
<?dt4 123456 ? >
</employee>
<?employee ABSDEV !@#$ ?>';
SELECT ExtractValue(@xml, '/employee/dt3');
ExtractValue(@xml, '/employee/dt3')
NULL
Warnings:
Warning 1525 Incorrect XML value: 'parse error at line 10 pos 27: unexpected END-OF-INPUT'
# End of 10.6 tests
# Start of 11.4 tests
#
# MDEV-36565 Assertion `src != ((void *)0)' failed in my_casedn_8bit
# SET NAMES latin1;
SELECT lcase((extractvalue('a', 'a'))) a FROM (select 1) dt;
a
SELECT ucase((extractvalue('a', 'a'))) a FROM (select 1) dt;
a
# End of 11.4 tests
#
# MDEV-ASAN heap-buffer-overflow in process_str_arg upon ER_TRUNCATED_WRONG_VALUE "Incorrect XML value".
#
CREATE TABLE t1 (name varchar(10));
INSERT INTO t1 VALUES ("one"), ("two"), ("three"), ("four"), ("five");
SELECT UpdateXML(1, '/a', '') a
FROM t1
GROUP BY a, name;
a 1 1 1 1 1
DROP TABLE t1;
# End of 12.3 tests
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.