CREATE TABLE t1(a int) ENGINE=EXAMPLE;
ERROR 42000: Unknown storage engine 'EXAMPLE'
INSTALL PLUGIN example SONAME 'ha_example.so';
INSTALL PLUGIN EXAMPLE SONAME 'ha_example.so';
ERROR HY000: Function 'EXAMPLE' already exists
UNINSTALL PLUGIN example;
INSTALL PLUGIN example SONAME 'ha_example.so';
# Example engine does not support indexes
CREATE TABLE t1 (a int PRIMARY KEY) ENGINE=EXAMPLE;
ERROR 42000: Too many key parts specified; max 0 parts allowed
CREATE TABLE t1 (a int, KEY (a)) ENGINE=EXAMPLE;
ERROR 42000: Too many key parts specified; max 0 parts allowed
CREATE TABLE t1(a int) ENGINE=EXAMPLE;
SHOW CREATE TABLE t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL
) ENGINE=EXAMPLE DEFAULT CHARSET=latin1
# Let's do some advanced ops with the example engine :)
INSERT INTO t1 VALUES (0);
# Only supports table scans (and does always return zero rows :)
SELECT * FROM t1;
a
SELECT * FROM t1 WHERE a = 0;
a
# Since there are no rows found, it will never do update_row.
UPDATE t1 SET a = 1 WHERE a = 0;
# Since there are no rows found, it will never do delete_row.
DELETE FROM t1 WHERE a = 0;
# No support for SQL HANDLER statement
HANDLER t1 OPEN;
ERROR HY000: Table storage engine for 't1' doesn't have this option
DROP TABLE t1;
set global example_ulong_var=500;
set global example_enum_var= e1;
show status like 'example%';
Variable_name	Value
example_func_example	enum_var is 0, ulong_var is 500, double_var is 8.500000, really
show variables like 'example%';
Variable_name	Value
example_double_thdvar	8.500000
example_double_var	8.500000
example_enum_var	e1
example_ulong_var	500
UNINSTALL PLUGIN example;
UNINSTALL PLUGIN EXAMPLE;
ERROR 42000: PLUGIN EXAMPLE does not exist
UNINSTALL PLUGIN non_exist;
ERROR 42000: PLUGIN non_exist does not exist
#
# Bug#32034: check_func_enum() does not check correct values but set it
#            to impossible int val
#
INSTALL PLUGIN example SONAME 'ha_example.so';
SET GLOBAL example_enum_var= e1;
SET GLOBAL example_enum_var= e2;
SET GLOBAL example_enum_var= impossible;
ERROR 42000: Variable 'example_enum_var' can't be set to the value of 'impossible'
UNINSTALL PLUGIN example;
INSTALL PLUGIN example SONAME 'ha_example.so';
select @@session.sql_mode into @old_sql_mode;
set session sql_mode='';
set global example_ulong_var=500;
select @@global.example_ulong_var;
@@global.example_ulong_var
500
set global example_ulong_var=1111;
Warnings:
Warning	1292	Truncated incorrect example_ulong_var value: '1111'
select @@global.example_ulong_var;
@@global.example_ulong_var
1000
set session sql_mode='STRICT_ALL_TABLES';
set global example_ulong_var=500;
select @@global.example_ulong_var;
@@global.example_ulong_var
500
set global example_ulong_var=1111;
ERROR 42000: Variable 'example_ulong_var' can't be set to the value of '1111'
select @@global.example_ulong_var;
@@global.example_ulong_var
500
set session sql_mode=@old_sql_mode;
set session old=bla;
ERROR HY000: Variable 'old' is a read only variable
UNINSTALL PLUGIN example;
#
# Bug #16194302  SUPPORT FOR FLOATING-POINT SYSTEM
#                VARIABLES USING THE PLUGIN INTERFACE.
#
INSTALL PLUGIN example SONAME 'ha_example.so';
SET GLOBAL example_double_var = -0.1;
Warnings:
Warning	1292	Truncated incorrect example_double_var value: '-0.1'
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
0.500000
SET GLOBAL example_double_var = 0.000001;
Warnings:
Warning	1292	Truncated incorrect example_double_var value: '0.000001'
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
0.500000
SET GLOBAL example_double_var = 0.4;
Warnings:
Warning	1292	Truncated incorrect example_double_var value: '0.4'
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
0.500000
SET GLOBAL example_double_var = 123.456789;
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
123.456789
SET GLOBAL example_double_var = 500;
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
500.000000
SET GLOBAL example_double_var = 999.999999;
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
999.999999
SET GLOBAL example_double_var = 1000.51;
Warnings:
Warning	1292	Truncated incorrect example_double_var value: '1000.51'
SELECT @@GLOBAL.example_double_var;
@@GLOBAL.example_double_var
1000.500000
SET SESSION example_double_thdvar = -0.1;
Warnings:
Warning	1292	Truncated incorrect example_double_thdvar value: '-0.1'
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
0.500000
SET SESSION example_double_thdvar = 0.000001;
Warnings:
Warning	1292	Truncated incorrect example_double_thdvar value: '0.000001'
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
0.500000
SET SESSION example_double_thdvar = 0.4;
Warnings:
Warning	1292	Truncated incorrect example_double_thdvar value: '0.4'
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
0.500000
SET SESSION example_double_thdvar = 123.456789;
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
123.456789
SET SESSION example_double_thdvar = 500;
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
500.000000
SET SESSION example_double_thdvar = 999.999999;
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
999.999999
SET SESSION example_double_thdvar = 1000.51;
Warnings:
Warning	1292	Truncated incorrect example_double_thdvar value: '1000.51'
SELECT @@SESSION.example_double_thdvar;
@@SESSION.example_double_thdvar
1000.500000
UNINSTALL PLUGIN example;
#
# BUG#18008907 - DEADLOCK BETWEEN MYSQL_CHANGE_USER(), SHOW VARIABLES AND INSTALL PLUGIN
#
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|
connect con1, localhost, root,,;
# Case 18008907_1: Deadlock situation cause by
#                  con1: has LOCK_system_variables_hash and waits on LOCK_plugin  AND
#                  default: has LOCK_plugin and waits on LOCK_system_variables_hash.
#
SET DEBUG_SYNC='acquired_LOCK_system_variables_hash SIGNAL install_plugin WAIT_FOR cont_show_vars';
call p_show_vars();;
connection default;
SET DEBUG_SYNC='now WAIT_FOR install_plugin';
SET DEBUG_SYNC='acquired_LOCK_plugin SIGNAL cont_show_vars';
call p_install();;
connection con1;
COUNT(*)
#
SET DEBUG_SYNC='RESET';
connection default;
ERROR HY000: Can't open shared library
SET DEBUG_SYNC='RESET';
# Case 18008907_2: Deadlock situation caused by
#                  default: has LOCK_system_variables_hash and waits on LOCK_global_system_variables,
#                  con1: has LOCK_plugin and waits on LOCK_system_variables_hash AND
#                  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';
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';
call p_install();;
connect con2, localhost, root,,;
SET DEBUG_SYNC='now WAIT_FOR create_connection';
connection con1;
ERROR HY000: Can't open shared library
connection default;
COUNT(*)
#
Warnings:
#	1639	debug sync point wait timed out
disconnect con2;
# Case 18008907_3: Testing Concurrent "Show Variables" and "Plugin Uninstall" operations.
INSTALL PLUGIN example SONAME 'ha_example.so';
connection con1;
SET DEBUG_SYNC='acquired_LOCK_system_variables_hash SIGNAL uninstall_plugin WAIT_FOR go';
call p_show_vars();;
connect con2, localhost, root,,;
SET DEBUG_SYNC='now WAIT_FOR uninstall_plugin';
UNINSTALL PLUGIN example;;
connection default;
SET DEBUG_SYNC='now SIGNAL go';
connection con1;
COUNT(*)
#
connection con2;
connection default;
DROP PROCEDURE p_show_vars;
DROP PROCEDURE p_install;
SET DEBUG_SYNC='RESET';
disconnect con1;
disconnect con2;
