diff options
author | unknown <gshchepa/uchum@host.loc> | 2008-05-12 21:01:13 +0500 |
---|---|---|
committer | unknown <gshchepa/uchum@host.loc> | 2008-05-12 21:01:13 +0500 |
commit | e7e49eb69ee6ca949d8f885505da572bb1d394c4 (patch) | |
tree | c199105fc93fb719a3a0fc021e64ed6662c0b00e /sql/handler.cc | |
parent | 89b866e7bfc8965046626844ee22ecd5b4e5a774 (diff) | |
download | mariadb-git-e7e49eb69ee6ca949d8f885505da572bb1d394c4.tar.gz |
Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
The REPAIR TABLE ... USE_FRM query silently corrupts data of tables
with old .FRM file version.
The mysql_upgrade client program or the REPAIR TABLE query (without
the USE_FRM clause) can't prevent this trouble, because in the
common case they don't upgrade .FRM file to compatible structure.
1. Evaluation of the REPAIR TABLE ... USE_FRM query has been
modified to reject such tables with the message:
"Failed repairing incompatible .FRM file".
2. REPAIR TABLE query (without USE_FRM clause) evaluation has been
modified to upgrade .FRM files to current version.
3. CHECK TABLE ... FOR UPGRADE query evaluation has been modified
to return error status when .FRM file has incompatible version.
4. mysql_upgrade and mysqlcheck client programs call CHECK TABLE
FOR UPGRADE and REPAIR TABLE queries, so their behaviors have
been changed too to upgrade .FRM files with incompatible
version numbers.
mysql-test/std_data/bug36055.MYD:
Added test data for bug #36055.
mysql-test/std_data/bug36055.MYI:
Added test data for bug #36055.
mysql-test/std_data/bug36055.frm:
Added test data for bug #36055.
mysql-test/r/repair.result:
Added test case for bug# 36055.
mysql-test/t/repair.test:
Added test case for bug# 36055.
sql/handler.cc:
Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
The handler::ha_check_for_upgrade method has been modified to
return error if .FRM file has incompatible version number.
sql/sql_table.cc:
Fixed bug #36055: mysql_upgrade doesn't really 'upgrade' tables
The prepare_for_repair function has been modified to reject
REPAIR TABLE ... USE_FRM queries on incompatible .FRM files
with the message: "Failed repairing incompatible .FRM file".
Diffstat (limited to 'sql/handler.cc')
-rw-r--r-- | sql/handler.cc | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/sql/handler.cc b/sql/handler.cc index bfad10f986f..40b85a0901c 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -1980,6 +1980,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); } |