mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 12:56:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			343 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			343 lines
		
	
	
	
		
			9.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
--source include/not_windows_embedded.inc
 | 
						|
--source include/have_example_plugin.inc
 | 
						|
 | 
						|
--error ER_UNKNOWN_STORAGE_ENGINE
 | 
						|
CREATE TABLE t1(a int) ENGINE=EXAMPLE;
 | 
						|
 | 
						|
--replace_regex /\.dll/.so/
 | 
						|
--error ER_CANT_FIND_DL_ENTRY
 | 
						|
INSTALL PLUGIN non_exist SONAME 'ha_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';
 | 
						|
 | 
						|
--disable_cursor_protocol
 | 
						|
select @@session.sql_mode into @old_sql_mode;
 | 
						|
--enable_cursor_protocol
 | 
						|
 | 
						|
# 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
 |