# --source include/not_windows_embedded.inc --source include/have_example_plugin.inc --source include/have_debug_sync.inc # Save the initial number of concurrent sessions --source include/count_sessions.inc --error ER_UNKNOWN_STORAGE_ENGINE CREATE TABLE t1(a int) ENGINE=EXAMPLE; --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; --replace_regex /\.dll/.so/ --error 1125 eval INSTALL PLUGIN EXAMPLE SONAME '$EXAMPLE_PLUGIN'; UNINSTALL PLUGIN example; --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; --echo # Example engine does not support indexes --error ER_TOO_MANY_KEY_PARTS CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=EXAMPLE; --error ER_TOO_MANY_KEY_PARTS CREATE TABLE t1 (a int, KEY (a)) ENGINE=EXAMPLE; CREATE TABLE t1(a int) ENGINE=EXAMPLE; SHOW CREATE TABLE t1; --echo # Let's do some advanced ops with the example engine :) INSERT INTO t1 VALUES (0); --echo # Only supports table scans (and does always return zero rows :) SELECT * FROM t1; SELECT * FROM t1 WHERE a = 0; --echo # Since there are no rows found, it will never do update_row. UPDATE t1 SET a = 1 WHERE a = 0; --echo # Since there are no rows found, it will never do delete_row. DELETE FROM t1 WHERE a = 0; --echo # No support for SQL HANDLER statement --error ER_ILLEGAL_HA HANDLER t1 OPEN; DROP TABLE t1; # a couple of tests for variables set global example_ulong_var=500; set global example_enum_var= e1; --disable_warnings select * from information_schema.global_status where variable_name like 'example%' order by variable_name; --enable_warnings show variables like 'example%'; UNINSTALL PLUGIN example; --error 1305 UNINSTALL PLUGIN EXAMPLE; --error 1305 UNINSTALL PLUGIN non_exist; --echo # --echo # Bug#32034: check_func_enum() does not check correct values but set it --echo # to impossible int val --echo # --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; SET GLOBAL example_enum_var= e1; SET GLOBAL example_enum_var= e2; --error 1231 SET GLOBAL example_enum_var= impossible; UNINSTALL PLUGIN example; # # Bug #32757 hang with sql_mode set when setting some global variables # --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; select @@session.sql_mode into @old_sql_mode; # first, try normal sql_mode (no error, send OK) set session sql_mode=''; set global example_ulong_var=500; select @@global.example_ulong_var; # overflow -- correct value, but throw warning set global example_ulong_var=1111; select @@global.example_ulong_var; # now, try STRICT (error occurrs, no message is sent, so send default) set session sql_mode='STRICT_ALL_TABLES'; set global example_ulong_var=500; select @@global.example_ulong_var; # overflow -- throw warning, do NOT change value --error ER_WRONG_VALUE_FOR_VAR set global example_ulong_var=1111; select @@global.example_ulong_var; set session sql_mode=@old_sql_mode; # finally, show that conditions that already raised an error are not # adversely affected (error was already sent, do nothing) --error ER_INCORRECT_GLOBAL_LOCAL_VAR set session old=bla; UNINSTALL PLUGIN example; --echo # --echo # Bug #16194302 SUPPORT FOR FLOATING-POINT SYSTEM --echo # VARIABLES USING THE PLUGIN INTERFACE. --echo # --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; SET GLOBAL example_double_var = -0.1; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 0.000001; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 0.4; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 123.456789; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 500; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 999.999999; SELECT @@GLOBAL.example_double_var; SET GLOBAL example_double_var = 1000.51; SELECT @@GLOBAL.example_double_var; SET SESSION example_double_thdvar = -0.1; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 0.000001; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 0.4; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 123.456789; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 500; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 999.999999; SELECT @@SESSION.example_double_thdvar; SET SESSION example_double_thdvar = 1000.51; SELECT @@SESSION.example_double_thdvar; UNINSTALL PLUGIN example; --echo # --echo # BUG#18008907 - DEADLOCK BETWEEN MYSQL_CHANGE_USER(), SHOW VARIABLES AND INSTALL PLUGIN --echo # --enable_connect_log delimiter |; CREATE PROCEDURE p_install() BEGIN INSTALL PLUGIN no_such_plugin SONAME 'no_such_object'; END | CREATE PROCEDURE p_show_vars() BEGIN SELECT COUNT(*) FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES; END| delimiter ;| connect(con1, localhost, root,,); --echo # Case 18008907_1: Deadlock situation cause by --echo # con1: has LOCK_system_variables_hash and waits on LOCK_plugin AND --echo # default: has LOCK_plugin and waits on LOCK_system_variables_hash. --echo # SET DEBUG_SYNC='acquired_LOCK_system_variables_hash SIGNAL install_plugin WAIT_FOR cont_show_vars'; --send call p_show_vars(); connection default; SET DEBUG_SYNC='now WAIT_FOR install_plugin'; SET DEBUG_SYNC='acquired_LOCK_plugin SIGNAL cont_show_vars'; --send call p_install(); connection con1; # Without fix, reap will hang. --disable_warnings --replace_column 1 # --reap; --enable_warnings SET DEBUG_SYNC='RESET'; connection default; --replace_regex /(Can\'t open shared library).*$/\1/ --error ER_CANT_OPEN_LIBRARY --reap; SET DEBUG_SYNC='RESET'; --echo # Case 18008907_2: Deadlock situation caused by --echo # default: has LOCK_system_variables_hash and waits on LOCK_global_system_variables, --echo # con1: has LOCK_plugin and waits on LOCK_system_variables_hash AND --echo # con2: has LOCK_global_system_variables and waits on LOCK_plugin. SET DEBUG_SYNC='acquired_LOCK_system_variables_hash SIGNAL install_plugin WAIT_FOR nothing TIMEOUT 10'; --send call p_show_vars(); connection con1; SET DEBUG_SYNC='now WAIT_FOR install_plugin'; SET DEBUG_SYNC='acquired_LOCK_plugin SIGNAL create_connection WAIT_FOR nothing TIMEOUT 10'; --send call p_install(); connect(con2, localhost, root,,); SET DEBUG_SYNC='now WAIT_FOR create_connection'; # Without fix, deadlock situation will occur on timeout of debug_syncs in # default and con1. Because of this, change_user operation hangs. change_user; connection con1; --replace_regex /(Can\'t open shared library).*$/\1/ --error ER_CANT_OPEN_LIBRARY --reap; connection default; # Note: This masks 1639 debug sync point timed out warning --disable_warnings --replace_column 1 # --reap; --enable_warnings disconnect con2; --echo # Case 18008907_3: Testing Concurrent "Show Variables" and "Plugin Uninstall" operations. #Installing plugin --replace_regex /\.dll/.so/ eval INSTALL PLUGIN example SONAME '$EXAMPLE_PLUGIN'; connection con1; #Acquiring LOCK_system_variables_hash and LOCK_plugin_delete SET DEBUG_SYNC='acquired_LOCK_system_variables_hash SIGNAL uninstall_plugin WAIT_FOR go'; --send call p_show_vars(); connect(con2, localhost, root,,); SET DEBUG_SYNC='now WAIT_FOR uninstall_plugin'; --send UNINSTALL PLUGIN example; connection default; #Plugin Uninstall operation will wait until show variables operations releases LOCK_plugin_delete. let $wait_condition= SELECT count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE INFO='UNINSTALL PLUGIN example' and STATE='System lock'; --source include/wait_condition.inc SET DEBUG_SYNC='now SIGNAL go'; connection con1; --disable_warnings --replace_column 1 # --reap --enable_warnings connection con2; --reap connection default; DROP PROCEDURE p_show_vars; DROP PROCEDURE p_install; SET DEBUG_SYNC='RESET'; disconnect con1; disconnect con2; --disable_connect_log --echo # --echo # Bug #11759453: UNINSTALL PLUGIN MISLEADING ERROR --echo # MESSAGE FOR NON-DYNAMIC PLUGINS --echo # # Innodb is now builtin plugin and not dynamically loaded --error ER_PLUGIN_DELETE_BUILTIN UNINSTALL PLUGIN innodb; # Wait till we reached the initial number of concurrent sessions --source include/wait_until_count_sessions.inc