MCPcopy Create free account
hub / github.com/Meituan-Dianping/SQLAdvisor / parse_xml

Method parse_xml

sql/item_xmlfunc.cc:2738–2776  ·  view source on GitHub ↗

Parse raw XML SYNOPSYS RETURN Currently pointer to parsed XML on success 0 on parse error */

Source from the content-addressed store, hash-verified

2736 0 on parse error
2737*/
2738String *Item_xml_str_func::parse_xml(String *raw_xml, String *parsed_xml_buf)
2739{
2740 MY_XML_PARSER p;
2741 MY_XML_USER_DATA user_data;
2742 int rc;
2743
2744 parsed_xml_buf->length(0);
2745
2746 /* Prepare XML parser */
2747 my_xml_parser_create(&p);
2748 p.flags= MY_XML_FLAG_RELATIVE_NAMES | MY_XML_FLAG_SKIP_TEXT_NORMALIZATION;
2749 user_data.level= 0;
2750 user_data.pxml= parsed_xml_buf;
2751 user_data.parent= 0;
2752 my_xml_set_enter_handler(&p, xml_enter);
2753 my_xml_set_value_handler(&p, xml_value);
2754 my_xml_set_leave_handler(&p, xml_leave);
2755 my_xml_set_user_data(&p, (void*) &user_data);
2756
2757 /* Add root node */
2758 p.current_node_type= MY_XML_NODE_TAG;
2759 xml_enter(&p, raw_xml->ptr(), 0);
2760
2761 /* Execute XML parser */
2762 if ((rc= my_xml_parse(&p, raw_xml->ptr(), raw_xml->length())) != MY_XML_OK)
2763 {
2764 char buf[128];
2765 my_snprintf(buf, sizeof(buf)-1, "parse error at line %d pos %lu: %s",
2766 my_xml_error_lineno(&p) + 1,
2767 (ulong) my_xml_error_pos(&p) + 1,
2768 my_xml_error_string(&p));
2769 push_warning_printf(current_thd, Sql_condition::WARN_LEVEL_WARN,
2770 ER_WRONG_VALUE,
2771 ER(ER_WRONG_VALUE), "XML", buf);
2772 }
2773 my_xml_parser_free(&p);
2774
2775 return rc == MY_XML_OK ? parsed_xml_buf : 0;
2776}
2777
2778
2779String *Item_func_xml_extractvalue::val_str(String *str)

Callers

nothing calls this directly

Calls 15

my_xml_parser_createFunction · 0.85
my_xml_set_enter_handlerFunction · 0.85
my_xml_set_value_handlerFunction · 0.85
my_xml_set_leave_handlerFunction · 0.85
my_xml_set_user_dataFunction · 0.85
xml_enterFunction · 0.85
my_xml_parseFunction · 0.85
my_snprintfFunction · 0.85
my_xml_error_linenoFunction · 0.85
my_xml_error_posFunction · 0.85
my_xml_error_stringFunction · 0.85
push_warning_printfFunction · 0.85

Tested by

no test coverage detected