Commit c08ceffd authored by Sergey Glukhov's avatar Sergey Glukhov

Bug#43183 ExctractValue() brings result list in missorder

The problem is that XML functions(items) do not reset null_value
before their execution and further item excution may use
null_value value of the previous result.
The fix is to reset null_value.
parent a26f8d91
...@@ -1064,4 +1064,33 @@ select extractvalue('<a></a>','"b"/a'); ...@@ -1064,4 +1064,33 @@ select extractvalue('<a></a>','"b"/a');
ERROR HY000: XPATH syntax error: '/a' ERROR HY000: XPATH syntax error: '/a'
select extractvalue('<a></a>','(1)/a'); select extractvalue('<a></a>','(1)/a');
ERROR HY000: XPATH syntax error: '/a' ERROR HY000: XPATH syntax error: '/a'
CREATE TABLE IF NOT 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;
End of 5.1 tests End of 5.1 tests
...@@ -590,4 +590,31 @@ select extractvalue('<a></a>','"b"/a'); ...@@ -590,4 +590,31 @@ select extractvalue('<a></a>','"b"/a');
--error ER_UNKNOWN_ERROR --error ER_UNKNOWN_ERROR
select extractvalue('<a></a>','(1)/a'); select extractvalue('<a></a>','(1)/a');
#
# Bug#43183 ExctractValue() brings result list in missorder
#
CREATE TABLE IF NOT 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;
SELECT
UpdateXML(xml, '/bla/@name', 'test'),
UpdateXML(xml, '/bla/@name', 'test')
FROM t1 ORDER BY t1.id;
DROP TABLE t1;
--echo End of 5.1 tests --echo End of 5.1 tests
...@@ -2785,6 +2785,7 @@ String *Item_xml_str_func::parse_xml(String *raw_xml, String *parsed_xml_buf) ...@@ -2785,6 +2785,7 @@ String *Item_xml_str_func::parse_xml(String *raw_xml, String *parsed_xml_buf)
String *Item_func_xml_extractvalue::val_str(String *str) String *Item_func_xml_extractvalue::val_str(String *str)
{ {
String *res; String *res;
null_value= 0;
if (!nodeset_func || if (!nodeset_func ||
!(res= args[0]->val_str(str)) || !(res= args[0]->val_str(str)) ||
!parse_xml(res, &pxml)) !parse_xml(res, &pxml))
...@@ -2801,6 +2802,7 @@ String *Item_func_xml_update::val_str(String *str) ...@@ -2801,6 +2802,7 @@ String *Item_func_xml_update::val_str(String *str)
{ {
String *res, *nodeset, *rep; String *res, *nodeset, *rep;
null_value= 0;
if (!nodeset_func || if (!nodeset_func ||
!(res= args[0]->val_str(str)) || !(res= args[0]->val_str(str)) ||
!(rep= args[2]->val_str(&tmp_value3)) || !(rep= args[2]->val_str(&tmp_value3)) ||
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment