Commit e3482dd5 authored by vasil's avatar vasil

branches/5.1:

Merge a change from MySQL (fix the failing innodb test):

  ------------------------------------------------------------
  revno: 2646.12.1
  committer: Mattias Jonsson <mattiasj@mysql.com>
  branch nick: wl4176_2-51-bugteam
  timestamp: Mon 2008-08-11 20:02:03 +0200
  message:
    Bug#20129: ALTER TABLE ... REPAIR PARTITION ... complains that
    partition is corrupt
    
    The main problem was that ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR
    PARTITION took another code path (over mysql_alter_table instead of
    mysql_admin_table) which differs in two ways:
    1) alter table opens the tables in a different way than admin tables do
       resulting in returning with error before it tried the command
    2) alter table does not start to send any diagnostic rows to the client
       which the lower admin functions continue to use -> resulting in
       assertion crash
    
    The fix:
    Remapped ALTER TABLE t ANALYZE/CHECK/OPTIMIZE/REPAIR PARTITION to use
    the same code path as ANALYZE/CHECK/OPTIMIZE/REPAIR TABLE t.
    Adding check in mysql_admin_table to setup the partition list for
    which partitions that should be used.
    
    
    Partitioned tables will still not work with
    REPAIR TABLE/PARTITION USE_FRM, since that requires moving partitions
    to tables, REPAIR TABLE t USE_FRM, and check that the data still
    fulfills the partitioning function and then move the table back to
    being a partition.
    
    NOTE: I have removed the following functions from the handler
    interface:
    analyze_partitions, check_partitions, optimize_partitions,
    repair_partitions
    Since they are not longer needed.
    THIS ALTERS THE STORAGE ENGINE API

I have verified that OPTIMIZE TABLE actually rebuilds the table
and calls ANALYZE.

Approved by:	Heikki
parent 0e039a4c
......@@ -166,6 +166,7 @@ level id parent_id
1 1007 101
optimize table t1;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
show keys from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
......@@ -190,6 +191,7 @@ create table t1 (a int) engine=innodb;
insert into t1 values (1), (2);
optimize table t1;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
delete from t1 where a = 1;
select * from t1;
......@@ -738,6 +740,7 @@ world 2
hello 1
optimize table t1;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
show keys from t1;
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
......@@ -3109,6 +3112,7 @@ BEGIN;
INSERT INTO t1 VALUES (1);
OPTIMIZE TABLE t1;
Table Op Msg_type Msg_text
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
test.t1 optimize status OK
DROP TABLE t1;
CREATE TABLE t1 (id int PRIMARY KEY, f int NOT NULL, INDEX(f)) ENGINE=InnoDB;
......
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