Loading mysql-test/r/xml.result +2 −0 Original line number Diff line number Diff line Loading @@ -544,3 +544,5 @@ extractvalue('<a>a<b>B</b></a>','a|/b') a select extractvalue('<a>A</a>','/<a>'); ERROR HY000: XPATH syntax error: '>' select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!'); ERROR HY000: XPATH syntax error: '!' mysql-test/t/xml.test +6 −0 Original line number Diff line number Diff line Loading @@ -237,3 +237,9 @@ select extractvalue('<a>a<b>B</b></a>','a|/b'); # --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!'); sql/item_xmlfunc.cc +11 −2 Original line number Diff line number Diff line Loading @@ -1976,8 +1976,17 @@ static int my_xpath_parse_AndExpr(MY_XPATH *xpath) */ static int my_xpath_parse_ne(MY_XPATH *xpath) { return my_xpath_parse_term(xpath, MY_XPATH_LEX_EXCL) && my_xpath_parse_term(xpath, MY_XPATH_LEX_EQ); MY_XPATH_LEX prevtok= xpath->prevtok; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_EXCL)) return 0; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_EQ)) { /* Unget the exclamation mark */ xpath->lasttok= xpath->prevtok; xpath->prevtok= prevtok; return 0; } return 1; } static int my_xpath_parse_EqualityOperator(MY_XPATH *xpath) { Loading Loading
mysql-test/r/xml.result +2 −0 Original line number Diff line number Diff line Loading @@ -544,3 +544,5 @@ extractvalue('<a>a<b>B</b></a>','a|/b') a select extractvalue('<a>A</a>','/<a>'); ERROR HY000: XPATH syntax error: '>' select extractvalue('<a><b>b</b><b!>b!</b!></a>','//b!'); ERROR HY000: XPATH syntax error: '!'
mysql-test/t/xml.test +6 −0 Original line number Diff line number Diff line Loading @@ -237,3 +237,9 @@ select extractvalue('<a>a<b>B</b></a>','a|/b'); # --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!');
sql/item_xmlfunc.cc +11 −2 Original line number Diff line number Diff line Loading @@ -1976,8 +1976,17 @@ static int my_xpath_parse_AndExpr(MY_XPATH *xpath) */ static int my_xpath_parse_ne(MY_XPATH *xpath) { return my_xpath_parse_term(xpath, MY_XPATH_LEX_EXCL) && my_xpath_parse_term(xpath, MY_XPATH_LEX_EQ); MY_XPATH_LEX prevtok= xpath->prevtok; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_EXCL)) return 0; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_EQ)) { /* Unget the exclamation mark */ xpath->lasttok= xpath->prevtok; xpath->prevtok= prevtok; return 0; } return 1; } static int my_xpath_parse_EqualityOperator(MY_XPATH *xpath) { Loading