Bug #48855 | XML stylesheet option for mysql/mysqldump CLIs | ||
---|---|---|---|
Submitted: | 18 Nov 2009 4:46 | ||
Reporter: | Mikiya Okuno | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: mysqldump Command-line Client | Severity: | S4 (Feature request) |
Version: | 5.1 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[18 Nov 2009 4:46]
Mikiya Okuno
[18 Nov 2009 5:17]
MySQL Verification Team
=== modified file 'client/client_priv.h' --- client/client_priv.h 2008-01-31 16:46:50 +0000 +++ client/client_priv.h 2009-11-18 04:47:25 +0000 @@ -79,6 +79,6 @@ OPT_MYSQL_REPLACE_INTO, OPT_BASE64_OUTPUT_MODE, OPT_SERVER_ID, OPT_FIX_TABLE_NAMES, OPT_FIX_DB_NAMES, OPT_SSL_VERIFY_SERVER_CERT, OPT_DEBUG_INFO, OPT_DEBUG_CHECK, OPT_COLUMN_TYPES, OPT_ERROR_LOG_FILE, - OPT_WRITE_BINLOG, OPT_DUMP_DATE, + OPT_WRITE_BINLOG, OPT_DUMP_DATE, OPT_XML_STYLESHEET, OPT_MAX_CLIENT_OPTION }; === modified file 'client/mysql.cc' --- client/mysql.cc 2009-10-20 18:00:07 +0000 +++ client/mysql.cc 2009-11-18 05:14:02 +0000 @@ -155,7 +155,8 @@ static int connect_flag=CLIENT_INTERACTIVE; static char *current_host,*current_db,*current_user=0,*opt_password=0, *current_prompt=0, *delimiter_str= 0, - *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME; + *default_charset= (char*) MYSQL_DEFAULT_CHARSET_NAME, + *xml_stylesheet=NULL; static char *histfile; static char *histfile_tmp; static String glob_buffer,old_buffer; @@ -1409,6 +1410,9 @@ 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"xml", 'X', "Produce XML output", (uchar**) &opt_xml, (uchar**) &opt_xml, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"xsl", OPT_XML_STYLESHEET, "Stylesheet added when XML output is specified.", + (uchar**) &xml_stylesheet, (uchar**) &xml_stylesheet, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, {"line-numbers", OPT_LINE_NUMBERS, "Write line numbers for errors.", (uchar**) &line_numbers, (uchar**) &line_numbers, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, @@ -3464,7 +3468,13 @@ mysql_field_seek(result,0); - tee_fputs("<?xml version=\"1.0\"?>\n\n<resultset statement=\"", PAGER); + tee_fputs("<?xml version=\"1.0\"?>\n", PAGER); + if (xml_stylesheet) { + tee_fputs("<?xml-stylesheet type=\"text/xsl\" href=\"", PAGER); + xmlencode_print(xml_stylesheet, (int)strlen(xml_stylesheet)); + tee_fputs("\"?>\n", PAGER); + } + tee_fputs("\n<resultset statement=\"", PAGER); xmlencode_print(glob_buffer.ptr(), (int)strlen(glob_buffer.ptr())); tee_fputs("\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">", PAGER); === modified file 'client/mysqldump.c' --- client/mysqldump.c 2009-08-28 15:06:59 +0000 +++ client/mysqldump.c 2009-11-18 04:50:43 +0000 @@ -110,7 +110,8 @@ *where=0, *order_by=0, *opt_compatible_mode_str= 0, *err_ptr= 0, - *log_error_file= NULL; + *log_error_file= NULL, + *xml_stylesheet=NULL; static char **defaults_argv= 0; static char compatible_mode_normal_str[255]; /* Server supports character_set_results session variable? */ @@ -464,6 +465,9 @@ (uchar**) &where, (uchar**) &where, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, {"xml", 'X', "Dump a database as well formed XML.", 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"xsl", OPT_XML_STYLESHEET, "Stylesheet added when XML output is specified.", + (uchar**) &xml_stylesheet, (uchar**) &xml_stylesheet, 0, GET_STR, REQUIRED_ARG, + 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0} }; @@ -572,12 +576,18 @@ #include <help_end.h> +static void print_quoted_xml(FILE *xml_file, const char *str, ulong len); static void write_header(FILE *sql_file, char *db_name) { if (opt_xml) { fputs("<?xml version=\"1.0\"?>\n", sql_file); + if (xml_stylesheet) { + fputs("<?xml-stylesheet type=\"text/xsl\" href=\"", sql_file); + print_quoted_xml(sql_file, xml_stylesheet, strlen(xml_stylesheet)); + fputs("\"?>\n", sql_file); + } /* Schema reference. Allows use of xsi:nil for NULL values and xsi:type to define an element's data type.
[18 Nov 2009 5:21]
MySQL Verification Team
The above is a patch just works. Please review it.