mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-14440: Assertion `inited==RND' failed in handler::ha_rnd_end
In the function QUICK_RANGE_SELECT::init_ror_merged_scan we create a seperate handler if the handler in
head->file cannot be reused. The flag free_file tells us if we have a seperate handler or not.
There are cases where you might create a handler and then there might be a failure(running ALTER)
and then we have to revert the handler back to the original one. The code does that
but it does not reset the flag 'free_file' in this case.
Also backported f2c418079d
.
This commit is contained in:
@ -55,3 +55,27 @@ pk f1 f2 f3 pk f1 f2 f3 f4 f5
|
||||
2 6 v NULL 14 1 q NULL 4 q
|
||||
3 7 c NULL 14 1 q NULL 4 q
|
||||
drop table t1,t2;
|
||||
#
|
||||
# MDEV-14440: Server crash in in handler::ha_external_lock or Assertion `inited==RND'
|
||||
# failed in handler::ha_rnd_end upon SELECT from partitioned table
|
||||
#
|
||||
set @optimizer_switch_save= @@optimizer_switch;
|
||||
set optimizer_switch='index_merge_sort_intersection=off';
|
||||
create table t0 (a int)engine=innodb;
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1 (
|
||||
a int, b int, c int,
|
||||
key(a),key(b),key(c)
|
||||
)engine=innodb;
|
||||
insert into t1
|
||||
select A.a+10*B.a, A.a+10*B.a, A.a+10*B.a+100*C.a
|
||||
from t0 A, t0 B, t0 C, t0 D where D.a<5;
|
||||
set @@global.debug_dbug="+d,ha_index_init_fail";
|
||||
explain select * from t1 where a=10 and b=10;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 index_merge a,b a,b 5,5 NULL 1 Using intersect(a,b); Using where
|
||||
select * from t1 where a=10 and b=10;
|
||||
ERROR HY000: Table definition has changed, please retry transaction
|
||||
DROP TABLE t0,t1;
|
||||
set @@global.debug_dbug="-d";
|
||||
set @@optimizer_switch= @optimizer_switch_save;
|
||||
|
Reference in New Issue
Block a user