From: Bjorn Munch Date: October 4 2010 11:09am Subject: bzr push into mysql-trunk-merge branch (bjorn.munch:3213 to 3215) List-Archive: http://lists.mysql.com/commits/119822 Message-Id: <201010041110.o94BAUk2002195@khepri15.norway.sun.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1262252771==" --===============1262252771== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3215 Bjorn Munch 2010-10-04 [merge] upmerge from 5.5-bugteam modified: client/mysqltest.cc 3214 Bjorn Munch 2010-10-04 [merge] merge from trunk-mtr modified: client/mysqltest.cc mysql-test/lib/mtr_report.pm mysql-test/mysql-test-run.pl mysql-test/r/mysqltest.result mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test mysql-test/suite/sys_vars/t/div_precision_increment_func.test mysql-test/t/mysqltest.test 3213 Alexander Nozdrin 2010-10-02 [merge] Auto-merge from mysql-5.5-bugteam. === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2010-10-01 16:11:50 +0000 +++ b/client/mysqltest.cc 2010-10-04 11:08:23 +0000 @@ -112,6 +112,7 @@ static my_bool parsing_disabled= 0; static my_bool display_result_vertically= FALSE, display_result_lower= FALSE, display_metadata= FALSE, display_result_sorted= FALSE; static my_bool disable_query_log= 0, disable_result_log= 0; +static my_bool disable_connect_log= 1; static my_bool disable_warnings= 0; static my_bool disable_info= 1; static my_bool abort_on_error= 1; @@ -227,8 +228,9 @@ typedef struct int str_val_len; int int_val; int alloced_len; - int int_dirty; /* do not update string if int is updated until first read */ - int alloced; + bool int_dirty; /* do not update string if int is updated until first read */ + bool is_int; + bool alloced; } VAR; /*Perl/shell-like variable registers */ @@ -257,6 +259,7 @@ struct st_connection pthread_mutex_t result_mutex; pthread_cond_t result_cond; int query_done; + my_bool has_thread; #endif /*EMBEDDED_LIBRARY*/ }; @@ -286,6 +289,7 @@ enum enum_commands { Q_EVAL_RESULT, Q_ENABLE_QUERY_LOG, Q_DISABLE_QUERY_LOG, Q_ENABLE_RESULT_LOG, Q_DISABLE_RESULT_LOG, + Q_ENABLE_CONNECT_LOG, Q_DISABLE_CONNECT_LOG, Q_WAIT_FOR_SLAVE_TO_STOP, Q_ENABLE_WARNINGS, Q_DISABLE_WARNINGS, Q_ENABLE_INFO, Q_DISABLE_INFO, @@ -351,6 +355,8 @@ const char *command_names[]= /* Enable/disable that the _result_ from a query is logged to result file */ "enable_result_log", "disable_result_log", + "enable_connect_log", + "disable_connect_log", "wait_for_slave_to_stop", "enable_warnings", "disable_warnings", @@ -763,10 +769,9 @@ end_thread: return 0; } - static void wait_query_thread_done(struct st_connection *con) { - DBUG_ASSERT(con->tid); + DBUG_ASSERT(con->has_thread); if (!con->query_done) { pthread_mutex_lock(&con->result_mutex); @@ -779,7 +784,7 @@ static void wait_query_thread_done(struc static void signal_connection_thd(struct st_connection *cn, int command) { - DBUG_ASSERT(cn->tid); + DBUG_ASSERT(cn->has_thread); cn->query_done= 0; cn->command= command; pthread_mutex_lock(&cn->query_mutex); @@ -791,13 +796,13 @@ static void signal_connection_thd(struct /* Sometimes we try to execute queries when the connection is closed. It's done to make sure it was closed completely. - So that if our connection is closed (cn->tid == 0), we just return + So that if our connection is closed (cn->has_thread == 0), we just return the mysql_send_query() result which is an error in this case. */ static int do_send_query(struct st_connection *cn, const char *q, int q_len) { - if (!cn->tid) + if (!cn->has_thread) return mysql_send_query(&cn->mysql, q, q_len); cn->cur_query= q; cn->cur_query_len= q_len; @@ -805,10 +810,9 @@ static int do_send_query(struct st_conne return 0; } - static int do_read_query_result(struct st_connection *cn) { - DBUG_ASSERT(cn->tid); + DBUG_ASSERT(cn->has_thread); wait_query_thread_done(cn); signal_connection_thd(cn, EMB_READ_QUERY_RESULT); wait_query_thread_done(cn); @@ -819,12 +823,12 @@ static int do_read_query_result(struct s static void emb_close_connection(struct st_connection *cn) { - if (!cn->tid) + if (!cn->has_thread) return; wait_query_thread_done(cn); signal_connection_thd(cn, EMB_END_CONNECTION); pthread_join(cn->tid, NULL); - cn->tid= 0; + cn->has_thread= FALSE; pthread_mutex_destroy(&cn->query_mutex); pthread_cond_destroy(&cn->query_cond); pthread_mutex_destroy(&cn->result_mutex); @@ -842,9 +846,9 @@ static void init_connection_thd(struct s pthread_cond_init(&cn->result_cond, NULL) || pthread_create(&cn->tid, &cn_thd_attrib, connection_thread, (void*)cn)) die("Error in the thread library"); + cn->has_thread=TRUE; } - #else /*EMBEDDED_LIBRARY*/ #define do_send_query(cn,q,q_len) mysql_send_query(&cn->mysql, q, q_len) @@ -2036,6 +2040,21 @@ static void var_free(void *v) C_MODE_END +void var_set_int(VAR *v, const char *str) +{ + char *endptr; + /* Initially assume not a number */ + v->int_val= 0; + v->is_int= false; + v->int_dirty= false; + if (!str) return; + + v->int_val = (int) strtol(str, &endptr, 10); + /* It is an int if strtol consumed something up to end/space/tab */ + if (endptr > str && (!*endptr || *endptr == ' ' || *endptr == '\t')) + v->is_int= true; +} + VAR *var_init(VAR *v, const char *name, int name_len, const char *val, int val_len) @@ -2070,11 +2089,10 @@ VAR *var_init(VAR *v, const char *name, memcpy(tmp_var->str_val, val, val_len); tmp_var->str_val[val_len]= 0; } + var_set_int(tmp_var, val); tmp_var->name_len = name_len; tmp_var->str_val_len = val_len; tmp_var->alloced_len = val_alloc_len; - tmp_var->int_val = (val) ? atoi(val) : 0; - tmp_var->int_dirty = 0; return tmp_var; } @@ -2135,7 +2153,7 @@ VAR* var_get(const char *var_name, const if (!raw && v->int_dirty) { sprintf(v->str_val, "%d", v->int_val); - v->int_dirty = 0; + v->int_dirty= false; v->str_val_len = strlen(v->str_val); } if (var_name_end) @@ -2197,7 +2215,7 @@ void var_set(const char *var_name, const if (v->int_dirty) { sprintf(v->str_val, "%d", v->int_val); - v->int_dirty= 0; + v->int_dirty=false; v->str_val_len= strlen(v->str_val); } /* setenv() expects \0-terminated strings */ @@ -2267,8 +2285,14 @@ void var_query_set(VAR *var, const char DBUG_ENTER("var_query_set"); LINT_INIT(res); + /* Only white space or ) allowed past ending ` */ while (end > query && *end != '`') + { + if (*end && (*end != ' ' && *end != '\t' && *end != '\n' && *end != ')')) + die("Spurious text after `query` expression"); --end; + } + if (query == end) die("Syntax error in query, missing '`'"); ++query; @@ -2497,6 +2521,7 @@ void var_set_query_get_value(struct st_c void var_copy(VAR *dest, VAR *src) { dest->int_val= src->int_val; + dest->is_int= src->is_int; dest->int_dirty= src->int_dirty; /* Alloc/realloc data for str_val in dest */ @@ -2580,9 +2605,7 @@ void eval_expr(VAR *v, const char *p, co v->str_val_len = new_val_len; memcpy(v->str_val, p, new_val_len); v->str_val[new_val_len] = 0; - v->int_val=atoi(p); - DBUG_PRINT("info", ("atoi on '%s', returns: %d", p, v->int_val)); - v->int_dirty=0; + var_set_int(v, p); } DBUG_VOID_RETURN; } @@ -2929,6 +2952,8 @@ int do_modify_var(struct st_command *com die("The argument to %.*s must be a variable (start with $)", command->first_word_len, command->query); v= var_get(p, &p, 1, 0); + if (! v->is_int) + die("Cannot perform inc/dec on a non-numeric value"); switch (op) { case DO_DEC: v->int_val--; @@ -2940,7 +2965,7 @@ int do_modify_var(struct st_command *com die("Invalid operator to do_modify_var"); break; } - v->int_dirty= 1; + v->int_dirty= true; command->last_argument= (char*)++p; return 0; } @@ -3984,7 +4009,18 @@ void do_perl(struct st_command *command) if (!error) my_delete(temp_file_path, MYF(0)); - handle_command_error(command, WEXITSTATUS(error)); + /* Check for error code that indicates perl could not be started */ + int exstat= WEXITSTATUS(error); +#ifdef __WIN__ + if (exstat == 1) + /* Text must begin 'perl not found' as mtr looks for it */ + abort_not_supported_test("perl not found in path or did not start"); +#else + if (exstat == 127) + abort_not_supported_test("perl not found in path"); +#endif + else + handle_command_error(command, exstat); } dynstr_free(&ds_delimiter); DBUG_VOID_RETURN; @@ -4898,6 +4934,16 @@ void select_connection_name(const char * set_current_connection(con); + /* Connection logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + DYNAMIC_STRING *ds= &ds_res; + + dynstr_append_mem(ds, "connection ", 11); + replace_dynstr_append(ds, name); + dynstr_append_mem(ds, ";\n", 2); + } + DBUG_VOID_RETURN; } @@ -4985,6 +5031,16 @@ void do_close_connection(struct st_comma var_set_string("$CURRENT_CONNECTION", con->name); } + /* Connection logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + DYNAMIC_STRING *ds= &ds_res; + + dynstr_append_mem(ds, "disconnect ", 11); + replace_dynstr_append(ds, ds_connection.str); + dynstr_append_mem(ds, ";\n", 2); + } + DBUG_VOID_RETURN; } @@ -5119,6 +5175,13 @@ int connect_n_handle_errors(struct st_co dynstr_append_mem(ds, delimiter, delimiter_length); dynstr_append_mem(ds, "\n", 1); } + /* Simlified logging if enabled */ + if (!disable_connect_log && !disable_query_log) + { + replace_dynstr_append(ds, command->query); + dynstr_append_mem(ds, ";\n", 2); + } + while (!mysql_real_connect(con, host, user, pass, db, port, sock ? sock: 0, CLIENT_MULTI_STATEMENTS)) { @@ -7438,11 +7501,13 @@ void run_query(struct st_connection *cn, (flags & QUERY_REAP_FLAG)); DBUG_ENTER("run_query"); - init_dynamic_string(&ds_warnings, NULL, 0, 256); - if (cn->pending && (flags & QUERY_SEND_FLAG)) die ("Cannot run query on connection between send and reap"); + if (!(flags & QUERY_SEND_FLAG) && !cn->pending) + die ("Cannot reap on a connection without pending send"); + + init_dynamic_string(&ds_warnings, NULL, 0, 256); /* Evaluate query if this is an eval command */ @@ -8192,6 +8257,8 @@ int main(int argc, char **argv) case Q_DISABLE_ABORT_ON_ERROR: abort_on_error=0; break; case Q_ENABLE_RESULT_LOG: disable_result_log=0; break; case Q_DISABLE_RESULT_LOG: disable_result_log=1; break; + case Q_ENABLE_CONNECT_LOG: disable_connect_log=0; break; + case Q_DISABLE_CONNECT_LOG: disable_connect_log=1; break; case Q_ENABLE_WARNINGS: disable_warnings=0; break; case Q_DISABLE_WARNINGS: disable_warnings=1; break; case Q_ENABLE_INFO: disable_info=0; break; === modified file 'mysql-test/lib/mtr_report.pm' --- a/mysql-test/lib/mtr_report.pm 2010-06-10 08:34:16 +0000 +++ b/mysql-test/lib/mtr_report.pm 2010-09-20 08:12:39 +0000 @@ -229,7 +229,8 @@ sub mtr_report_stats ($$;$) { # Find out how we where doing # ---------------------------------------------------------------------- - my $tot_skiped= 0; + my $tot_skipped= 0; + my $tot_skipdetect= 0; my $tot_passed= 0; my $tot_failed= 0; my $tot_tests= 0; @@ -246,8 +247,9 @@ sub mtr_report_stats ($$;$) { } elsif ( $tinfo->{'result'} eq 'MTR_RES_SKIPPED' ) { - # Test was skipped - $tot_skiped++; + # Test was skipped (disabled not counted) + $tot_skipped++ unless $tinfo->{'disable'}; + $tot_skipdetect++ if $tinfo->{'skip_detected_by_test'}; } elsif ( $tinfo->{'result'} eq 'MTR_RES_PASSED' ) { @@ -376,6 +378,9 @@ sub mtr_report_stats ($$;$) { print "All $tot_tests tests were successful.\n\n"; } + print "$tot_skipped tests were skipped, ". + "$tot_skipdetect by the test itself.\n\n" if $tot_skipped; + if ( $tot_failed != 0 || $found_problems) { mtr_error("there were failing test cases") unless $dont_error; === modified file 'mysql-test/mysql-test-run.pl' --- a/mysql-test/mysql-test-run.pl 2010-09-01 14:02:56 +0000 +++ b/mysql-test/mysql-test-run.pl 2010-09-30 10:55:39 +0000 @@ -126,12 +126,24 @@ my $path_vardir_trace; # unix f my $opt_tmpdir; # Path to use for tmp/ dir my $opt_tmpdir_pid; +my $opt_start; +my $opt_start_dirty; +my $opt_start_exit; +my $start_only; + END { if ( defined $opt_tmpdir_pid and $opt_tmpdir_pid == $$ ) { - # Remove the tempdir this process has created - mtr_verbose("Removing tmpdir '$opt_tmpdir"); - rmtree($opt_tmpdir); + if (!$opt_start_exit) + { + # Remove the tempdir this process has created + mtr_verbose("Removing tmpdir $opt_tmpdir"); + rmtree($opt_tmpdir); + } + else + { + mtr_warning("tmpdir $opt_tmpdir should be removed after the server has finished"); + } } } @@ -234,10 +246,6 @@ my $opt_start_timeout = $ENV{MTR_START sub suite_timeout { return $opt_suite_timeout * 60; }; sub check_timeout { return $opt_testcase_timeout * 6; }; -my $opt_start; -my $opt_start_dirty; -my $opt_start_exit; -my $start_only; my $opt_wait_all; my $opt_user_args; my $opt_repeat= 1; @@ -2186,6 +2194,11 @@ sub environment_setup { # to detect that valgrind is being used from test cases $ENV{'VALGRIND_TEST'}= $opt_valgrind; + # Add dir of this perl to aid mysqltest in finding perl + my $perldir= dirname($^X); + my $pathsep= ":"; + $pathsep= ";" if IS_WINDOWS && ! IS_CYGWIN; + $ENV{'PATH'}= "$ENV{'PATH'}".$pathsep.$perldir; } @@ -3658,6 +3671,9 @@ sub run_testcase ($) { # Try to get reason from test log file find_testcase_skipped_reason($tinfo); mtr_report_test_skipped($tinfo); + # Restart if skipped due to missing perl, it may have had side effects + stop_all_servers($opt_shutdown_timeout) + if ($tinfo->{'comment'} =~ /^perl not found/); } elsif ( $res == 65 ) { === modified file 'mysql-test/r/mysqltest.result' --- a/mysql-test/r/mysqltest.result 2010-09-01 14:02:56 +0000 +++ b/mysql-test/r/mysqltest.result 2010-09-28 14:01:36 +0000 @@ -177,6 +177,9 @@ mysqltest: At line 1: End of line junk d " mysqltest: At line 1: Extra delimiter ";" found mysqltest: At line 1: Extra delimiter ";" found +mysqltest: At line 1: Spurious text after `query` expression +mysqltest: At line 1: Spurious text after `query` expression +mysqltest: At line 2: Spurious text after `query` expression mysqltest: At line 1: Missing argument(s) to 'error' mysqltest: At line 1: Missing argument(s) to 'error' mysqltest: At line 1: The sqlstate definition must start with an uppercase S @@ -366,23 +369,24 @@ mysqltest: At line 1: Missing required a mysqltest: At line 1: Invalid argument to sleep "abc" mysqltest: At line 1: Invalid argument to real_sleep "abc" 1 -2 101 -hej -1 +-99 mysqltest: At line 1: Missing argument to inc mysqltest: At line 1: The argument to inc must be a variable (start with $) +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value mysqltest: At line 1: End of line junk detected: "1000" -4 -4 +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value +-96 +-96 -1 --2 99 -hej --1 mysqltest: At line 1: Missing argument to dec mysqltest: At line 1: The argument to dec must be a variable (start with $) +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value mysqltest: At line 1: End of line junk detected: "1000" +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value +mysqltest: At line 1: Cannot perform inc/dec on a non-numeric value mysqltest: At line 1: Missing arguments to system, nothing to do! mysqltest: At line 1: Missing arguments to system, nothing to do! system command 'NonExistsinfComamdn 2> /dev/null' failed @@ -449,12 +453,16 @@ mysqltest: At line 1: Missing required a mysqltest: At line 1: query 'connect con2,localhost,root,,illegal_db' failed: 1049: Unknown database 'illegal_db' mysqltest: At line 1: Illegal argument for port: 'illegal_port' mysqltest: At line 1: Illegal option to connect: SMTP -OK -mysqltest: The test didn't produce any output +200 connects succeeded mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 3: connection 'test_con1' not found in connection pool mysqltest: In included file "MYSQLTEST_VARDIR/tmp/mysqltest.sql": At line 2: Connection test_con1 already exists show tables; ERROR 3D000: No database selected +connect con1,localhost,root,,; +connection default; +connection con1; +disconnect con1; +connection default; Output from mysqltest-x.inc Output from mysqltest-x.inc Output from mysqltest-x.inc === modified file 'mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test' --- a/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-01-14 10:49:40 +0000 +++ b/mysql-test/suite/rpl/t/rpl_row_tbl_metadata.test 2010-09-15 12:56:22 +0000 @@ -205,7 +205,7 @@ DROP TABLE `t1`; -- echo === Using mysqlbinlog to detect failure. Before the patch mysqlbinlog would find a corrupted event, thence would fail. --- let $MYSQLD_DATADIR= `SELECT @@datadir`; +-- let $MYSQLD_DATADIR= `SELECT @@datadir` -- exec $MYSQL_BINLOG $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog -- remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug42749.binlog @@ -330,7 +330,7 @@ while($ntables) -- echo ### assertion: check that binlog is not corrupt. Using mysqlbinlog to -- echo ### detect failure. Before the patch mysqlbinlog would find -- echo ### a corrupted event, thence would fail. --- let $MYSQLD_DATADIR= `SELECT @@datadir`; +-- let $MYSQLD_DATADIR= `SELECT @@datadir` -- exec $MYSQL_BINLOG -v --hex $MYSQLD_DATADIR/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug50018.binlog ## clean up === modified file 'mysql-test/suite/sys_vars/t/div_precision_increment_func.test' --- a/mysql-test/suite/sys_vars/t/div_precision_increment_func.test 2009-12-22 09:35:56 +0000 +++ b/mysql-test/suite/sys_vars/t/div_precision_increment_func.test 2010-09-20 08:21:55 +0000 @@ -19,7 +19,7 @@ # # ################################################################################ -let $save_div_precision_increment = `SELECT @@global.div_precision_increment` +let $save_div_precision_increment = `SELECT @@global.div_precision_increment`; #SET @save_div_precision_increment = @@global.div_precision_increment; === modified file 'mysql-test/t/mysqltest.test' --- a/mysql-test/t/mysqltest.test 2010-09-01 14:02:56 +0000 +++ b/mysql-test/t/mysqltest.test 2010-09-28 14:01:36 +0000 @@ -494,6 +494,32 @@ remove_file $MYSQLTEST_VARDIR/tmp/mysqlt --error 1 --exec echo "--disable_query_log;" | $MYSQL_TEST 2>&1 +# +# Extra text after `` +# +# Cannot use exec echo here as ` may or may not need to be escaped +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +let $x= `select 1` BOO ; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +--let $x= `select 1`; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; +--write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql +# Missing ; in next line should be detected and cause failure +let $x= `select 1` +let $x= 2; +echo $x; +EOF +--error 1 +--exec $MYSQL_TEST < $MYSQLTEST_VARDIR/tmp/mysqltest.sql 2>&1 +remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; + # Allow trailing # comment --sleep 1 # Wait for insert delayed to be executed. @@ -980,16 +1006,13 @@ EOF # ---------------------------------------------------------------------------- # Test inc # ---------------------------------------------------------------------------- -inc $i; -echo $i; +let $i= 0; inc $i; echo $i; let $i=100; inc $i; echo $i; - -let $i=hej; -echo $i; +let $i= -100; inc $i; echo $i; @@ -998,7 +1021,13 @@ echo $i; --error 1 --exec echo "inc i;" | $MYSQL_TEST 2>&1 --error 1 +--exec echo "inc \$i;" | $MYSQL_TEST 2>&1 +--error 1 --exec echo "let \$i=100; inc \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1 +--error 1 +--exec echo "let \$i=text; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1 +--error 1 +--exec echo "let \$i=10cc; inc \$i; echo \$i;" | $MYSQL_TEST 2>&1 inc $i; inc $i; inc $i; --echo $i echo $i; @@ -1008,25 +1037,25 @@ echo $i; # Test dec # ---------------------------------------------------------------------------- -dec $d; -echo $d; +let $d= 0; dec $d; echo $d; let $d=100; dec $d; echo $d; -let $d=hej; -echo $d; -dec $d; -echo $d; - --error 1 --exec echo "dec;" | $MYSQL_TEST 2>&1 --error 1 --exec echo "dec i;" | $MYSQL_TEST 2>&1 --error 1 +--exec echo "dec \$i;" | $MYSQL_TEST 2>&1 +--error 1 --exec echo "let \$i=100; dec \$i 1000; echo \$i;" | $MYSQL_TEST 2>&1 +--error 1 +--exec echo "let \$i=text; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1 +--error 1 +--exec echo "let \$i=10cc; dec \$i; echo \$i;" | $MYSQL_TEST 2>&1 # ---------------------------------------------------------------------------- @@ -1441,19 +1470,6 @@ eval select "$long_rep" as x; # Repeat connect/disconnect --write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql -let $i=100; -while ($i) -{ - connect (test_con1,localhost,root,,); - disconnect test_con1; - dec $i; -} -EOF ---exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql; echo OK; exit;" | $MYSQL_TEST 2>&1 -remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; - -# Repeat connect/disconnect ---write_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql let $i=200; while ($i) { @@ -1461,9 +1477,8 @@ while ($i) disconnect test_con1; dec $i; } +echo 200 connects succeeded; EOF ---replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR ---error 1 --exec echo "source $MYSQLTEST_VARDIR/tmp/mysqltest.sql;" | $MYSQL_TEST 2>&1 remove_file $MYSQLTEST_VARDIR/tmp/mysqltest.sql; @@ -1504,6 +1519,22 @@ show tables; disconnect con2; connection default; +# Test enable_connect_log +--enable_connect_log +connect (con1,localhost,root,,); +connection default; +connection con1; +--disable_query_log +# These should not be logged +connect (con2,localhost,root,,*NO-ONE*); +connection con2; +disconnect con2; +connection con1; +--enable_query_log +disconnect con1; +connection default; +--disable_connect_log + # ---------------------------------------------------------------------------- # Test mysqltest arguments # ---------------------------------------------------------------------------- --===============1262252771== 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/mysql-trunk-merge/ # testament_sha1: 373d34cede9ce0509b94966db898270f92960e44 # timestamp: 2010-10-04 13:10:30 +0200 # source_branch: file:///home/bm136801/my/mtr-tr/ # base_revision_id: alexander.nozdrin@stripped\ # l2t5ah50opmduztz # # Begin bundle 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 --===============1262252771==--