mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	The reason of the bug is in that `get_var_with_binlog' performs missed assingment of the variables as side-effect. Doing that it eventually calls `free_underlaid_joins' to pass as an argument `thd->lex->select_lex' of the lex which belongs to the user query, not to one which is emulated i.e SET @var1:=NULL. `get_var_with_binlog' is refined to supply a temporary lex to sql_set_variables's stack.
		
			
				
	
	
		
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# Test of replicating user variables
 | 
						|
#
 | 
						|
source include/master-slave.inc;
 | 
						|
# Disable PS as the log positions differs
 | 
						|
--disable_ps_protocol
 | 
						|
 | 
						|
 | 
						|
# Clean up old slave's binlogs.
 | 
						|
# The slave is started with --log-slave-updates
 | 
						|
# and this test does SHOW BINLOG EVENTS on the slave's
 | 
						|
# binlog. But previous tests can influence the current test's
 | 
						|
# binlog (e.g. a temporary table in the previous test has not
 | 
						|
# been explicitly deleted, or it has but the slave hasn't had
 | 
						|
# enough time to catch it before STOP SLAVE, 
 | 
						|
# and at the beginning of the current
 | 
						|
# test the slave immediately writes DROP TEMPORARY TABLE this_old_table).
 | 
						|
# We wait for the slave to have written all he wants to the binlog
 | 
						|
# (otherwise RESET MASTER may come too early).
 | 
						|
save_master_pos;
 | 
						|
connection slave;
 | 
						|
sync_with_master;
 | 
						|
reset master;
 | 
						|
connection master;
 | 
						|
 | 
						|
create table t1(n char(30));
 | 
						|
set @i1:=12345678901234, @i2:=-12345678901234, @i3:=0, @i4:=-1;
 | 
						|
set @s1:='This is a test', @r1:=12.5, @r2:=-12.5;
 | 
						|
set @n1:=null;
 | 
						|
set @s2:='', @s3:='abc\'def', @s4:= 'abc\\def', @s5:= 'abc''def';
 | 
						|
insert into t1 values (@i1), (@i2), (@i3), (@i4);
 | 
						|
insert into t1 values (@r1), (@r2);
 | 
						|
insert into t1 values (@s1), (@s2), (@s3), (@s4), (@s5);
 | 
						|
insert into t1 values (@n1);
 | 
						|
insert into t1 values (@n2); # not explicitely set before
 | 
						|
insert into t1 values (@a:=0), (@a:=@a+1), (@a:=@a+1);
 | 
						|
insert into t1 values (@a+(@b:=@a+1));
 | 
						|
set @q:='abc';
 | 
						|
insert t1 values (@q), (@q:=concat(@q, 'n1')), (@q:=concat(@q, 'n2'));
 | 
						|
set @a:=5;
 | 
						|
insert into t1 values (@a),(@a);
 | 
						|
connection master1; # see if variable is reset in binlog when thread changes
 | 
						|
insert into t1 values (@a),(@a),(@a*5);
 | 
						|
select * from t1;
 | 
						|
save_master_pos;
 | 
						|
connection slave;
 | 
						|
sync_with_master;
 | 
						|
select * from t1;
 | 
						|
show binlog events from 141;
 | 
						|
 | 
						|
#
 | 
						|
# BUG19136: Crashing log-bin and uninitialized user variables in a derived table
 | 
						|
# just to check nothing bad happens anymore
 | 
						|
connection master;
 | 
						|
insert into t1 select * FROM (select @var1 union  select @var2) AS t2;
 | 
						|
drop table t1;
 | 
						|
save_master_pos;
 | 
						|
 | 
						|
connection slave;
 | 
						|
sync_with_master;
 | 
						|
stop slave;
 | 
						|
 | 
						|
# End of 4.1 tests
 |