summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorgshchepa/uchum@host.loc <>2008-05-12 21:01:13 +0500
committergshchepa/uchum@host.loc <>2008-05-12 21:01:13 +0500
commit1e7be565e20100b5be68fe0476b5276362b0de73 (patch)
treec199105fc93fb719a3a0fc021e64ed6662c0b00e /sql/sql_table.cc
parente9e6679381bf1b3c114302a338b66beee59e9bef (diff)
downloadmariadb-git-1e7be565e20100b5be68fe0476b5276362b0de73.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.
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc7
1 files changed, 7 insertions, 0 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 9e1a8151e3a..f1de63892d5 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -2118,6 +2118,13 @@ static int prepare_for_repair(THD* thd, TABLE_LIST *table_list,
const char **ext= table->file->bas_ext();
MY_STAT stat_info;
+ 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