From: Tor Didriksen Date: October 6 2010 7:39am Subject: bzr commit into mysql-next-mr-bugfixing branch (tor.didriksen:3318) WL#5208 List-Archive: http://lists.mysql.com/commits/120056 Message-Id: <20101006073945.EBB1E379F@atum07.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============3851210895807475340==" --===============3851210895807475340== 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 3318 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 --===============3851210895807475340== 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\ # rlj9ez4g0uuw0q8d # target_branch: file:///export/home/didrik/repo/next-mr-bf-wl5208-\ # explain/ # testament_sha1: 284dbda9db1acddb12cc8f625a72b31acd1f427d # timestamp: 2010-10-06 09:39:45 +0200 # base_revision_id: mattias.jonsson@stripped\ # f9vrq50hfz098d9d # # Begin bundle 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 EukaSdDbrzEiqxEMxOqGZjH/xdyRThQkAfAdMwA= --===============3851210895807475340==--