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. mysql-test/r/rpl_user_variables.result: results changed mysql-test/t/rpl_user_variables.test: a problematic query to be binlogged is added sql/item_func.cc: BUG#19136: Crashing log-bin and uninitialized user variables The reason of the bug is in that how `get_var_with_binlog' performs missed assingment of the variables: `free_underlaid_joins' gets as an argument `thd->lex->select_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.
		
			
				
	
	
		
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
stop slave;
 | 
						|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | 
						|
reset master;
 | 
						|
reset slave;
 | 
						|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
 | 
						|
start slave;
 | 
						|
reset 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);
 | 
						|
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);
 | 
						|
insert into t1 values (@a),(@a),(@a*5);
 | 
						|
select * from t1;
 | 
						|
n
 | 
						|
12345678901234
 | 
						|
-12345678901234
 | 
						|
0
 | 
						|
-1
 | 
						|
12.5
 | 
						|
-12.5
 | 
						|
This is a test
 | 
						|
 | 
						|
abc'def
 | 
						|
abc\def
 | 
						|
abc'def
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
0
 | 
						|
1
 | 
						|
2
 | 
						|
5
 | 
						|
abc
 | 
						|
abcn1
 | 
						|
abcn1n2
 | 
						|
5
 | 
						|
5
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
select * from t1;
 | 
						|
n
 | 
						|
12345678901234
 | 
						|
-12345678901234
 | 
						|
0
 | 
						|
-1
 | 
						|
12.5
 | 
						|
-12.5
 | 
						|
This is a test
 | 
						|
 | 
						|
abc'def
 | 
						|
abc\def
 | 
						|
abc'def
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
0
 | 
						|
1
 | 
						|
2
 | 
						|
5
 | 
						|
abc
 | 
						|
abcn1
 | 
						|
abcn1n2
 | 
						|
5
 | 
						|
5
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
NULL
 | 
						|
show binlog events from 141;
 | 
						|
Log_name	Pos	Event_type	Server_id	Orig_log_pos	Info
 | 
						|
slave-bin.000001	141	User var	2	141	@`i1`=12345678901234
 | 
						|
slave-bin.000001	184	User var	2	184	@`i2`=-12345678901234
 | 
						|
slave-bin.000001	227	User var	2	227	@`i3`=0
 | 
						|
slave-bin.000001	270	User var	2	270	@`i4`=-1
 | 
						|
slave-bin.000001	313	Query	1	313	use `test`; insert into t1 values (@i1), (@i2), (@i3), (@i4)
 | 
						|
slave-bin.000001	396	User var	2	396	@`r1`=12.5
 | 
						|
slave-bin.000001	439	User var	2	439	@`r2`=-12.5
 | 
						|
slave-bin.000001	482	Query	1	482	use `test`; insert into t1 values (@r1), (@r2)
 | 
						|
slave-bin.000001	551	User var	2	551	@`s1`=_latin1 0x5468697320697320612074657374 COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	600	User var	2	600	@`s2`=_latin1 "" COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	635	User var	2	635	@`s3`=_latin1 0x61626327646566 COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	677	User var	2	677	@`s4`=_latin1 0x6162635C646566 COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	719	User var	2	719	@`s5`=_latin1 0x61626327646566 COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	761	Query	1	761	use `test`; insert into t1 values (@s1), (@s2), (@s3), (@s4), (@s5)
 | 
						|
slave-bin.000001	851	User var	2	851	@`n1`=NULL
 | 
						|
slave-bin.000001	877	Query	1	877	use `test`; insert into t1 values (@n1)
 | 
						|
slave-bin.000001	939	User var	2	939	@`n2`=NULL
 | 
						|
slave-bin.000001	965	Query	1	965	use `test`; insert into t1 values (@n2)
 | 
						|
slave-bin.000001	1027	Query	1	1027	use `test`; insert into t1 values (@a:=0), (@a:=@a+1), (@a:=@a+1)
 | 
						|
slave-bin.000001	1115	User var	2	1115	@`a`=2
 | 
						|
slave-bin.000001	1157	Query	1	1157	use `test`; insert into t1 values (@a+(@b:=@a+1))
 | 
						|
slave-bin.000001	1229	User var	2	1229	@`q`=_latin1 0x616263 COLLATE latin1_swedish_ci
 | 
						|
slave-bin.000001	1266	Query	1	1266	use `test`; insert t1 values (@q), (@q:=concat(@q, 'n1')), (@q:=concat(@q, 'n2'))
 | 
						|
slave-bin.000001	1370	User var	2	1370	@`a`=5
 | 
						|
slave-bin.000001	1412	Query	1	1412	use `test`; insert into t1 values (@a),(@a)
 | 
						|
slave-bin.000001	1478	User var	2	1478	@`a`=NULL
 | 
						|
slave-bin.000001	1503	Query	1	1503	use `test`; insert into t1 values (@a),(@a),(@a*5)
 | 
						|
insert into t1 select * FROM (select @var1 union  select @var2) AS t2;
 | 
						|
drop table t1;
 | 
						|
stop slave;
 |