From: Bjorn Munch Date: September 10 2010 8:00am Subject: bzr commit into mysql-trunk-merge branch (bjorn.munch:3192) List-Archive: http://lists.mysql.com/commits/117970 Message-Id: <201009100801.o8A81M4f016765@khepri15.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2011854926==" --===============2011854926== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///home/bm136801/my/merge-tr/ based on revid:alik@stripped 3192 Bjorn Munch 2010-09-10 [merge] merge 55178,55413,56383 modified: client/mysqltest.cc mysql-test/lib/mtr_cases.pm mysql-test/mysql-test-run.pl mysql-test/r/mysqltest.result mysql-test/t/mysqltest.test === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-08-27 12:17:32 +0000 +++ b/client/mysqltest.cc 2010-09-01 14:02:56 +0000 @@ -5257,8 +5257,10 @@ void do_connect(struct st_command *comma } #endif +#ifndef EMBEDDED_LIBRARY if (opt_protocol) mysql_options(&con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol); +#endif #ifdef HAVE_SMEM if (con_shm) @@ -5544,6 +5546,8 @@ int read_line(char *buf, int size) char c, UNINIT_VAR(last_quote), last_char= 0; char *p= buf, *buf_end= buf + size - 1; int skip_char= 0; + my_bool have_slash= FALSE; + enum {R_NORMAL, R_Q, R_SLASH_IN_Q, R_COMMENT, R_LINE_START} state= R_LINE_START; DBUG_ENTER("read_line"); @@ -5615,9 +5619,13 @@ int read_line(char *buf, int size) } else if (c == '\'' || c == '"' || c == '`') { - last_quote= c; - state= R_Q; + if (! have_slash) + { + last_quote= c; + state= R_Q; + } } + have_slash= (c == '\\'); break; case R_COMMENT: @@ -7989,8 +7997,10 @@ int main(int argc, char **argv) mysql_options(&con->mysql, MYSQL_SET_CHARSET_DIR, opt_charsets_dir); +#ifndef EMBEDDED_LIBRARY if (opt_protocol) mysql_options(&con->mysql,MYSQL_OPT_PROTOCOL,(char*)&opt_protocol); +#endif #if defined(HAVE_OPENSSL) && !defined(EMBEDDED_LIBRARY) === modified file 'mysql-test/lib/mtr_cases.pm' --- a/mysql-test/lib/mtr_cases.pm 2010-08-16 07:22:36 +0000 +++ b/mysql-test/lib/mtr_cases.pm 2010-09-01 14:02:56 +0000 @@ -701,6 +701,13 @@ sub process_opts_file { next; } + $value= mtr_match_prefix($opt, "--testcase-timeout="); + if ( defined $value ) { + # Overrides test case timeout for this test + $tinfo->{'case-timeout'}= $value; + next; + } + # Ok, this was a real option, add it push(@{$tinfo->{$opt_name}}, $opt); } === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-08-25 13:57:51 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-09-01 14:02:56 +0000 @@ -231,7 +231,6 @@ my $opt_suite_timeout = $ENV{MTR_SUITE my $opt_shutdown_timeout= $ENV{MTR_SHUTDOWN_TIMEOUT} || 10; # seconds my $opt_start_timeout = $ENV{MTR_START_TIMEOUT} || 180; # seconds -sub testcase_timeout { return $opt_testcase_timeout * 60; }; sub suite_timeout { return $opt_suite_timeout * 60; }; sub check_timeout { return $opt_testcase_timeout * 6; }; @@ -245,6 +244,7 @@ my $opt_repeat= 1; my $opt_retry= 3; my $opt_retry_failure= env_or_val(MTR_RETRY_FAILURE => 2); my $opt_reorder= 1; +my $opt_force_restart= 0; my $opt_strace_client; @@ -260,6 +260,17 @@ my $opt_callgrind; my %mysqld_logs; my $opt_debug_sync_timeout= 300; # Default timeout for WAIT_FOR actions. +sub testcase_timeout ($) { + my ($tinfo)= @_; + if (exists $tinfo->{'case-timeout'}) { + # Return test specific timeout if *longer* that the general timeout + my $test_to= $tinfo->{'case-timeout'}; + $test_to*= 10 if $opt_valgrind; + return $test_to * 60 if $test_to > $opt_testcase_timeout; + } + return $opt_testcase_timeout * 60; +} + our $opt_warnings= 1; our $opt_skip_ndbcluster= 0; @@ -934,6 +945,7 @@ sub command_line_setup { 'report-features' => \$opt_report_features, 'comment=s' => \$opt_comment, 'fast' => \$opt_fast, + 'force-restart' => \$opt_force_restart, 'reorder!' => \$opt_reorder, 'enable-disabled' => \&collect_option, 'verbose+' => \$opt_verbose, @@ -3552,7 +3564,7 @@ sub run_testcase ($) { } } - my $test_timeout= start_timer(testcase_timeout()); + my $test_timeout= start_timer(testcase_timeout($tinfo)); do_before_run_mysqltest($tinfo); @@ -3752,7 +3764,7 @@ sub run_testcase ($) { { my $log_file_name= $opt_vardir."/log/".$tinfo->{shortname}.".log"; $tinfo->{comment}= - "Test case timeout after ".testcase_timeout(). + "Test case timeout after ".testcase_timeout($tinfo). " seconds\n\n"; # Add 20 last executed commands from test case log file if (-e $log_file_name) @@ -3761,7 +3773,7 @@ sub run_testcase ($) { "== $log_file_name == \n". mtr_lastlinesfromfile($log_file_name, 20)."\n"; } - $tinfo->{'timeout'}= testcase_timeout(); # Mark as timeout + $tinfo->{'timeout'}= testcase_timeout($tinfo); # Mark as timeout run_on_all($tinfo, 'analyze-timeout'); report_failure_and_restart($tinfo); @@ -4567,6 +4579,11 @@ sub server_need_restart { return 1; } + if ( $opt_force_restart ) { + mtr_verbose_restart($server, "forced restart turned on"); + return 1; + } + if ( $tinfo->{template_path} ne $current_config_name) { mtr_verbose_restart($server, "using different config file"); @@ -5601,6 +5618,7 @@ Misc options servers to exit before finishing the process fast Run as fast as possible, dont't wait for servers to shutdown etc. + force-restart Always restart servers between tests parallel=N Run tests in N parallel threads (default=1) Use parallel=auto for auto-setting of N repeat=N Run each test N number of times === modified file 'mysql-test/r/mysqltest.result' --- a/mysql-test/r/mysqltest.result 2010-08-16 07:22:36 +0000 +++ b/mysql-test/r/mysqltest.result 2010-09-01 14:02:56 +0000 @@ -262,6 +262,9 @@ a long \$where variable content banana = banana Not a banana: ba\$cat\$cat +with\`some"escaped\'quotes +with\`some"escaped\'quotes +single'tick`backtick mysqltest: At line 1: Missing arguments to let mysqltest: At line 1: Missing variable name in let mysqltest: At line 1: Missing assignment operator in let === modified file 'mysql-test/t/mysqltest.test' --- a/mysql-test/t/mysqltest.test 2010-08-16 07:22:36 +0000 +++ b/mysql-test/t/mysqltest.test 2010-09-01 14:02:56 +0000 @@ -701,6 +701,16 @@ echo banana = $cat; let $cat=ba\\\$cat\\\$cat; echo Not a banana: $cat; +# Bug #55413 would cause this to fail +let $escape= with\`some\"escaped\'quotes; +echo $escape; + +--let $escape= with\`some\"escaped\'quotes +echo $escape; + +# This only works with "--let" syntax +--let $tick= single'tick`backtick +echo $tick; # Test illegal uses of let --===============2011854926== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/bjorn.munch@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: bjorn.munch@stripped # target_branch: file:///home/bm136801/my/merge-tr/ # testament_sha1: 0329d17ae2d8e7302ae3ffccf056ae183f94181a # timestamp: 2010-09-10 10:01:22 +0200 # source_branch: file:///home/bm136801/my/mtr-tr/ # base_revision_id: alik@stripped # # Begin bundle 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 --===============2011854926==--