mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Bug #27084 partitioning by list seems failing when using case
creation of the partitioned table could fail as we created Item-s for it's list function in thd->mem_root, and then do Item->fix_fields in the context of other table->mem_root (so that memory alloced there was alloced in this table->mem_root). As we freed the table->mem_root before we do thd->free_items, our Item-s had pointers to the freed memory, that caused the crash mysql-test/r/partition.result: result mysql-test/t/partition.test: testcase sql/item_cmpfunc.cc: here is better place for the implementation sql/item_cmpfunc.h: implementation moved to .cc file sql/sql_partition.cc: work_part_info_used parameter added to mysql_unpack_partition sql/sql_partition.h: work_part_info_used parameter added to mysql_unpack_partition sql/table.cc: we do 'fix_partition_func' using the proper arena now. It's necessary as Item_*::fix_fields can alloc memory using thd->mem_root and this has to be same mem_root that we used to alloc these Item-s
This commit is contained in:
@@ -81,7 +81,8 @@ bool mysql_unpack_partition(THD *thd, const uchar *part_buf,
|
||||
uint part_info_len,
|
||||
uchar *part_state, uint part_state_len,
|
||||
TABLE *table, bool is_create_table_ind,
|
||||
handlerton *default_db_type);
|
||||
handlerton *default_db_type,
|
||||
bool *work_part_info_used);
|
||||
void make_used_partitions_str(partition_info *part_info, String *parts_str);
|
||||
uint32 get_list_array_idx_for_endpoint(partition_info *part_info,
|
||||
bool left_endpoint,
|
||||
|
||||
Reference in New Issue
Block a user