263 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			263 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test of init_connect variable
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# should work with embedded server after mysqltest is fixed
							 | 
						||
| 
								 | 
							
								--source include/not_embedded.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Save the initial number of concurrent sessions
							 | 
						||
| 
								 | 
							
								--source include/count_sessions.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--source include/add_anonymous_users.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connect (con0,localhost,root,,);
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								select hex(@a);
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,user_1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select hex(@a);
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								set global init_connect="set @a=2;set @b=3";
							 | 
						||
| 
								 | 
							
								connect (con2,localhost,user_1,,);
							 | 
						||
| 
								 | 
							
								connection con2;
							 | 
						||
| 
								 | 
							
								select @a, @b;
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								set GLOBAL init_connect=DEFAULT;
							 | 
						||
| 
								 | 
							
								connect (con3,localhost,user_1,,);
							 | 
						||
| 
								 | 
							
								connection con3;
							 | 
						||
| 
								 | 
							
								select @a;
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								set global init_connect="drop table if exists t1; create table t1(a char(10));\
							 | 
						||
| 
								 | 
							
								insert into t1 values ('\0');insert into t1 values('abc')";
							 | 
						||
| 
								 | 
							
								connect (con4,localhost,user_1,,);
							 | 
						||
| 
								 | 
							
								connection con4;
							 | 
						||
| 
								 | 
							
								select hex(a) from t1;
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								set GLOBAL init_connect="adsfsdfsdfs";
							 | 
						||
| 
								 | 
							
								connect (con5,localhost,user_1,,);
							 | 
						||
| 
								 | 
							
								connection con5;
							 | 
						||
| 
								 | 
							
								# BUG#11755281/47032: ERROR 2006 / ERROR 2013 INSTEAD OF PROPER ERROR MESSAGE
							 | 
						||
| 
								 | 
							
								# We now throw a proper error message here:
							 | 
						||
| 
								 | 
							
								--replace_regex /connection .* to/connection to/
							 | 
						||
| 
								 | 
							
								--error ER_NEW_ABORTING_CONNECTION
							 | 
						||
| 
								 | 
							
								select @a;
							 | 
						||
| 
								 | 
							
								# We got disconnected after receiving the above error message; any further
							 | 
						||
| 
								 | 
							
								# requests should fail with a notice that no one's listening to us.
							 | 
						||
| 
								 | 
							
								# --error CR_SERVER_GONE_ERROR,CR_SERVER_LOST
							 | 
						||
| 
								 | 
							
								--error 2013,2006
							 | 
						||
| 
								 | 
							
								select @a;
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								drop table t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								disconnect con2;
							 | 
						||
| 
								 | 
							
								disconnect con3;
							 | 
						||
| 
								 | 
							
								disconnect con4;
							 | 
						||
| 
								 | 
							
								disconnect con5;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--source include/delete_anonymous_users.inc
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--echo End of 4.1 tests
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test 5.* features
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create table t1 (x int);
							 | 
						||
| 
								 | 
							
								insert into t1 values (3), (5), (7);
							 | 
						||
| 
								 | 
							
								create table t2 (y int);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create user mysqltest1@localhost;
							 | 
						||
| 
								 | 
							
								grant all privileges on test.* to mysqltest1@localhost;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Create a simple procedure
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="create procedure p1() select * from t1";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								call p1();
							 | 
						||
| 
								 | 
							
								drop procedure p1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Create a multi-result set procedure
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="create procedure p1(x int)\
							 | 
						||
| 
								 | 
							
								begin\
							 | 
						||
| 
								 | 
							
								  select count(*) from t1;\
							 | 
						||
| 
								 | 
							
								  select * from t1;\
							 | 
						||
| 
								 | 
							
								  set @x = x;
							 | 
						||
| 
								 | 
							
								end";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								call p1(42);
							 | 
						||
| 
								 | 
							
								select @x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Just call it - this will not generate any output
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="call p1(4711)";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select @x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Drop the procedure
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="drop procedure if exists p1";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								--error ER_SP_DOES_NOT_EXIST
							 | 
						||
| 
								 | 
							
								call p1();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Execution of a more complex procedure
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								delimiter |;
							 | 
						||
| 
								 | 
							
								create procedure p1(out sum int)
							 | 
						||
| 
								 | 
							
								begin
							 | 
						||
| 
								 | 
							
								  declare n int default 0;
							 | 
						||
| 
								 | 
							
								  declare c cursor for select * from t1;
							 | 
						||
| 
								 | 
							
								  declare exit handler for not found
							 | 
						||
| 
								 | 
							
								    begin
							 | 
						||
| 
								 | 
							
								      close c;
							 | 
						||
| 
								 | 
							
								      set sum = n;
							 | 
						||
| 
								 | 
							
								    end;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  open c;
							 | 
						||
| 
								 | 
							
								  loop
							 | 
						||
