Loading heap/hp_create.c +2 −1 Original line number Diff line number Diff line Loading @@ -137,6 +137,8 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, keyinfo->write_key= hp_write_key; keyinfo->hash_buckets= 0; } if ((keyinfo->flag & HA_AUTO_KEY) && create_info->with_auto_increment) share->auto_key= i + 1; } share->min_records= min_records; share->max_records= max_records; Loading @@ -147,7 +149,6 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, share->keys= keys; share->max_key_length= max_length; share->changed= 0; share->auto_key= create_info->auto_key; share->auto_key_type= create_info->auto_key_type; share->auto_increment= create_info->auto_increment; /* Must be allocated separately for rename to work */ Loading include/heap.h +1 −1 Original line number Diff line number Diff line Loading @@ -183,10 +183,10 @@ typedef struct st_heap_info typedef struct st_heap_create_info { uint auto_key; uint auto_key_type; ulong max_table_size; ulonglong auto_increment; my_bool with_auto_increment; } HP_CREATE_INFO; /* Prototypes for heap-functions */ Loading mysql-test/r/heap.result +42 −0 Original line number Diff line number Diff line Loading @@ -249,3 +249,45 @@ a 3 2 drop table t1; create table t1 (a bigint unsigned auto_increment primary key, b int, key (b, a)) engine=heap; insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); select * from t1; a b 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 drop table t1; create table t1 (a int not null, b int not null auto_increment, primary key(a, b), key(b)) engine=heap; insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); select * from t1; a b 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 drop table t1; mysql-test/t/heap.test +29 −0 Original line number Diff line number Diff line Loading @@ -195,3 +195,32 @@ delete from t1 where a is null; insert into t1 values ('2'), ('3'); select * from t1; drop table t1; # # Bug #8489: Strange auto_increment behaviour # create table t1 (a bigint unsigned auto_increment primary key, b int, key (b, a)) engine=heap; insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); select * from t1; drop table t1; create table t1 (a int not null, b int not null auto_increment, primary key(a, b), key(b)) engine=heap; insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); select * from t1; drop table t1; sql/ha_heap.cc +8 −4 Original line number Diff line number Diff line Loading @@ -446,6 +446,7 @@ int ha_heap::create(const char *name, TABLE *table_arg, HA_KEYSEG *seg; char buff[FN_REFLEN]; int error; bool found_real_auto_increment= 0; for (key= parts= 0; key < table_arg->keys; key++) parts+= table_arg->key_info[key].key_parts; Loading Loading @@ -506,17 +507,20 @@ int ha_heap::create(const char *name, TABLE *table_arg, seg->null_bit= 0; seg->null_pos= 0; } // We have to store field->key_type() as seg->type can differ from it if (field->flags & AUTO_INCREMENT_FLAG) { auto_key= key + 1; auto_key_type= field->key_type(); } } if (table_arg->found_next_number_field) { keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY; found_real_auto_increment= table_arg->next_number_key_offset == 0; } mem_per_row+= MY_ALIGN(table_arg->reclength + 1, sizeof(char*)); HP_CREATE_INFO hp_create_info; hp_create_info.auto_key= auto_key; hp_create_info.auto_key_type= auto_key_type; hp_create_info.with_auto_increment= found_real_auto_increment; hp_create_info.auto_increment= (create_info->auto_increment_value ? create_info->auto_increment_value - 1 : 0); hp_create_info.max_table_size=current_thd->variables.max_heap_table_size; Loading Loading
heap/hp_create.c +2 −1 Original line number Diff line number Diff line Loading @@ -137,6 +137,8 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, keyinfo->write_key= hp_write_key; keyinfo->hash_buckets= 0; } if ((keyinfo->flag & HA_AUTO_KEY) && create_info->with_auto_increment) share->auto_key= i + 1; } share->min_records= min_records; share->max_records= max_records; Loading @@ -147,7 +149,6 @@ int heap_create(const char *name, uint keys, HP_KEYDEF *keydef, share->keys= keys; share->max_key_length= max_length; share->changed= 0; share->auto_key= create_info->auto_key; share->auto_key_type= create_info->auto_key_type; share->auto_increment= create_info->auto_increment; /* Must be allocated separately for rename to work */ Loading
include/heap.h +1 −1 Original line number Diff line number Diff line Loading @@ -183,10 +183,10 @@ typedef struct st_heap_info typedef struct st_heap_create_info { uint auto_key; uint auto_key_type; ulong max_table_size; ulonglong auto_increment; my_bool with_auto_increment; } HP_CREATE_INFO; /* Prototypes for heap-functions */ Loading
mysql-test/r/heap.result +42 −0 Original line number Diff line number Diff line Loading @@ -249,3 +249,45 @@ a 3 2 drop table t1; create table t1 (a bigint unsigned auto_increment primary key, b int, key (b, a)) engine=heap; insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); select * from t1; a b 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 drop table t1; create table t1 (a int not null, b int not null auto_increment, primary key(a, b), key(b)) engine=heap; insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); select * from t1; a b 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 drop table t1;
mysql-test/t/heap.test +29 −0 Original line number Diff line number Diff line Loading @@ -195,3 +195,32 @@ delete from t1 where a is null; insert into t1 values ('2'), ('3'); select * from t1; drop table t1; # # Bug #8489: Strange auto_increment behaviour # create table t1 (a bigint unsigned auto_increment primary key, b int, key (b, a)) engine=heap; insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); insert t1 (b) values (1); select * from t1; drop table t1; create table t1 (a int not null, b int not null auto_increment, primary key(a, b), key(b)) engine=heap; insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); insert t1 (a) values (1); select * from t1; drop table t1;
sql/ha_heap.cc +8 −4 Original line number Diff line number Diff line Loading @@ -446,6 +446,7 @@ int ha_heap::create(const char *name, TABLE *table_arg, HA_KEYSEG *seg; char buff[FN_REFLEN]; int error; bool found_real_auto_increment= 0; for (key= parts= 0; key < table_arg->keys; key++) parts+= table_arg->key_info[key].key_parts; Loading Loading @@ -506,17 +507,20 @@ int ha_heap::create(const char *name, TABLE *table_arg, seg->null_bit= 0; seg->null_pos= 0; } // We have to store field->key_type() as seg->type can differ from it if (field->flags & AUTO_INCREMENT_FLAG) { auto_key= key + 1; auto_key_type= field->key_type(); } } if (table_arg->found_next_number_field) { keydef[table_arg->next_number_index].flag|= HA_AUTO_KEY; found_real_auto_increment= table_arg->next_number_key_offset == 0; } mem_per_row+= MY_ALIGN(table_arg->reclength + 1, sizeof(char*)); HP_CREATE_INFO hp_create_info; hp_create_info.auto_key= auto_key; hp_create_info.auto_key_type= auto_key_type; hp_create_info.with_auto_increment= found_real_auto_increment; hp_create_info.auto_increment= (create_info->auto_increment_value ? create_info->auto_increment_value - 1 : 0); hp_create_info.max_table_size=current_thd->variables.max_heap_table_size; Loading