mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	Explain_query must be created in the execution arena. But JOIN::optimize_inner temporarily switches to the statement arena under `if (sel->first_cond_optimization)`. This might cause Explain_query to be allocated in the statement arena. Usually it is harmless (although technically incorrect and a waste of memory), but in case of EXECUTE IMMEDIATE, Prepared_statement object and its statement arena are destroyed before log_slow_statement() call, which uses Explain_query. Fix: 1. Create Explain_query before switching arenas. 2. Before filling earlier-created Explain_query with data, set thd->mem_root from the Explain_query::mem_root
		
			
				
	
	
		
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
# This is a test for EXPLAINs being written into slow query log.
 | 
						|
# For now, we just run the queries and hope not to crash.
 | 
						|
# 
 | 
						|
#
 | 
						|
--disable_warnings
 | 
						|
drop table if exists t0,t1;
 | 
						|
--enable_warnings
 | 
						|
 | 
						|
create table t0 (a int);
 | 
						|
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 | 
						|
 | 
						|
explain select * from t0 where a < 3;
 | 
						|
 | 
						|
--echo # 
 | 
						|
--echo # MDEV-5045: Server crashes in QPF_query::print_explain with log_slow_verbosity='query_plan,explain'
 | 
						|
--echo # 
 | 
						|
set autocommit=1;
 | 
						|
drop table t0;
 | 
						|
 | 
						|
--echo # 
 | 
						|
--echo # MDEV-5047 virtual THD::~THD(): Assertion `status_var.memory_used == 0' fails on disconnect
 | 
						|
--echo # 
 | 
						|
--connect (con1,localhost,root,,)
 | 
						|
--error ER_NO_SUCH_TABLE
 | 
						|
ALTER TABLE nonexisting ENABLE KEYS;
 | 
						|
SHOW WARNINGS;
 | 
						|
--disconnect con1
 | 
						|
--connection default
 | 
						|
SELECT 1;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-5060 Server crashes on EXPLAIN EXTENDED or EXPLAIN PARTITIONS with explain in slow_log
 | 
						|
--echo #
 | 
						|
EXPLAIN PARTITIONS SELECT 1 ;
 | 
						|
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-5106: Server crashes in Explain_union::print_explain on ER_TOO_BIG_SELECT with explain in slow log
 | 
						|
--echo #
 | 
						|
CREATE TABLE t1 (i INT) ENGINE=MyISAM;
 | 
						|
INSERT INTO t1 VALUES
 | 
						|
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
 | 
						|
SET max_join_size = 10;
 | 
						|
--error ER_TOO_BIG_SELECT
 | 
						|
( SELECT ta.* FROM t1 ta, t1 tb ) UNION ( SELECT * FROM t1 );
 | 
						|
SELECT 'Server still alive?' as 'Yes';
 | 
						|
 | 
						|
DROP TABLE t1;
 | 
						|
 | 
						|
--echo #
 | 
						|
--echo # MDEV-5308 Crash when running with slow_query_log=1
 | 
						|
--echo #
 | 
						|
SET @save1= @@log_slow_rate_limit; 
 | 
						|
SET @save2= @@long_query_time; 
 | 
						|
 | 
						|
SET log_slow_rate_limit=1000; 
 | 
						|
SET long_query_time=0.000001; 
 | 
						|
SELECT 1; 
 | 
						|
 | 
						|
SET log_slow_rate_limit=@save1;
 | 
						|
SET long_query_time=@save2;
 | 
						|
 | 
						|
#
 | 
						|
# MDEV-16153 Server crashes in Apc_target::disable, ASAN heap-use-after-free in Explain_query::~Explain_query upon/after EXECUTE IMMEDIATE
 | 
						|
#
 | 
						|
create table t1 (a int);
 | 
						|
execute immediate "select * from t1 join t1 t2 on (t1.a>5) where exists (select 1)";
 | 
						|
drop table t1;
 |