| 
								 | 
							
								    begin
							 | 
						||
| 
								 | 
							
								      declare x int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      fetch c into x;
							 | 
						||
| 
								 | 
							
								      if x > 3 then
							 | 
						||
| 
								 | 
							
								        set n = n + x;
							 | 
						||
| 
								 | 
							
								      end if;
							 | 
						||
| 
								 | 
							
								    end;
							 | 
						||
| 
								 | 
							
								  end loop;
							 | 
						||
| 
								 | 
							
								end|
							 | 
						||
| 
								 | 
							
								delimiter ;|
							 | 
						||
| 
								 | 
							
								# Call the procedure with a cursor
							 | 
						||
| 
								 | 
							
								set global init_connect="call p1(@sum)";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select @sum;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								drop procedure p1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test Dynamic SQL
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								delimiter |;
							 | 
						||
| 
								 | 
							
								create procedure p1(tbl char(10), v int)
							 | 
						||
| 
								 | 
							
								begin
							 | 
						||
| 
								 | 
							
								  set @s = concat('insert into ', tbl, ' values (?)');
							 | 
						||
| 
								 | 
							
								  set @v = v;
							 | 
						||
| 
								 | 
							
								  prepare stmt1 from @s;
							 | 
						||
| 
								 | 
							
								  execute stmt1 using @v;
							 | 
						||
| 
								 | 
							
								  deallocate prepare stmt1;
							 | 
						||
| 
								 | 
							
								end|
							 | 
						||
| 
								 | 
							
								delimiter ;|
							 | 
						||
| 
								 | 
							
								# Call the procedure with prepared statements
							 | 
						||
| 
								 | 
							
								set global init_connect="call p1('t1', 11)";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								drop procedure p1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Stored functions
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								delimiter |;
							 | 
						||
| 
								 | 
							
								create function f1() returns int
							 | 
						||
| 
								 | 
							
								begin
							 | 
						||
| 
								 | 
							
								  declare n int;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  select count(*) into n from t1;
							 | 
						||
| 
								 | 
							
								  return n;
							 | 
						||
| 
								 | 
							
								end|
							 | 
						||
| 
								 | 
							
								delimiter ;|
							 | 
						||
| 
								 | 
							
								# Invoke a function
							 | 
						||
| 
								 | 
							
								set global init_connect="set @x = f1()";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select @x;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Create a view
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="create view v1 as select f1()";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select * from v1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Drop the view
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								set global init_connect="drop view v1";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								--error ER_NO_SUCH_TABLE
							 | 
						||
| 
								 | 
							
								select * from v1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								drop function f1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# We can't test "create trigger", since this requires super privileges
							 | 
						||
| 
								 | 
							
								# in 5.0, but with super privileges, init_connect is not executed.
							 | 
						||
| 
								 | 
							
								# (However, this can be tested in 5.1)
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#set global init_connect="create trigger trg1\
							 | 
						||
| 
								 | 
							
								#  after insert on t2\
							 | 
						||
| 
								 | 
							
								#  for each row\
							 | 
						||
| 
								 | 
							
								#  insert into t1 values (new.y)";
							 | 
						||
| 
								 | 
							
								#connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								#connection con1;
							 | 
						||
| 
								 | 
							
								#insert into t2 values (2), (4);
							 | 
						||
| 
								 | 
							
								#select * from t1;
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								#connection con0;
							 | 
						||
| 
								 | 
							
								#disconnect con1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								create trigger trg1
							 | 
						||
| 
								 | 
							
								  after insert on t2
							 | 
						||
| 
								 | 
							
								  for each row
							 | 
						||
| 
								 | 
							
								  insert into t1 values (new.y);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Invoke trigger
							 | 
						||
| 
								 | 
							
								set global init_connect="insert into t2 values (13), (17), (19)";
							 | 
						||
| 
								 | 
							
								connect (con1,localhost,mysqltest1,,);
							 | 
						||
| 
								 | 
							
								connection con1;
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								connection default;
							 | 
						||
| 
								 | 
							
								disconnect con0;
							 | 
						||
| 
								 | 
							
								disconnect con1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								drop trigger trg1;
							 | 
						||
| 
								 | 
							
								# Set init connect back to the value provided in init_connect-master.opt
							 | 
						||
| 
								 | 
							
								# doesn't matter as server will be restarted
							 | 
						||
| 
								 | 
							
								set global init_connect="set @a='a\\0c'";
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								revoke all privileges, grant option from mysqltest1@localhost;
							 | 
						||
| 
								 | 
							
								drop user mysqltest1@localhost;
							 | 
						||
| 
								 | 
							
								drop table t1, t2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Wait till all disconnects are completed
							 | 
						||
| 
								 | 
							
								--source include/wait_until_count_sessions.inc
							 | 
						||
| 
								 | 
							
								
							 |