mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-12836 Avoid table rebuild when removing of auto_increment settings
Field::is_equal(): treat old type and new one without AUTO_INCREMENT as equal Closes #1208
This commit is contained in:
committed by
Sergei Golubchik
parent
23a7693a68
commit
8dffaaef72
21
mysql-test/suite/innodb/r/instant_auto_inc.result
Normal file
21
mysql-test/suite/innodb/r/instant_auto_inc.result
Normal file
@@ -0,0 +1,21 @@
|
||||
create table t(id int primary key, a int) engine=InnoDB;
|
||||
insert into t (id, a) values (1, 1);
|
||||
alter table t modify column id int auto_increment;
|
||||
check table t;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
insert into t (a) values (2);
|
||||
alter table t modify column id int, algorithm=instant;
|
||||
check table t;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
insert into t (id, a) values (3, 3);
|
||||
select * from t;
|
||||
id a
|
||||
1 1
|
||||
2 2
|
||||
3 3
|
||||
check table t;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t check status OK
|
||||
drop table t;
|
||||
13
mysql-test/suite/innodb/t/instant_auto_inc.test
Normal file
13
mysql-test/suite/innodb/t/instant_auto_inc.test
Normal file
@@ -0,0 +1,13 @@
|
||||
--source include/have_innodb.inc
|
||||
|
||||
create table t(id int primary key, a int) engine=InnoDB;
|
||||
insert into t (id, a) values (1, 1);
|
||||
alter table t modify column id int auto_increment;
|
||||
check table t;
|
||||
insert into t (a) values (2);
|
||||
alter table t modify column id int, algorithm=instant;
|
||||
check table t;
|
||||
insert into t (id, a) values (3, 3);
|
||||
select * from t;
|
||||
check table t;
|
||||
drop table t;
|
||||
@@ -3469,7 +3469,7 @@ uint Field_new_decimal::is_equal(Create_field *new_field)
|
||||
return ((new_field->type_handler() == type_handler()) &&
|
||||
((new_field->flags & UNSIGNED_FLAG) ==
|
||||
(uint) (flags & UNSIGNED_FLAG)) &&
|
||||
((new_field->flags & AUTO_INCREMENT_FLAG) ==
|
||||
((new_field->flags & AUTO_INCREMENT_FLAG) <=
|
||||
(uint) (flags & AUTO_INCREMENT_FLAG)) &&
|
||||
(new_field->length == max_display_length()) &&
|
||||
(new_field->decimals == dec));
|
||||
@@ -9535,7 +9535,8 @@ bool Field_num::eq_def(const Field *field) const
|
||||
|
||||
uint Field_num::is_equal(Create_field *new_field)
|
||||
{
|
||||
if ((new_field->flags ^ flags) & (UNSIGNED_FLAG | AUTO_INCREMENT_FLAG))
|
||||
if (((new_field->flags & UNSIGNED_FLAG) != (flags & UNSIGNED_FLAG)) ||
|
||||
((new_field->flags & AUTO_INCREMENT_FLAG) > (flags & AUTO_INCREMENT_FLAG)))
|
||||
return IS_EQUAL_NO;
|
||||
|
||||
const Type_handler *th= type_handler(), *new_th = new_field->type_handler();
|
||||
|
||||
Reference in New Issue
Block a user