mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-22677 UPDATE crashes on partitioned HEAP table WITHOUT OVERLAPS
`ha_heap::clone` was creating a handler by share's handlerton, which is partition handlerton. handler's handlerton should be used instead. Here in particular, HEAP handlerton will be used and it will create ha_heap handler.
This commit is contained in:
@@ -344,4 +344,10 @@ insert into t1 values ('2024-12-21','2034-06-29',0),
|
||||
('2024-12-21','2034-06-29',1);
|
||||
update t1 set b = 1;
|
||||
ERROR 23000: Duplicate entry '\x01-2034-06-29-2024-12-21' for key 'b'
|
||||
# MDEV-22677 Server crashes in ha_partition::open upon update on
|
||||
# partitioned HEAP table with WITHOUT OVERLAPS
|
||||
create or replace table t (id int, s date, e date, period for p(s,e),
|
||||
primary key(id, p without overlaps)
|
||||
) engine=heap partition by hash(id);
|
||||
update t set id = 1;
|
||||
drop table t, t1;
|
||||
|
@@ -335,4 +335,12 @@ insert into t1 values ('2024-12-21','2034-06-29',0),
|
||||
update t1 set b = 1;
|
||||
|
||||
|
||||
--echo # MDEV-22677 Server crashes in ha_partition::open upon update on
|
||||
--echo # partitioned HEAP table with WITHOUT OVERLAPS
|
||||
|
||||
create or replace table t (id int, s date, e date, period for p(s,e),
|
||||
primary key(id, p without overlaps)
|
||||
) engine=heap partition by hash(id);
|
||||
update t set id = 1;
|
||||
|
||||
drop table t, t1;
|
||||
|
@@ -153,7 +153,7 @@ int ha_heap::close(void)
|
||||
|
||||
handler *ha_heap::clone(const char *name, MEM_ROOT *mem_root)
|
||||
{
|
||||
handler *new_handler= get_new_handler(table->s, mem_root, table->s->db_type());
|
||||
handler *new_handler= get_new_handler(table->s, mem_root, ht);
|
||||
if (new_handler && !new_handler->ha_open(table, file->s->name, table->db_stat,
|
||||
HA_OPEN_IGNORE_IF_LOCKED))
|
||||
return new_handler;
|
||||
|
Reference in New Issue
Block a user