Commit 20c89f9f authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-18712 InnoDB indexes are inconsistent with what defined in .frm for table...

MDEV-18712 InnoDB indexes are inconsistent with what defined in .frm for table after rebuilding table with index on blob

when auto-adding a virtual LONG_UNIQUE_HASH_FIELD, fill in
a Virtual_column_info for it, so that fill_alter_inplace_info()
would know we're adding a virtual field (ALTER_ADD_VIRTUAL_COLUMN).
parent 5adf1125
...@@ -10,3 +10,13 @@ create temporary table tmp (a varchar(1024), b int, c int, d int, e linestring, ...@@ -10,3 +10,13 @@ create temporary table tmp (a varchar(1024), b int, c int, d int, e linestring,
load data infile 'load.data' into table tmp; load data infile 'load.data' into table tmp;
delete from tmp; delete from tmp;
drop table t1; drop table t1;
create table t1 (b blob) engine=innodb;
alter table t1 add unique (b);
alter table t1 force;
show create table t1;
Table Create Table
t1 CREATE TABLE `t1` (
`b` blob DEFAULT NULL,
UNIQUE KEY `b` (`b`) USING HASH
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t1;
--source include/have_innodb.inc
# #
# MDEV-18707 Server crash in my_hash_sort_bin, ASAN heap-use-after-free in Field::is_null, server hang, corrupted double-linked list # MDEV-18707 Server crash in my_hash_sort_bin, ASAN heap-use-after-free in Field::is_null, server hang, corrupted double-linked list
# #
...@@ -15,3 +17,12 @@ delete from tmp; ...@@ -15,3 +17,12 @@ delete from tmp;
drop table t1; drop table t1;
--let $datadir= `SELECT @@datadir` --let $datadir= `SELECT @@datadir`
--remove_file $datadir/test/load.data --remove_file $datadir/test/load.data
#
# MDEV-18712 InnoDB indexes are inconsistent with what defined in .frm for table after rebuilding table with index on blob
#
create table t1 (b blob) engine=innodb;
alter table t1 add unique (b);
alter table t1 force;
show create table t1;
drop table t1;
...@@ -3321,6 +3321,8 @@ static Create_field * add_hash_field(THD * thd, List<Create_field> *create_list, ...@@ -3321,6 +3321,8 @@ static Create_field * add_hash_field(THD * thd, List<Create_field> *create_list,
cf->length= cf->char_length= cf->pack_length= HA_HASH_FIELD_LENGTH; cf->length= cf->char_length= cf->pack_length= HA_HASH_FIELD_LENGTH;
cf->invisible= INVISIBLE_FULL; cf->invisible= INVISIBLE_FULL;
cf->pack_flag|= FIELDFLAG_MAYBE_NULL; cf->pack_flag|= FIELDFLAG_MAYBE_NULL;
cf->vcol_info= new (thd->mem_root) Virtual_column_info();
cf->vcol_info->stored_in_db= false;
uint num= 1; uint num= 1;
LEX_CSTRING field_name; LEX_CSTRING field_name;
field_name.str= (char *)thd->alloc(LONG_HASH_FIELD_NAME_LENGTH); field_name.str= (char *)thd->alloc(LONG_HASH_FIELD_NAME_LENGTH);
......
...@@ -691,7 +691,7 @@ static bool pack_vcols(String *buf, List<Create_field> &create_fields, ...@@ -691,7 +691,7 @@ static bool pack_vcols(String *buf, List<Create_field> &create_fields,
for (uint field_nr=0; (field= it++); field_nr++) for (uint field_nr=0; (field= it++); field_nr++)
{ {
if (field->vcol_info) if (field->vcol_info && field->vcol_info->expr)
if (pack_expression(buf, field->vcol_info, field_nr, if (pack_expression(buf, field->vcol_info, field_nr,
field->vcol_info->stored_in_db field->vcol_info->stored_in_db
? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL)) ? VCOL_GENERATED_STORED : VCOL_GENERATED_VIRTUAL))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment