Loading mysql-test/r/xml.result +24 −0 Original line number Diff line number Diff line Loading @@ -468,6 +468,30 @@ extractValue(@xml, '/a/@b[substring(.,2,1)="1"]') select extractValue(@xml, '/a/@b[substring(.,2,1)="2"]'); extractValue(@xml, '/a/@b[substring(.,2,1)="2"]') 12 22 SET @xml='<a><b>b1</b><b>b2</b></a>'; SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); extractValue(@xml, '/a/b[string-length("x")=1]') b1 b2 SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); extractValue(@xml, '/a/b[string-length("xx")=2]') b1 b2 SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); extractValue(@xml, '/a/b[string-length("xxx")=2]') SELECT extractValue(@xml, '/a/b[string-length("x")]'); extractValue(@xml, '/a/b[string-length("x")]') b1 SELECT extractValue(@xml, '/a/b[string-length("xx")]'); extractValue(@xml, '/a/b[string-length("xx")]') b2 SELECT extractValue(@xml, '/a/b[string-length()]'); extractValue(@xml, '/a/b[string-length()]') b2 SELECT extractValue(@xml, 'string-length()'); ERROR HY000: XPATH syntax error: '' SELECT extractValue(@xml, 'string-length("x")'); extractValue(@xml, 'string-length("x")') 1 SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); extractValue(@xml,'/a/@b') Loading mysql-test/t/xml.test +14 −0 Original line number Diff line number Diff line Loading @@ -192,6 +192,20 @@ 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"]'); # # Bug#16319: XML: extractvalue() returns syntax errors for some functions # SET @xml='<a><b>b1</b><b>b2</b></a>'; SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); SELECT extractValue(@xml, '/a/b[string-length("x")]'); SELECT extractValue(@xml, '/a/b[string-length("xx")]'); SELECT extractValue(@xml, '/a/b[string-length()]'); --error 1105 SELECT extractValue(@xml, 'string-length()'); SELECT extractValue(@xml, 'string-length("x")'); SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); select extractValue(@xml,'/a/@b[contains(.,"1")]'); Loading sql/item_xmlfunc.cc +17 −1 Original line number Diff line number Diff line Loading @@ -1133,6 +1133,13 @@ static Item *create_func_number(MY_XPATH *xpath, Item **args, uint nargs) } static Item *create_func_string_length(MY_XPATH *xpath, Item **args, uint nargs) { Item *arg= nargs ? args[0] : xpath->context; return arg ? new Item_func_char_length(arg) : 0; } static Item *create_func_round(MY_XPATH *xpath, Item **args, uint nargs) { return new Item_func_round(args[0], new Item_int((char*)"0",0,1),0); Loading Loading @@ -1243,9 +1250,11 @@ static MY_XPATH_FUNC my_func_names[] = {"substring" , 9 , 2 , 3 , create_func_substr}, {"translate" , 9 , 3 , 3 , 0}, {"local-name" , 10 , 0 , 1 , 0}, {"starts-with" , 11 , 2 , 2 , 0}, {"namespace-uri" , 13 , 0 , 1 , 0}, {"string-length" , 13 , 0 , 1 , create_func_string_length}, {"substring-after" , 15 , 2 , 2 , 0}, {"normalize-space" , 15 , 0 , 1 , 0}, {"substring-before" , 16 , 2 , 2 , 0}, Loading Loading @@ -1837,7 +1846,12 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) for (nargs= 0 ; nargs < func->maxargs; ) { if (!my_xpath_parse_Expr(xpath)) { if (nargs < func->minargs) return 0; else goto right_paren; } args[nargs++]= xpath->item; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_COMMA)) { Loading @@ -1847,6 +1861,8 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) break; } } right_paren: if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_RP)) return 0; Loading Loading
mysql-test/r/xml.result +24 −0 Original line number Diff line number Diff line Loading @@ -468,6 +468,30 @@ extractValue(@xml, '/a/@b[substring(.,2,1)="1"]') select extractValue(@xml, '/a/@b[substring(.,2,1)="2"]'); extractValue(@xml, '/a/@b[substring(.,2,1)="2"]') 12 22 SET @xml='<a><b>b1</b><b>b2</b></a>'; SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); extractValue(@xml, '/a/b[string-length("x")=1]') b1 b2 SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); extractValue(@xml, '/a/b[string-length("xx")=2]') b1 b2 SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); extractValue(@xml, '/a/b[string-length("xxx")=2]') SELECT extractValue(@xml, '/a/b[string-length("x")]'); extractValue(@xml, '/a/b[string-length("x")]') b1 SELECT extractValue(@xml, '/a/b[string-length("xx")]'); extractValue(@xml, '/a/b[string-length("xx")]') b2 SELECT extractValue(@xml, '/a/b[string-length()]'); extractValue(@xml, '/a/b[string-length()]') b2 SELECT extractValue(@xml, 'string-length()'); ERROR HY000: XPATH syntax error: '' SELECT extractValue(@xml, 'string-length("x")'); extractValue(@xml, 'string-length("x")') 1 SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); extractValue(@xml,'/a/@b') Loading
mysql-test/t/xml.test +14 −0 Original line number Diff line number Diff line Loading @@ -192,6 +192,20 @@ 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"]'); # # Bug#16319: XML: extractvalue() returns syntax errors for some functions # SET @xml='<a><b>b1</b><b>b2</b></a>'; SELECT extractValue(@xml, '/a/b[string-length("x")=1]'); SELECT extractValue(@xml, '/a/b[string-length("xx")=2]'); SELECT extractValue(@xml, '/a/b[string-length("xxx")=2]'); SELECT extractValue(@xml, '/a/b[string-length("x")]'); SELECT extractValue(@xml, '/a/b[string-length("xx")]'); SELECT extractValue(@xml, '/a/b[string-length()]'); --error 1105 SELECT extractValue(@xml, 'string-length()'); SELECT extractValue(@xml, 'string-length("x")'); SET @xml='<a b="b11" b="b12" b="b21" b="22"/>'; select extractValue(@xml,'/a/@b'); select extractValue(@xml,'/a/@b[contains(.,"1")]'); Loading
sql/item_xmlfunc.cc +17 −1 Original line number Diff line number Diff line Loading @@ -1133,6 +1133,13 @@ static Item *create_func_number(MY_XPATH *xpath, Item **args, uint nargs) } static Item *create_func_string_length(MY_XPATH *xpath, Item **args, uint nargs) { Item *arg= nargs ? args[0] : xpath->context; return arg ? new Item_func_char_length(arg) : 0; } static Item *create_func_round(MY_XPATH *xpath, Item **args, uint nargs) { return new Item_func_round(args[0], new Item_int((char*)"0",0,1),0); Loading Loading @@ -1243,9 +1250,11 @@ static MY_XPATH_FUNC my_func_names[] = {"substring" , 9 , 2 , 3 , create_func_substr}, {"translate" , 9 , 3 , 3 , 0}, {"local-name" , 10 , 0 , 1 , 0}, {"starts-with" , 11 , 2 , 2 , 0}, {"namespace-uri" , 13 , 0 , 1 , 0}, {"string-length" , 13 , 0 , 1 , create_func_string_length}, {"substring-after" , 15 , 2 , 2 , 0}, {"normalize-space" , 15 , 0 , 1 , 0}, {"substring-before" , 16 , 2 , 2 , 0}, Loading Loading @@ -1837,7 +1846,12 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) for (nargs= 0 ; nargs < func->maxargs; ) { if (!my_xpath_parse_Expr(xpath)) { if (nargs < func->minargs) return 0; else goto right_paren; } args[nargs++]= xpath->item; if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_COMMA)) { Loading @@ -1847,6 +1861,8 @@ static int my_xpath_parse_FunctionCall(MY_XPATH *xpath) break; } } right_paren: if (!my_xpath_parse_term(xpath, MY_XPATH_LEX_RP)) return 0; Loading