summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorsvoj@may.pils.ru <>2006-06-01 18:08:57 +0500
committersvoj@may.pils.ru <>2006-06-01 18:08:57 +0500
commit77ab3b28a7ab7f0c7b65ae877f4697d0efe7e00f (patch)
treee196741ea3b0b3d3a0abc36dae3976340b875fc4 /sql/sql_table.cc
parent3df7afbdc04cfbf3cc1350329374c6adab902903 (diff)
downloadmariadb-git-77ab3b28a7ab7f0c7b65ae877f4697d0efe7e00f.tar.gz
BUG#19192 - CHECK TABLE EXTENDED / REPAIR TABLE show no errors.
ALTER TABLE crashes Executing fast alter table (one that doesn't need to copy data) on tables created by mysql versions prior to 4.0.25 could result in posterior server crash when accessing these tables. There was a bug prior to mysql-4.0.25. Number of null fields was calculated incorrectly. As a result frm and data files gets out of sync after fast alter table. There is no way to determine by which mysql version (in 4.0 and 4.1 branches) table was created, thus we disable fast alter table for all tables created by mysql versions prior to 5.0 branch. See BUG#6236.
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 9ec8e8db1fb..275cfbaa088 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -3614,12 +3614,21 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
their layout. See Field_string::type() for details.
Thus, if the table is too old we may have to rebuild the data to
update the layout.
+
+ There was a bug prior to mysql-4.0.25. Number of null fields was
+ calculated incorrectly. As a result frm and data files gets out of
+ sync after fast alter table. There is no way to determine by which
+ mysql version (in 4.0 and 4.1 branches) table was created, thus we
+ disable fast alter table for all tables created by mysql versions
+ prior to 5.0 branch.
+ See BUG#6236.
*/
need_copy_table= (alter_info->flags &
~(ALTER_CHANGE_COLUMN_DEFAULT|ALTER_OPTIONS) ||
(create_info->used_fields &
~(HA_CREATE_USED_COMMENT|HA_CREATE_USED_PASSWORD)) ||
table->s->tmp_table ||
+ !table->s->mysql_version ||
(table->s->frm_version < FRM_VER_TRUE_VARCHAR && varchar));
create_info->frm_only= !need_copy_table;