diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 18:00:34 +0000 |
commit | 3f619478f796eddbba6e39502fe941b285dd97b1 (patch) | |
tree | e2c7b5777f728320e5b5542b6213fd3591ba51e2 /mysql-test/main/plugin.test | |
parent | Initial commit. (diff) | |
download | mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.tar.xz mariadb-3f619478f796eddbba6e39502fe941b285dd97b1.zip |
Adding upstream version 1:10.11.6.upstream/1%10.11.6upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mysql-test/main/plugin.test')
-rw-r--r-- | mysql-test/main/plugin.test | 337 |
1 files changed, 337 insertions, 0 deletions
diff --git a/mysql-test/main/plugin.test b/mysql-test/main/plugin.test new file mode 100644 index 00000000..9151a6e9 --- /dev/null +++ b/mysql-test/main/plugin.test @@ -0,0 +1,337 @@ +--source include/not_windows_embedded.inc +--source include/have_example_plugin.inc + +--error ER_UNKNOWN_STORAGE_ENGINE +CREATE TABLE t1(a int) ENGINE=EXAMPLE; + +INSTALL PLUGIN example SONAME 'ha_example'; +--replace_regex /\.dll/.so/ +--error ER_PLUGIN_INSTALLED +INSTALL PLUGIN EXAMPLE SONAME 'ha_example'; + +UNINSTALL PLUGIN example; + +INSTALL SONAME 'ha_example'; +--replace_column 5 # +--replace_regex /\.dll/.so/ +--query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%' + +CREATE TABLE t1 (a int) ENGINE=EXAMPLE; +CREATE TABLE t2 (a int) ENGINE=EXAMPLE; +FLUSH TABLES; + +# Let's do some advanced ops with the example engine :) +SELECT * FROM t1; + +# a couple of tests for variables +set global example_ulong_var=500; +set global example_enum_var= e1; +set session example_int_var= -1; +set global example_deprecated_var=1; +show status like 'example%'; +show variables like 'example%'; + +select @@session.example_int_var; + +UNINSTALL SONAME 'ha_example'; + +# the engine is NOT uninstalled yet, +# because the table `t1` is open, sitting in the table defintion cache + +--replace_column 5 # +--replace_regex /\.dll/.so/ +--query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%' +DROP TABLE t1; + +# now the engine IS unloaded +# and the table `t2` belongs to an unknown engine + +--replace_column 5 # +--replace_regex /\.dll/.so/ +--query_vertical select * from information_schema.plugins where plugin_library like 'ha_example%' +--error ER_UNKNOWN_STORAGE_ENGINE +SELECT * FROM t2; +DROP TABLE t2; + + +--error 1305 +UNINSTALL PLUGIN EXAMPLE; + +--error 1305 +UNINSTALL PLUGIN non_exist; + +# +# MDEV-3985 crash: uninstall soname 'a' +# +--replace_regex /\.dll/.so/ +--error 1305 +UNINSTALL SONAME 'non_exist'; + +--echo # +--echo # Bug#32034: check_func_enum() does not check correct values but set it +--echo # to impossible int val +--echo # +INSTALL PLUGIN example SONAME 'ha_example'; + +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 +# +INSTALL PLUGIN example SONAME 'ha_example'; + +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_WRONG_VALUE_FOR_VAR +set session old=bla; + +############################################################### +# engine-specific clauses in the CREATE TABLE: + +--echo #legal values +CREATE TABLE t1 ( a int complex='c,f,f,f' ) ENGINE=example ULL=10000 STR='dskj' one_or_two='one' YESNO=0; +show create table t1; +drop table t1; + +SET @OLD_SQL_MODE=@@SQL_MODE; +SET SQL_MODE='IGNORE_BAD_TABLE_OPTIONS'; + +--echo #illegal value fixed +CREATE TABLE t1 (a int, b int) ENGINE=example ULL=10000000000000000000 one_or_two='ttt' YESNO=SSS; +show create table t1; + +--echo #alter table +alter table t1 ULL=10000000; +show create table t1; +alter table t1 change a a int complex='c,c,c'; +show create table t1; +alter table t1 one_or_two=two; +show create table t1; +drop table t1; + +--echo #illegal value error +SET SQL_MODE=''; +--error ER_BAD_OPTION_VALUE +CREATE TABLE t1 (a int) ENGINE=example ULL=10000000000000000000 one_or_two='ttt' YESNO=SSS; + +--error ER_PARSE_ERROR +CREATE TABLE t1 (a int) ENGINE=example ULL=10.00; + +--error ER_PARSE_ERROR +CREATE TABLE t1 (a int) ENGINE=example ULL=1e2; + +CREATE TABLE t1 (a int) ENGINE=example ULL=0x1234; +SHOW CREATE TABLE t1; +SET example_varopt_default=33; # does not affect varopt of t1 + +select create_options from information_schema.tables where table_schema='test' and table_name='t1'; + +ALTER TABLE t1 ULL=DEFAULT; +SHOW CREATE TABLE t1; + +DROP TABLE t1; + +create table t1 (a int) engine=example; # varopt is 10 +show create table t1; +drop table t1; + +create table t1 (a int) engine=example varopt=15; +show create table t1; +alter table t1 varopt=default; +show create table t1; +drop table t1; + +SET @@SQL_MODE=@OLD_SQL_MODE; + +# +# The only preparable statement above was CREATE TABLE. +# We need to prepare another statement here to force the +# previous one to be deallocated (mysqltest reuses the same handle) +# and to unlock all thread-local plugin locks. Otherwise the plugin won't +# uninstall. +# +select 1; +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 'ha_example'; + +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; + +# +# MDEV-4573 UNINSTALL PLUGIN misleading error message for non-dynamic plugins +# +--error ER_PLUGIN_DELETE_BUILTIN +UNINSTALL PLUGIN MyISAM; + +# +# MDEV-4529 Assertion `tmp->state == 4' fails on mix of INSTALL SONAME / UNINSTALL PLUGIN +# + +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +uninstall plugin example; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +install soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; +uninstall soname 'ha_example'; +select plugin_name from information_schema.plugins where plugin_library like 'ha_example%'; + +# +# +# +--disable_service_connection +set names utf8; +select convert('admin𝌆' using utf8); +--error ER_UDF_NO_PATHS +install plugin foo soname 'admin𝌆'; +--enable_service_connection + +--echo # End of 5.5 test + +--echo # +--echo # MDEV-5309 - RENAME TABLE does not check for existence of the table's +--echo # engine +--echo # +INSTALL PLUGIN example SONAME 'ha_example'; +CREATE TABLE t1(a INT) ENGINE=EXAMPLE; +SELECT * FROM t1; +FLUSH TABLES; +UNINSTALL PLUGIN example; +--error ER_NO_SUCH_TABLE +RENAME TABLE t1 TO t2; +DROP TABLE t1; + +--echo # End of 10.1 test + +--echo # +--echo # MDEV-21258: Can't uninstall plugin if the library file doesn't exist +--echo # + +insert into mysql.plugin values ("unexisting_plugin", "soname"); + +# check that we have the plugin installed +select * from mysql.plugin WHERE name='unexisting_plugin'; + +# make attempt to uninstall the plugin +UNINSTALL PLUGIN unexisting_plugin; + +# check that we have the plugin uninstalled +select * from mysql.plugin WHERE name='unexisting_plugin'; + +--error ER_SP_DOES_NOT_EXIST +UNINSTALL PLUGIN unexisting_plugin; + +--echo # +--echo # MDEV-26323 use-after-poison issue of MariaDB server +--echo # + +--replace_regex /library '.*[\\/].(dll|so)' [(].*[)]/library '.so'/ +--error ER_CANT_OPEN_LIBRARY +INSTALL PLUGIN DEALLOCATE SONAME ''; + +--replace_regex /library '.*[\\/]x.(dll|so)' [(].*[)]/library 'x.so'/ +--error ER_CANT_OPEN_LIBRARY +INSTALL PLUGIN DEALLOCATE SONAME 'x'; + +--replace_regex /library '.*[\\/]xx.(dll|so)' [(].*[)]/library 'xx.so'/ +--error ER_CANT_OPEN_LIBRARY +INSTALL PLUGIN DEALLOCATE SONAME 'xx'; + + +--echo # End of 10.2 tests + +--source include/install_plugin_if_exists.inc + +--echo # +--echo # Make sure temporary tables maintain plugin references properly +--echo # +INSTALL PLUGIN example SONAME 'ha_example'; +CREATE TEMPORARY TABLE t1(a INT) ENGINE=example; +UNINSTALL PLUGIN example; +--error ER_PLUGIN_INSTALLED +INSTALL PLUGIN example SONAME 'ha_example'; +DROP TABLE t1; + +INSTALL PLUGIN example SONAME 'ha_example'; +CREATE TEMPORARY TABLE t1(a INT) ENGINE=example; +DROP TABLE t1; +UNINSTALL PLUGIN example; + +--echo # End of 10.4 tests |