diff options
-rw-r--r-- | mysql-test/r/xml.result | 29 | ||||
-rw-r--r-- | mysql-test/t/xml.test | 27 | ||||
-rw-r--r-- | sql/item_xmlfunc.cc | 2 |
3 files changed, 58 insertions, 0 deletions
diff --git a/mysql-test/r/xml.result b/mysql-test/r/xml.result index 404b0dc3789..fad2cab0e57 100644 --- a/mysql-test/r/xml.result +++ b/mysql-test/r/xml.result @@ -1064,4 +1064,33 @@ 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 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 diff --git a/mysql-test/t/xml.test b/mysql-test/t/xml.test index 74bce8dc962..6e7d38cdfca 100644 --- a/mysql-test/t/xml.test +++ b/mysql-test/t/xml.test @@ -590,4 +590,31 @@ select extractvalue('<a></a>','"b"/a'); --error ER_UNKNOWN_ERROR 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 diff --git a/sql/item_xmlfunc.cc b/sql/item_xmlfunc.cc index 5601a2b18c6..6320873e4d3 100644 --- a/sql/item_xmlfunc.cc +++ b/sql/item_xmlfunc.cc @@ -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 *res; + null_value= 0; if (!nodeset_func || !(res= args[0]->val_str(str)) || !parse_xml(res, &pxml)) @@ -2801,6 +2802,7 @@ String *Item_func_xml_update::val_str(String *str) { String *res, *nodeset, *rep; + null_value= 0; if (!nodeset_func || !(res= args[0]->val_str(str)) || !(rep= args[2]->val_str(&tmp_value3)) || |