diff --git a/mysql-test/include/mix1.inc b/mysql-test/include/mix1.inc index 2b876d10cf2..f995e867e09 100644 --- a/mysql-test/include/mix1.inc +++ b/mysql-test/include/mix1.inc @@ -633,6 +633,14 @@ EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785; DROP TABLE t1,t2; +# +# Bug #28652: assert when alter innodb table operation +# +create table t1(a int) engine=innodb; +alter table t1 comment '123'; +show create table t1; +drop table t1; + --echo End of 5.0 tests # diff --git a/mysql-test/r/innodb_mysql.result b/mysql-test/r/innodb_mysql.result index fb3bac44c61..4503aaecb38 100644 --- a/mysql-test/r/innodb_mysql.result +++ b/mysql-test/r/innodb_mysql.result @@ -621,6 +621,14 @@ EXPLAIN SELECT COUNT(*) FROM t2 WHERE stat_id IN (1,3) AND acct_id=785; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t2 range idx1,idx2 idx1 9 NULL 2 Using where; Using index DROP TABLE t1,t2; +create table t1(a int) engine=innodb; +alter table t1 comment '123'; +show create table t1; +Table Create Table +t1 CREATE TABLE `t1` ( + `a` int(11) default NULL +) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='123' +drop table t1; End of 5.0 tests CREATE TABLE t1 (a int, b int); insert into t1 values (1,1),(1,2); diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 60d5286674b..db26a78e363 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -6385,6 +6385,9 @@ view_err: alter_info->keys_onoff); table->file->ha_external_lock(thd, F_UNLCK); VOID(pthread_mutex_unlock(&LOCK_open)); + error= ha_commit_stmt(thd); + if (ha_commit(thd)) + error= 1; } thd->count_cuted_fields= CHECK_FIELD_IGNORE; @@ -6787,20 +6790,6 @@ view_err: } VOID(pthread_mutex_unlock(&LOCK_open)); broadcast_refresh(); - /* - The ALTER TABLE is always in its own transaction. - Commit must not be called while LOCK_open is locked. It could call - wait_if_global_read_lock(), which could create a deadlock if called - with LOCK_open. - */ - if (!committed) - { - error = ha_commit_stmt(thd); - if (ha_commit(thd)) - error=1; - if (error) - goto err; - } thd->proc_info="end"; ha_binlog_log_query(thd, create_info->db_type, LOGCOM_ALTER_TABLE, @@ -7045,8 +7034,12 @@ copy_data_between_tables(TABLE *from,TABLE *to, } to->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY); - ha_enable_transaction(thd,TRUE); - + if (ha_enable_transaction(thd, TRUE)) + { + error= 1; + goto err; + } + /* Ensure that the new table is saved properly to disk so that we can do a rename