mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#39372 "Smart" ALTER TABLE not so smart after all.
The problem was that PACK_KEYS and MAX_ROWS clause in ALTER TABLE did not trigger table reconstruction. The fix is to rebuild a table if PACK_KEYS or MAX_ROWS are specified. mysql-test/r/alter_table.result: test result mysql-test/t/alter_table.test: test case sql/sql_table.cc: The problem was that PACK_KEYS and MAX_ROWS clause in ALTER TABLE did not trigger table reconstruction. The fix is to rebuild a table if PACK_KEYS or MAX_ROWS are specified.
This commit is contained in:
@ -1222,4 +1222,22 @@ ALTER TABLE t1 CHANGE d c varchar(10);
|
|||||||
affected rows: 0
|
affected rows: 0
|
||||||
info: Records: 0 Duplicates: 0 Warnings: 0
|
info: Records: 0 Duplicates: 0 Warnings: 0
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
create table t1(f1 int not null, f2 int not null, key (f1), key (f2));
|
||||||
|
select index_length into @unpaked_keys_size from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
alter table t1 pack_keys=1;
|
||||||
|
select index_length into @paked_keys_size from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
select (@unpaked_keys_size > @paked_keys_size);
|
||||||
|
(@unpaked_keys_size > @paked_keys_size)
|
||||||
|
1
|
||||||
|
select max_data_length into @orig_max_data_length from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
alter table t1 max_rows=100;
|
||||||
|
select max_data_length into @changed_max_data_length from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
select (@orig_max_data_length > @changed_max_data_length);
|
||||||
|
(@orig_max_data_length > @changed_max_data_length)
|
||||||
|
1
|
||||||
|
drop table t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -947,4 +947,34 @@ ALTER TABLE t1 CHANGE d c varchar(10);
|
|||||||
--disable_info
|
--disable_info
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#39372 "Smart" ALTER TABLE not so smart after all.
|
||||||
|
#
|
||||||
|
create table t1(f1 int not null, f2 int not null, key (f1), key (f2));
|
||||||
|
let $count= 50;
|
||||||
|
--disable_query_log
|
||||||
|
while ($count)
|
||||||
|
{
|
||||||
|
EVAL insert into t1 values (1,1),(1,1),(1,1),(1,1),(1,1);
|
||||||
|
EVAL insert into t1 values (2,2),(2,2),(2,2),(2,2),(2,2);
|
||||||
|
dec $count ;
|
||||||
|
}
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
select index_length into @unpaked_keys_size from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
alter table t1 pack_keys=1;
|
||||||
|
select index_length into @paked_keys_size from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
select (@unpaked_keys_size > @paked_keys_size);
|
||||||
|
|
||||||
|
select max_data_length into @orig_max_data_length from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
alter table t1 max_rows=100;
|
||||||
|
select max_data_length into @changed_max_data_length from
|
||||||
|
information_schema.tables where table_name='t1';
|
||||||
|
select (@orig_max_data_length > @changed_max_data_length);
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -5281,6 +5281,8 @@ compare_tables(TABLE *table,
|
|||||||
create_info->used_fields & HA_CREATE_USED_CHARSET ||
|
create_info->used_fields & HA_CREATE_USED_CHARSET ||
|
||||||
create_info->used_fields & HA_CREATE_USED_DEFAULT_CHARSET ||
|
create_info->used_fields & HA_CREATE_USED_DEFAULT_CHARSET ||
|
||||||
create_info->used_fields & HA_CREATE_USED_ROW_FORMAT ||
|
create_info->used_fields & HA_CREATE_USED_ROW_FORMAT ||
|
||||||
|
create_info->used_fields & HA_CREATE_USED_PACK_KEYS ||
|
||||||
|
create_info->used_fields & HA_CREATE_USED_MAX_ROWS ||
|
||||||
(alter_info->flags & (ALTER_RECREATE | ALTER_FOREIGN_KEY)) ||
|
(alter_info->flags & (ALTER_RECREATE | ALTER_FOREIGN_KEY)) ||
|
||||||
order_num ||
|
order_num ||
|
||||||
!table->s->mysql_version ||
|
!table->s->mysql_version ||
|
||||||
|
Reference in New Issue
Block a user