From a837a4df1e111cb0fb44acf11d8fe8d94116c611 Mon Sep 17 00:00:00 2001 From: marko Date: Mon, 4 Jun 2007 12:25:32 +0000 Subject: [PATCH] ha_innobase::innobase_read_and_init_auto_inc(): Remember and restore prebuilt->sql_stat_start. In an ALTER TABLE statement in the innodb_gis test, an ut_ad() assertion failed, because no IX lock had been acquired on the table, because prebuilt->sql_stat_start was inadvertently reset to FALSE, by this function. This function was called via ha_innobase::info() and mysql_prepare_alter_table(). --- handler/ha_innodb.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/handler/ha_innodb.cc b/handler/ha_innodb.cc index 935b0a7ff64..de0b5b5b446 100644 --- a/handler/ha_innodb.cc +++ b/handler/ha_innodb.cc @@ -7056,11 +7056,16 @@ ha_innobase::innobase_read_and_init_auto_inc( longlong auto_inc; ulint old_select_lock_type; ibool trx_was_not_started = FALSE; + ibool stmt_start; int error; ut_a(prebuilt); ut_a(prebuilt->table); + /* Remember if we are in the beginning of an SQL statement. + This function must not change that flag. */ + stmt_start = prebuilt->sql_stat_start; + /* Prepare prebuilt->trx in the table handle */ update_thd(ha_thd()); @@ -7182,6 +7187,8 @@ func_exit_early: innobase_commit_low(prebuilt->trx); } + prebuilt->sql_stat_start = stmt_start; + return(error); }