mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
MDEV-21134 Crash with partitioned table, PARTITION syntax, and index_merge.
When the partition table is cloned, the handlers for the partitions that were not opened should anyway be created (but not opened).
This commit is contained in:
@ -1888,7 +1888,7 @@ ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
|
|||||||
SELECT * FROM t1 PARTITION (p0);
|
SELECT * FROM t1 PARTITION (p0);
|
||||||
i
|
i
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1, t2;
|
||||||
#
|
#
|
||||||
# MDEV-18371 Server crashes in ha_innobase::cmp_ref upon UPDATE with PARTITION clause.
|
# MDEV-18371 Server crashes in ha_innobase::cmp_ref upon UPDATE with PARTITION clause.
|
||||||
#
|
#
|
||||||
@ -1906,4 +1906,82 @@ a b
|
|||||||
4 3
|
4 3
|
||||||
8 2
|
8 2
|
||||||
2 6
|
2 6
|
||||||
DROP TABLE t1, t2;
|
DROP TABLE t1;
|
||||||
|
#
|
||||||
|
# MDEV-21134 Crash with partitioned table, PARTITION syntax, and index_merge.
|
||||||
|
#
|
||||||
|
create table t1 (
|
||||||
|
pk int primary key,
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
filler char(32),
|
||||||
|
key (a),
|
||||||
|
key (b)
|
||||||
|
) engine=myisam partition by range(pk) (
|
||||||
|
partition p0 values less than (10),
|
||||||
|
partition p1 values less than MAXVALUE
|
||||||
|
) ;
|
||||||
|
insert into t1 select
|
||||||
|
seq,
|
||||||
|
MOD(seq, 100),
|
||||||
|
MOD(seq, 100),
|
||||||
|
'filler-data-filler-data'
|
||||||
|
from
|
||||||
|
seq_1_to_5000;
|
||||||
|
explain select * from t1 partition (p1) 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
|
||||||
|
flush tables;
|
||||||
|
select * from t1 partition (p1)where a=10 and b=10;
|
||||||
|
pk a b filler
|
||||||
|
10 10 10 filler-data-filler-data
|
||||||
|
110 10 10 filler-data-filler-data
|
||||||
|
210 10 10 filler-data-filler-data
|
||||||
|
310 10 10 filler-data-filler-data
|
||||||
|
410 10 10 filler-data-filler-data
|
||||||
|
510 10 10 filler-data-filler-data
|
||||||
|
610 10 10 filler-data-filler-data
|
||||||
|
710 10 10 filler-data-filler-data
|
||||||
|
810 10 10 filler-data-filler-data
|
||||||
|
910 10 10 filler-data-filler-data
|
||||||
|
1010 10 10 filler-data-filler-data
|
||||||
|
1110 10 10 filler-data-filler-data
|
||||||
|
1210 10 10 filler-data-filler-data
|
||||||
|
1310 10 10 filler-data-filler-data
|
||||||
|
1410 10 10 filler-data-filler-data
|
||||||
|
1510 10 10 filler-data-filler-data
|
||||||
|
1610 10 10 filler-data-filler-data
|
||||||
|
1710 10 10 filler-data-filler-data
|
||||||
|
1810 10 10 filler-data-filler-data
|
||||||
|
1910 10 10 filler-data-filler-data
|
||||||
|
2010 10 10 filler-data-filler-data
|
||||||
|
2110 10 10 filler-data-filler-data
|
||||||
|
2210 10 10 filler-data-filler-data
|
||||||
|
2310 10 10 filler-data-filler-data
|
||||||
|
2410 10 10 filler-data-filler-data
|
||||||
|
2510 10 10 filler-data-filler-data
|
||||||
|
2610 10 10 filler-data-filler-data
|
||||||
|
2710 10 10 filler-data-filler-data
|
||||||
|
2810 10 10 filler-data-filler-data
|
||||||
|
2910 10 10 filler-data-filler-data
|
||||||
|
3010 10 10 filler-data-filler-data
|
||||||
|
3110 10 10 filler-data-filler-data
|
||||||
|
3210 10 10 filler-data-filler-data
|
||||||
|
3310 10 10 filler-data-filler-data
|
||||||
|
3410 10 10 filler-data-filler-data
|
||||||
|
3510 10 10 filler-data-filler-data
|
||||||
|
3610 10 10 filler-data-filler-data
|
||||||
|
3710 10 10 filler-data-filler-data
|
||||||
|
3810 10 10 filler-data-filler-data
|
||||||
|
3910 10 10 filler-data-filler-data
|
||||||
|
4010 10 10 filler-data-filler-data
|
||||||
|
4110 10 10 filler-data-filler-data
|
||||||
|
4210 10 10 filler-data-filler-data
|
||||||
|
4310 10 10 filler-data-filler-data
|
||||||
|
4410 10 10 filler-data-filler-data
|
||||||
|
4510 10 10 filler-data-filler-data
|
||||||
|
4610 10 10 filler-data-filler-data
|
||||||
|
4710 10 10 filler-data-filler-data
|
||||||
|
4810 10 10 filler-data-filler-data
|
||||||
|
4910 10 10 filler-data-filler-data
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
--source include/have_innodb.inc
|
--source include/have_innodb.inc
|
||||||
--source include/have_partition.inc
|
--source include/have_partition.inc
|
||||||
|
--source include/have_sequence.inc
|
||||||
|
|
||||||
# Helper statement
|
# Helper statement
|
||||||
let $get_handler_status_counts= SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
|
let $get_handler_status_counts= SELECT * FROM INFORMATION_SCHEMA.SESSION_STATUS
|
||||||
@ -874,7 +875,7 @@ SELECT * FROM t1 PARTITION (p0);
|
|||||||
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
|
ALTER TABLE t1 EXCHANGE PARTITION p0 WITH TABLE t2;
|
||||||
SELECT * FROM t1 PARTITION (p0);
|
SELECT * FROM t1 PARTITION (p0);
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
DROP TABLE t1;
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # MDEV-18371 Server crashes in ha_innobase::cmp_ref upon UPDATE with PARTITION clause.
|
--echo # MDEV-18371 Server crashes in ha_innobase::cmp_ref upon UPDATE with PARTITION clause.
|
||||||
@ -885,7 +886,34 @@ INSERT INTO t1 VALUES (3,0),(8,2),(7,8),(3,4),(2,4),(0,7),(4,3),(3,6);
|
|||||||
FLUSH TABLES;
|
FLUSH TABLES;
|
||||||
UPDATE t1 PARTITION (p3,p1) SET a = 2 WHERE a = 3;
|
UPDATE t1 PARTITION (p3,p1) SET a = 2 WHERE a = 3;
|
||||||
SELECT * FROM t1;
|
SELECT * FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-21134 Crash with partitioned table, PARTITION syntax, and index_merge.
|
||||||
|
--echo #
|
||||||
|
|
||||||
# Cleanup
|
create table t1 (
|
||||||
DROP TABLE t1, t2;
|
pk int primary key,
|
||||||
|
a int,
|
||||||
|
b int,
|
||||||
|
filler char(32),
|
||||||
|
key (a),
|
||||||
|
key (b)
|
||||||
|
) engine=myisam partition by range(pk) (
|
||||||
|
partition p0 values less than (10),
|
||||||
|
partition p1 values less than MAXVALUE
|
||||||
|
) ;
|
||||||
|
|
||||||
|
insert into t1 select
|
||||||
|
seq,
|
||||||
|
MOD(seq, 100),
|
||||||
|
MOD(seq, 100),
|
||||||
|
'filler-data-filler-data'
|
||||||
|
from
|
||||||
|
seq_1_to_5000;
|
||||||
|
|
||||||
|
explain select * from t1 partition (p1) where a=10 and b=10;
|
||||||
|
flush tables;
|
||||||
|
select * from t1 partition (p1)where a=10 and b=10;
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -3637,7 +3637,22 @@ int ha_partition::open(const char *name, int mode, uint test_if_locked)
|
|||||||
for (i= 0; i < m_tot_parts; i++)
|
for (i= 0; i < m_tot_parts; i++)
|
||||||
{
|
{
|
||||||
if (!bitmap_is_set(&m_is_clone_of->m_opened_partitions, i))
|
if (!bitmap_is_set(&m_is_clone_of->m_opened_partitions, i))
|
||||||
|
{
|
||||||
|
/* Here we should just create the handler instance, not open it. */
|
||||||
|
if (!(m_file[i]= get_new_handler(table->s, m_clone_mem_root,
|
||||||
|
file[i]->ht)))
|
||||||
|
{
|
||||||
|
error= HA_ERR_INITIALIZATION;
|
||||||
|
file= &m_file[i];
|
||||||
|
goto err_handler;
|
||||||
|
}
|
||||||
|
if (m_file[i]->set_ha_share_ref(file[i]->ha_share))
|
||||||
|
{
|
||||||
|
error= HA_ERR_INITIALIZATION;
|
||||||
|
goto err_handler;
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (unlikely((error= create_partition_name(name_buff, sizeof(name_buff),
|
if (unlikely((error= create_partition_name(name_buff, sizeof(name_buff),
|
||||||
name, name_buffer_ptr,
|
name, name_buffer_ptr,
|
||||||
|
Reference in New Issue
Block a user