Loading client/mysqltest.c +7 −1 Original line number Diff line number Diff line Loading @@ -60,6 +60,11 @@ # endif #endif /* Use cygwin for --exec and --system before 5.0 */ #if MYSQL_VERSION_ID < 50000 #define USE_CYGWIN #endif #define MAX_VAR_NAME_LENGTH 256 #define MAX_COLUMNS 256 #define MAX_EMBEDDED_SERVER_ARGS 64 Loading Loading @@ -5355,8 +5360,9 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, /* If we got here the statement succeeded and was expected to do so, get data. Note that this can still give errors found during execution! Store the result of the query if if will return any fields */ if (mysql_stmt_store_result(stmt)) if (mysql_stmt_field_count(stmt) && mysql_stmt_store_result(stmt)) { handle_error(command, mysql_stmt_errno(stmt), mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt), ds); Loading mysql-test/lib/mtr_process.pl +22 −17 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ use Socket; use Errno; use strict; use POSIX 'WNOHANG'; use POSIX qw(WNOHANG SIGHUP); sub mtr_run ($$$$$$;$); sub mtr_spawn ($$$$$$;$); Loading Loading @@ -139,19 +139,18 @@ sub spawn_impl ($$$$$$$$) { { if ( $! == $!{EAGAIN} ) # See "perldoc Errno" { mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo"); mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo"); sleep(1); redo FORK; } else { mtr_error("$path ($pid) can't be forked"); } mtr_error("$path ($pid) can't be forked, error: $!"); } if ( $pid ) { spawn_parent_impl($pid,$mode,$path); return spawn_parent_impl($pid,$mode,$path); } else { Loading Loading @@ -216,8 +215,11 @@ sub spawn_impl ($$$$$$$$) { { mtr_child_error("failed to execute \"$path\": $!"); } mtr_error("Should never come here 1!"); } mtr_error("Should never come here 2!"); } mtr_error("Should never come here 3!"); } Loading @@ -230,12 +232,21 @@ sub spawn_parent_impl { { if ( $mode eq 'run' ) { # Simple run of command, we wait for it to return # Simple run of command, wait blocking for it to return my $ret_pid= waitpid($pid,0); if ( $ret_pid != $pid ) { mtr_error("waitpid($pid, 0) returned $ret_pid " . "when waiting for '$path'"); # The "simple" waitpid has failed, print debug info # and try to handle the error mtr_warning("waitpid($pid, 0) returned $ret_pid " . "when waiting for '$path', error: '$!'"); if ( $ret_pid == -1 ) { # waitpid returned -1, that would indicate the process # no longer exist and waitpid couldn't wait for it. return 1; } mtr_error("Error handling failed"); } return mtr_process_exit_status($?); Loading Loading @@ -1109,12 +1120,6 @@ sub mtr_kill_processes ($) { # ############################################################################## # FIXME something is wrong, we sometimes terminate with "Hangup" written # to tty, and no STDERR output telling us why. # FIXME for some reason, setting HUP to 'IGNORE' will cause exit() to # write out "Hangup", and maybe loose some output. We insert a sleep... sub mtr_exit ($) { my $code= shift; mtr_timer_stop_all($::glob_timers); Loading @@ -1126,7 +1131,7 @@ sub mtr_exit ($) { # set ourselves as the group leader at startup (with # POSIX::setpgrp(0,0)), but then care must be needed to always do # proper child process cleanup. kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp(); POSIX::kill(SIGHUP, -$$) if !$::glob_win32_perl and $$ == getpgrp(); exit($code); } Loading mysql-test/mysql-test-run.pl +10 −0 Original line number Diff line number Diff line Loading @@ -2136,6 +2136,16 @@ sub remove_stale_vardir () { mtr_verbose("Removing $opt_vardir/"); rmtree("$opt_vardir/"); } if ( $opt_mem ) { # A symlink from var/ to $opt_mem will be set up # remove the $opt_mem dir to assure the symlink # won't point at an old directory mtr_verbose("Removing $opt_mem"); rmtree($opt_mem); } } else { Loading mysql-test/r/func_str.result +14 −0 Original line number Diff line number Diff line Loading @@ -2273,4 +2273,18 @@ abcxx select lpad('abc', cast(5 as unsigned integer), 'x'); lpad('abc', cast(5 as unsigned integer), 'x') xxabc DROP TABLE IF EXISTS t1; CREATE TABLE `t1` ( `id` varchar(20) NOT NULL, `tire` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2); SELECT REPEAT( '#', tire ) AS A, REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`; A B tire 0 # # 1 ## ## 2 DROP TABLE t1; End of 5.0 tests mysql-test/t/func_str.test +22 −0 Original line number Diff line number Diff line Loading @@ -1115,4 +1115,26 @@ select repeat('a', cast(2 as unsigned int)); select rpad('abc', cast(5 as unsigned integer), 'x'); select lpad('abc', cast(5 as unsigned integer), 'x'); # # Bug #25197 :repeat function returns null when using table field directly as count # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE `t1` ( `id` varchar(20) NOT NULL, `tire` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2); SELECT REPEAT( '#', tire ) AS A, REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`; DROP TABLE t1; --echo End of 5.0 tests Loading
client/mysqltest.c +7 −1 Original line number Diff line number Diff line Loading @@ -60,6 +60,11 @@ # endif #endif /* Use cygwin for --exec and --system before 5.0 */ #if MYSQL_VERSION_ID < 50000 #define USE_CYGWIN #endif #define MAX_VAR_NAME_LENGTH 256 #define MAX_COLUMNS 256 #define MAX_EMBEDDED_SERVER_ARGS 64 Loading Loading @@ -5355,8 +5360,9 @@ void run_query_stmt(MYSQL *mysql, struct st_command *command, /* If we got here the statement succeeded and was expected to do so, get data. Note that this can still give errors found during execution! Store the result of the query if if will return any fields */ if (mysql_stmt_store_result(stmt)) if (mysql_stmt_field_count(stmt) && mysql_stmt_store_result(stmt)) { handle_error(command, mysql_stmt_errno(stmt), mysql_stmt_error(stmt), mysql_stmt_sqlstate(stmt), ds); Loading
mysql-test/lib/mtr_process.pl +22 −17 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ use Socket; use Errno; use strict; use POSIX 'WNOHANG'; use POSIX qw(WNOHANG SIGHUP); sub mtr_run ($$$$$$;$); sub mtr_spawn ($$$$$$;$); Loading Loading @@ -139,19 +139,18 @@ sub spawn_impl ($$$$$$$$) { { if ( $! == $!{EAGAIN} ) # See "perldoc Errno" { mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo"); mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo"); sleep(1); redo FORK; } else { mtr_error("$path ($pid) can't be forked"); } mtr_error("$path ($pid) can't be forked, error: $!"); } if ( $pid ) { spawn_parent_impl($pid,$mode,$path); return spawn_parent_impl($pid,$mode,$path); } else { Loading Loading @@ -216,8 +215,11 @@ sub spawn_impl ($$$$$$$$) { { mtr_child_error("failed to execute \"$path\": $!"); } mtr_error("Should never come here 1!"); } mtr_error("Should never come here 2!"); } mtr_error("Should never come here 3!"); } Loading @@ -230,12 +232,21 @@ sub spawn_parent_impl { { if ( $mode eq 'run' ) { # Simple run of command, we wait for it to return # Simple run of command, wait blocking for it to return my $ret_pid= waitpid($pid,0); if ( $ret_pid != $pid ) { mtr_error("waitpid($pid, 0) returned $ret_pid " . "when waiting for '$path'"); # The "simple" waitpid has failed, print debug info # and try to handle the error mtr_warning("waitpid($pid, 0) returned $ret_pid " . "when waiting for '$path', error: '$!'"); if ( $ret_pid == -1 ) { # waitpid returned -1, that would indicate the process # no longer exist and waitpid couldn't wait for it. return 1; } mtr_error("Error handling failed"); } return mtr_process_exit_status($?); Loading Loading @@ -1109,12 +1120,6 @@ sub mtr_kill_processes ($) { # ############################################################################## # FIXME something is wrong, we sometimes terminate with "Hangup" written # to tty, and no STDERR output telling us why. # FIXME for some reason, setting HUP to 'IGNORE' will cause exit() to # write out "Hangup", and maybe loose some output. We insert a sleep... sub mtr_exit ($) { my $code= shift; mtr_timer_stop_all($::glob_timers); Loading @@ -1126,7 +1131,7 @@ sub mtr_exit ($) { # set ourselves as the group leader at startup (with # POSIX::setpgrp(0,0)), but then care must be needed to always do # proper child process cleanup. kill('HUP', -$$) if !$::glob_win32_perl and $$ == getpgrp(); POSIX::kill(SIGHUP, -$$) if !$::glob_win32_perl and $$ == getpgrp(); exit($code); } Loading
mysql-test/mysql-test-run.pl +10 −0 Original line number Diff line number Diff line Loading @@ -2136,6 +2136,16 @@ sub remove_stale_vardir () { mtr_verbose("Removing $opt_vardir/"); rmtree("$opt_vardir/"); } if ( $opt_mem ) { # A symlink from var/ to $opt_mem will be set up # remove the $opt_mem dir to assure the symlink # won't point at an old directory mtr_verbose("Removing $opt_mem"); rmtree($opt_mem); } } else { Loading
mysql-test/r/func_str.result +14 −0 Original line number Diff line number Diff line Loading @@ -2273,4 +2273,18 @@ abcxx select lpad('abc', cast(5 as unsigned integer), 'x'); lpad('abc', cast(5 as unsigned integer), 'x') xxabc DROP TABLE IF EXISTS t1; CREATE TABLE `t1` ( `id` varchar(20) NOT NULL, `tire` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2); SELECT REPEAT( '#', tire ) AS A, REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`; A B tire 0 # # 1 ## ## 2 DROP TABLE t1; End of 5.0 tests
mysql-test/t/func_str.test +22 −0 Original line number Diff line number Diff line Loading @@ -1115,4 +1115,26 @@ select repeat('a', cast(2 as unsigned int)); select rpad('abc', cast(5 as unsigned integer), 'x'); select lpad('abc', cast(5 as unsigned integer), 'x'); # # Bug #25197 :repeat function returns null when using table field directly as count # --disable_warnings DROP TABLE IF EXISTS t1; --enable_warnings CREATE TABLE `t1` ( `id` varchar(20) NOT NULL, `tire` tinyint(3) unsigned NOT NULL, PRIMARY KEY (`id`) ); INSERT INTO `t1` (`id`, `tire`) VALUES ('A', 0), ('B', 1),('C', 2); SELECT REPEAT( '#', tire ) AS A, REPEAT( '#', tire % 999 ) AS B, tire FROM `t1`; DROP TABLE t1; --echo End of 5.0 tests