From: Tor Didriksen Date: October 6 2010 7:01am Subject: bzr commit into mysql-next-mr-bugfixing branch (tor.didriksen:3317) WL#5208 List-Archive: http://lists.mysql.com/commits/120049 Message-Id: <20101006070151.B2826379F@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0002349406384924347==" --===============0002349406384924347== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/didrik/repo/next-mr-bf-wl5208-explain/ based on revid:mattias.jonsson@stripped 3317 Tor Didriksen 2010-09-13 WL#5208 Add --explain-protocol to mysql/MTR This is a simplified version, compared to the description in the worklog. We add a new --explain-protocol option, which makes mtr re-run all SELECT queries with 'EXPLAIN EXTENDED' prepended. @ client/mysqltest.cc Adds explain-protocol option. @ mysql-test/mysql-test-run.pl Adds explain-protocol option. modified: client/mysqltest.cc mysql-test/mysql-test-run.pl === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-09-28 15:30:47 +0000 +++ b/client/mysqltest.cc 2010-09-13 13:12:38 +0000 @@ -87,7 +87,7 @@ enum { OPT_PS_PROTOCOL=OPT_MAX_CLIENT_OPTION, OPT_SP_PROTOCOL, OPT_CURSOR_PROTOCOL, OPT_VIEW_PROTOCOL, OPT_MAX_CONNECT_RETRIES, OPT_MAX_CONNECTIONS, OPT_MARK_PROGRESS, OPT_LOG_DIR, - OPT_TAIL_LINES, OPT_RESULT_FORMAT_VERSION + OPT_TAIL_LINES, OPT_RESULT_FORMAT_VERSION, OPT_EXPLAIN_PROTOCOL }; static int record= 0, opt_sleep= -1; @@ -107,6 +107,7 @@ static my_bool opt_mark_progress= 0; static my_bool ps_protocol= 0, ps_protocol_enabled= 0; static my_bool sp_protocol= 0, sp_protocol_enabled= 0; static my_bool view_protocol= 0, view_protocol_enabled= 0; +static my_bool explain_protocol= 0, explain_protocol_enabled= 0; static my_bool cursor_protocol= 0, cursor_protocol_enabled= 0; static my_bool parsing_disabled= 0; static my_bool display_result_vertically= FALSE, display_result_lower= FALSE, @@ -6166,6 +6167,9 @@ static struct my_option my_long_options[ {"view-protocol", OPT_VIEW_PROTOCOL, "Use views for select.", &view_protocol, &view_protocol, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, + {"explain-protocol", OPT_EXPLAIN_PROTOCOL, "Explains all select.", + &explain_protocol, &explain_protocol, 0, + GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, {"connect_timeout", OPT_CONNECT_TIMEOUT, "Number of seconds before connection timeout.", &opt_connect_timeout, &opt_connect_timeout, 0, GET_UINT, REQUIRED_ARG, @@ -7638,6 +7642,35 @@ void run_query(struct st_connection *cn, DBUG_VOID_RETURN; } + +void run_explain(struct st_connection *cn, struct st_command *command, int flags) +{ + if (explain_protocol_enabled && + !command->expected_errors.count && + match_re(&view_re, command->query)) + { + st_command save_command= *command; + DYNAMIC_STRING query_str; + DYNAMIC_STRING ds_warning_messages; + + init_dynamic_string(&ds_warning_messages, "", 0, 2048); + init_dynamic_string(&query_str, "EXPLAIN EXTENDED ", 256, 256); + dynstr_append_mem(&query_str, command->query, + command->end - command->query); + command->query= query_str.str; + command->query_len= query_str.length; + command->end= strend(command->query); + + run_query(cn, command, flags); + + dynstr_free(&query_str); + dynstr_free(&ds_warning_messages); + + *command= save_command; + } +} + + /****************************************************************************/ /* Functions to detect different SQL statements @@ -8036,6 +8069,7 @@ int main(int argc, char **argv) var_set_int("$PS_PROTOCOL", ps_protocol); var_set_int("$SP_PROTOCOL", sp_protocol); var_set_int("$VIEW_PROTOCOL", view_protocol); + var_set_int("$EXPLAIN_PROTOCOL", explain_protocol); var_set_int("$CURSOR_PROTOCOL", cursor_protocol); DBUG_PRINT("info",("result_file: '%s'", @@ -8058,6 +8092,7 @@ int main(int argc, char **argv) ps_protocol_enabled= ps_protocol; sp_protocol_enabled= sp_protocol; view_protocol_enabled= view_protocol; + explain_protocol_enabled= explain_protocol; cursor_protocol_enabled= cursor_protocol; /* Cursor protcol implies ps protocol */ if (cursor_protocol_enabled) @@ -8292,6 +8327,7 @@ int main(int argc, char **argv) save_file[0]= 0; } run_query(cur_con, command, flags); + run_explain(cur_con, command, flags); command_executed++; command->last_argument= command->end; === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-09-28 15:17:29 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-09-13 13:12:38 +0000 @@ -171,6 +171,7 @@ my $opt_ps_protocol; my $opt_sp_protocol; my $opt_cursor_protocol; my $opt_view_protocol; +my $opt_explain_protocol; our $opt_debug; our @opt_cases; # The test cases names in argv @@ -852,6 +853,7 @@ sub command_line_setup { 'ps-protocol' => \$opt_ps_protocol, 'sp-protocol' => \$opt_sp_protocol, 'view-protocol' => \$opt_view_protocol, + 'explain-protocol' => \$opt_explain_protocol, 'cursor-protocol' => \$opt_cursor_protocol, 'ssl|with-openssl' => \$opt_ssl, 'skip-ssl' => \$opt_skip_ssl, @@ -5039,6 +5041,11 @@ sub start_mysqltest ($) { mtr_add_arg($args, "--sp-protocol"); } + if ( $opt_explain_protocol ) + { + mtr_add_arg($args, "--explain-protocol"); + } + if ( $opt_view_protocol ) { mtr_add_arg($args, "--view-protocol"); @@ -5465,6 +5472,7 @@ Options to control what engine/variation cursor-protocol Use the cursor protocol between client and server (implies --ps-protocol) view-protocol Create a view to execute all non updating queries + explain-protocol Run 'EXPLAIN EXTENDED' on all SELECT queries sp-protocol Create a stored procedure to execute all queries compress Use the compressed protocol between client and server ssl Use ssl protocol between client and server --===============0002349406384924347== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/tor.didriksen@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: tor.didriksen@stripped\ # 1t6pwio5ci5txdhr # target_branch: file:///export/home/didrik/repo/next-mr-bf-wl5208-\ # explain/ # testament_sha1: f5e7a5ed74977183a50f4da68f013574f3a5da4d # timestamp: 2010-10-06 09:01:51 +0200 # base_revision_id: mattias.jonsson@stripped\ # z2nn0a2yiws0y4y0 # # Begin bundle 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 HGgQVaIbBKsqIrSFlZ7Mym/xdyRThQkLNg1RMA== --===============0002349406384924347==--