#At lp:maria 2770 knielsen@knielsen-hq.org 2009-10-09 Implement mysqltest --enable_prepare_warnings to properly fix some test failures. The --enable_prepare_warnings allows to not discard warnings from autorepair of crashed table in --ps-protocol mode. Use this to properly fix the parts.partition_recover_myisam and maria.maria-recover tests. Add a test case for the new feature. This also adds missing test coverage for the case where the same warning is thrown in both prepare and execute phase. added: mysql-test/r/mysqltest_ps.result mysql-test/t/mysqltest_ps.test modified: client/mysqltest.cc mysql-test/suite/maria/t/maria-recover.test mysql-test/suite/parts/t/partition_recover_myisam.test per-file messages: client/mysqltest.cc Implement new commands --enable-prepare_warnings and --disable_prepare_warnings. mysql-test/r/mysqltest_ps.result Add test case for new --enable_prepare_warning mysqltest command. mysql-test/suite/maria/t/maria-recover.test Better fix of test case using new --enable_prepare_warnings command. mysql-test/suite/parts/t/partition_recover_myisam.test Fix test failure in --ps-protocol mode. mysql-test/t/mysqltest_ps.test Add test case for new --enable_prepare_warning mysqltest command. === modified file 'client/mysqltest.cc' --- a/client/mysqltest.cc 2009-09-07 20:50:10 +0000 +++ b/client/mysqltest.cc 2009-10-09 07:52:38 +0000 @@ -100,6 +100,7 @@ static my_bool display_result_vertically display_metadata= FALSE, display_result_sorted= FALSE; static my_bool disable_query_log= 0, disable_result_log= 0; static my_bool disable_warnings= 0; +static my_bool prepare_warnings_enabled= 0; static my_bool disable_info= 1; static my_bool abort_on_error= 1; static my_bool server_initialized= 0; @@ -289,7 +290,7 @@ enum enum_commands { Q_SEND_QUIT, Q_CHANGE_USER, Q_MKDIR, Q_RMDIR, Q_LIST_FILES, Q_LIST_FILES_WRITE_FILE, Q_LIST_FILES_APPEND_FILE, Q_SEND_SHUTDOWN, Q_SHUTDOWN_SERVER, - Q_MOVE_FILE, + Q_MOVE_FILE, Q_ENABLE_PREPARE_WARNINGS, Q_DISABLE_PREPARE_WARNINGS, Q_UNKNOWN, /* Unknown command. */ Q_COMMENT, /* Comments, ignored. */ @@ -387,6 +388,8 @@ const char *command_names[]= "send_shutdown", "shutdown_server", "move_file", + "enable_prepare_warnings", + "disable_prepare_warnings", 0 }; @@ -6929,8 +6932,17 @@ void run_query_stmt(MYSQL *mysql, struct mysql_free_result(res); /* Free normal result set with meta data */ - /* Clear prepare warnings */ - dynstr_set(&ds_prepare_warnings, NULL); + /* + Normally, if there is a result set, we do not show warnings from the + prepare phase. This is because some warnings are generated both during + prepare and execute; this would generate different warning output + between normal and ps-protocol test runs. + + The --enable_prepare_warnings command can be used to change this so + that warnings from both the prepare and execute phase are shown. + */ + if (!disable_warnings && !prepare_warnings_enabled) + dynstr_set(&ds_prepare_warnings, NULL); } else { @@ -7754,6 +7766,8 @@ int main(int argc, char **argv) case Q_DISABLE_RESULT_LOG: disable_result_log=1; break; case Q_ENABLE_WARNINGS: disable_warnings=0; break; case Q_DISABLE_WARNINGS: disable_warnings=1; break; + case Q_ENABLE_PREPARE_WARNINGS: prepare_warnings_enabled=1; break; + case Q_DISABLE_PREPARE_WARNINGS: prepare_warnings_enabled=0; break; case Q_ENABLE_INFO: disable_info=0; break; case Q_DISABLE_INFO: disable_info=1; break; case Q_ENABLE_METADATA: display_metadata=1; break; === added file 'mysql-test/r/mysqltest_ps.result' --- a/mysql-test/r/mysqltest_ps.result 1970-01-01 00:00:00 +0000 +++ b/mysql-test/r/mysqltest_ps.result 2009-10-09 07:52:38 +0000 @@ -0,0 +1,40 @@ +select 1 + "2 a"; +1 + "2 a" +3 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: '2 a' +create table t (a int primary key, b blob default ''); +Warnings: +Warning 1101 BLOB/TEXT column 'b' can't have a default value +select a, (2*a) AS a from t group by a; +a a +Warnings: +Warning 1052 Column 'a' in group statement is ambiguous +drop table t; +select 1 + "2 a"; +1 + "2 a" +3 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: '2 a' +create table t (a int primary key, b blob default ''); +Warnings: +Warning 1101 BLOB/TEXT column 'b' can't have a default value +select a, (2*a) AS a from t group by a; +a a +Warnings: +Warning 1052 Column 'a' in group statement is ambiguous +Warning 1052 Column 'a' in group statement is ambiguous +drop table t; +select 1 + "2 a"; +1 + "2 a" +3 +Warnings: +Warning 1292 Truncated incorrect DOUBLE value: '2 a' +create table t (a int primary key, b blob default ''); +Warnings: +Warning 1101 BLOB/TEXT column 'b' can't have a default value +select a, (2*a) AS a from t group by a; +a a +Warnings: +Warning 1052 Column 'a' in group statement is ambiguous +drop table t; === modified file 'mysql-test/suite/maria/t/maria-recover.test' --- a/mysql-test/suite/maria/t/maria-recover.test 2009-02-19 09:01:25 +0000 +++ b/mysql-test/suite/maria/t/maria-recover.test 2009-10-09 07:52:38 +0000 @@ -54,11 +54,10 @@ perl; close FILE; EOF -# line below will be removed -disable_ps_protocol; replace_regex /Table.*t_corrupted2/t_corrupted2/ ; +--enable_prepare_warnings select * from t_corrupted2; # should show corruption and repair messages -enable_ps_protocol; +--disable_prepare_warnings select * from t_corrupted2; # should show just rows drop database mysqltest; === modified file 'mysql-test/suite/parts/t/partition_recover_myisam.test' --- a/mysql-test/suite/parts/t/partition_recover_myisam.test 2009-10-07 07:57:48 +0000 +++ b/mysql-test/suite/parts/t/partition_recover_myisam.test 2009-10-09 07:52:38 +0000 @@ -18,7 +18,9 @@ let $MYSQLD_DATADIR= `select @@datadir`; --copy_file std_data/corrupt_t1.MYI $MYSQLD_DATADIR/test/t1_will_crash.MYI # Embedded server doesn't chdir to data directory --replace_regex /Table '.*\/data\/test\/t1_will_crash/Table '.\/test\/t1_will_crash/ +--enable_prepare_warnings SELECT * FROM t1_will_crash; +--disable_prepare_warnings DROP TABLE t1_will_crash; CREATE TABLE t1_will_crash (a INT, KEY (a)) ENGINE=MyISAM @@ -33,5 +35,7 @@ FLUSH TABLES; --copy_file std_data/corrupt_t1#P#p1.MYI $MYSQLD_DATADIR/test/t1_will_crash#P#p1.MYI # Embedded server doesn't chdir to data directory --replace_regex /Table '.*\/data\/test\/t1_will_crash/Table '.\/test\/t1_will_crash/ +--enable_prepare_warnings SELECT * FROM t1_will_crash; +--disable_prepare_warnings DROP TABLE t1_will_crash; === added file 'mysql-test/t/mysqltest_ps.test' --- a/mysql-test/t/mysqltest_ps.test 1970-01-01 00:00:00 +0000 +++ b/mysql-test/t/mysqltest_ps.test 2009-10-09 07:52:38 +0000 @@ -0,0 +1,34 @@ +# +# Test mysqltest in --ps-protocol mode. +# + +if (`SELECT $PS_PROTOCOL = 0`) +{ + --skip Need prepared statement protocol +} + +# +# Test the --enable_prepare_warnings command. +# Test default value (off), enabling, and disabling. +# + +--enable_warnings + +select 1 + "2 a"; +create table t (a int primary key, b blob default ''); +# This statement gives warning both during prepare and execute. +# So gives double warnings when --enable_prepare_warnings. +select a, (2*a) AS a from t group by a; +drop table t; + +--enable_prepare_warnings +select 1 + "2 a"; +create table t (a int primary key, b blob default ''); +select a, (2*a) AS a from t group by a; +drop table t; + +--disable_prepare_warnings +select 1 + "2 a"; +create table t (a int primary key, b blob default ''); +select a, (2*a) AS a from t group by a; +drop table t;