diff options
author | unknown <gshchepa/uchum@host.loc> | 2008-05-13 00:37:45 +0500 |
---|---|---|
committer | unknown <gshchepa/uchum@host.loc> | 2008-05-13 00:37:45 +0500 |
commit | 07343d013ffc230a6c7cf9e284615a0afc503de1 (patch) | |
tree | 7a72be60619a2a6c56eecb436d4e8a59d79c6a7e | |
parent | 9592070014671b54f7a763bd8bf1e2b91a69c056 (diff) | |
parent | e7e49eb69ee6ca949d8f885505da572bb1d394c4 (diff) | |
download | mariadb-git-07343d013ffc230a6c7cf9e284615a0afc503de1.tar.gz |
Merge host.loc:/work/bugs/5.0-bugteam-36055
into host.loc:/work/bk/5.1-bugteam
sql/handler.cc:
Auto merged
mysql-test/r/repair.result:
Merge with 5.0-bugteam (bug#36055).
mysql-test/t/repair.test:
Merge with 5.0-bugteam (bug#36055).
sql/sql_table.cc:
Merge with 5.0-bugteam (bug#36055).
-rw-r--r-- | mysql-test/r/repair.result | 36 | ||||
-rw-r--r-- | mysql-test/std_data/bug36055.MYD | bin | 0 -> 10 bytes | |||
-rw-r--r-- | mysql-test/std_data/bug36055.MYI | bin | 0 -> 1024 bytes | |||
-rw-r--r-- | mysql-test/std_data/bug36055.frm | bin | 0 -> 8556 bytes | |||
-rw-r--r-- | mysql-test/t/repair.test | 30 | ||||
-rw-r--r-- | sql/handler.cc | 2 | ||||
-rw-r--r-- | sql/sql_table.cc | 7 |
7 files changed, 75 insertions, 0 deletions
diff --git a/mysql-test/r/repair.result b/mysql-test/r/repair.result index 8c0671ad740..dce37230d42 100644 --- a/mysql-test/r/repair.result +++ b/mysql-test/r/repair.result @@ -115,6 +115,42 @@ SET myisam_repair_threads=@@global.myisam_repair_threads; SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; DROP TABLE t1; End of 4.1 tests +# Test with a saved table from 4.1 +SHOW TABLE STATUS LIKE 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Fixed 2 5 10 21474836479 1024 0 NULL # # NULL latin1_swedish_ci NULL +SELECT * FROM t1; +id +1 +2 +# Run CHECK TABLE, it should indicate table need a REPAIR TABLE +CHECK TABLE t1 FOR UPGRADE; +Table Op Msg_type Msg_text +test.t1 check error Table upgrade required. Please do "REPAIR TABLE `t1`" to fix it! +# REPAIR old table USE_FRM should fail +REPAIR TABLE t1 USE_FRM; +Table Op Msg_type Msg_text +t1 repair error Failed reparing incompatible .FRM file +# Run REPAIR TABLE to upgrade .frm file +REPAIR TABLE t1; +Table Op Msg_type Msg_text +test.t1 repair status OK +SHOW TABLE STATUS LIKE 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 10 Fixed 2 7 14 1970324836974591 1024 0 NULL # # NULL latin1_swedish_ci NULL +SELECT * FROM t1; +id +1 +2 +REPAIR TABLE t1 USE_FRM; +Table Op Msg_type Msg_text +test.t1 repair warning Number of rows changed from 0 to 2 +test.t1 repair status OK +SELECT * FROM t1; +id +1 +2 +DROP TABLE t1; DROP TABLE IF EXISTS tt1; CREATE TEMPORARY TABLE tt1 (c1 INT); REPAIR TABLE tt1 USE_FRM; diff --git a/mysql-test/std_data/bug36055.MYD b/mysql-test/std_data/bug36055.MYD Binary files differnew file mode 100644 index 00000000000..4932a077113 --- /dev/null +++ b/mysql-test/std_data/bug36055.MYD diff --git a/mysql-test/std_data/bug36055.MYI b/mysql-test/std_data/bug36055.MYI Binary files differnew file mode 100644 index 00000000000..531c505c102 --- /dev/null +++ b/mysql-test/std_data/bug36055.MYI diff --git a/mysql-test/std_data/bug36055.frm b/mysql-test/std_data/bug36055.frm Binary files differnew file mode 100644 index 00000000000..11c9cb31dad --- /dev/null +++ b/mysql-test/std_data/bug36055.frm diff --git a/mysql-test/t/repair.test b/mysql-test/t/repair.test index b433b8720b9..94a9fda6757 100644 --- a/mysql-test/t/repair.test +++ b/mysql-test/t/repair.test @@ -113,6 +113,36 @@ SET myisam_sort_buffer_size=@@global.myisam_sort_buffer_size; DROP TABLE t1; --echo End of 4.1 tests + +# +# BUG#36055 - mysql_upgrade doesn't really 'upgrade' tables +# + +--echo # Test with a saved table from 4.1 +--copy_file std_data/bug36055.frm $MYSQLTEST_VARDIR/master-data/test/t1.frm +--copy_file std_data/bug36055.MYD $MYSQLTEST_VARDIR/master-data/test/t1.MYD +--copy_file std_data/bug36055.MYI $MYSQLTEST_VARDIR/master-data/test/t1.MYI + +--replace_column 12 # 13 # +SHOW TABLE STATUS LIKE 't1'; +SELECT * FROM t1; + +--echo # Run CHECK TABLE, it should indicate table need a REPAIR TABLE +CHECK TABLE t1 FOR UPGRADE; + +--echo # REPAIR old table USE_FRM should fail +REPAIR TABLE t1 USE_FRM; + +--echo # Run REPAIR TABLE to upgrade .frm file +REPAIR TABLE t1; +--replace_column 12 # 13 # +SHOW TABLE STATUS LIKE 't1'; +SELECT * FROM t1; + +REPAIR TABLE t1 USE_FRM; +SELECT * FROM t1; + +DROP TABLE t1; # End of 5.0 tests # diff --git a/sql/handler.cc b/sql/handler.cc index 6099faa929f..ebe5ea5d4fa 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2738,6 +2738,8 @@ int handler::ha_check_for_upgrade(HA_CHECK_OPT *check_opt) } } } + if (table->s->frm_version != FRM_VER_TRUE_VARCHAR) + return HA_ADMIN_NEEDS_ALTER; return check_for_upgrade(check_opt); } diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 714701bbf3b..3ef510b8d89 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -4021,6 +4021,13 @@ static int prepare_for_repair(THD *thd, TABLE_LIST *table_list, - Run a normal repair using the new index file and the old data file */ + if (table->s->frm_version != FRM_VER_TRUE_VARCHAR) + { + error= send_check_errmsg(thd, table_list, "repair", + "Failed reparing incompatible .FRM file"); + goto end; + } + /* Check if this is a table type that stores index and data separately, like ISAM or MyISAM. We assume fixed order of engine file name |