summaryrefslogtreecommitdiff
path: root/sql/sql_table.cc
diff options
context:
space:
mode:
authorunknown <Sinisa@sinisa.nasamreza.org>2003-04-03 20:24:15 +0300
committerunknown <Sinisa@sinisa.nasamreza.org>2003-04-03 20:24:15 +0300
commit89bb3165501b09b2922d361905a4efb7b490d8b0 (patch)
tree97b51391b1053e0078ae3754910ee7fd30a879ee /sql/sql_table.cc
parentbd4d87297d03706b49eab04d030b2e63a4bc9997 (diff)
downloadmariadb-git-89bb3165501b09b2922d361905a4efb7b490d8b0.tar.gz
One test case, one bug fix and one new feature
mysql-test/r/innodb.result: A test case for non-functional rollback after inserting a row into MyISAM table with binary log enabled. mysql-test/t/innodb.test: A test case for non-functional rollback after inserting a row into MyISAM table with binary log enabled. sql/sql_show.cc: Displaying disabled keys in SHOW KEYS sql/sql_table.cc: Fix for a serious bug with ALTER TABLE ENABLE / DISABLE KEYS
Diffstat (limited to 'sql/sql_table.cc')
-rw-r--r--sql/sql_table.cc24
1 files changed, 17 insertions, 7 deletions
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 0cdb0a7ff48..8cec738edb0 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -912,12 +912,9 @@ mysql_rename_table(enum db_type base,
Win32 clients must also have a WRITE LOCK on the table !
*/
-bool close_cached_table(THD *thd,TABLE *table)
+static void safe_remove_from_cache(THD *thd,TABLE *table)
{
- bool result=0;
- DBUG_ENTER("close_cached_table");
- safe_mutex_assert_owner(&LOCK_open);
-
+ DBUG_ENTER("safe_remove_from_cache");
if (table)
{
DBUG_PRINT("enter",("table: %s", table->real_name));
@@ -940,7 +937,18 @@ bool close_cached_table(THD *thd,TABLE *table)
#endif
/* When lock on LOCK_open is freed other threads can continue */
pthread_cond_broadcast(&COND_refresh);
+ }
+ DBUG_VOID_RETURN;
+}
+
+bool close_cached_table(THD *thd,TABLE *table)
+{
+ DBUG_ENTER("close_cached_table");
+ safe_mutex_assert_owner(&LOCK_open);
+ if (table)
+ {
+ safe_remove_from_cache(thd,table);
/* Close lock if this is not got with LOCK TABLES */
if (thd->lock)
{
@@ -949,7 +957,7 @@ bool close_cached_table(THD *thd,TABLE *table)
/* Close all copies of 'table'. This also frees all LOCK TABLES lock */
thd->open_tables=unlink_open_table(thd,thd->open_tables,table);
}
- DBUG_RETURN(result);
+ DBUG_RETURN(0);
}
static int send_check_errmsg(THD* thd, TABLE_LIST* table,
@@ -1456,9 +1464,11 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
case LEAVE_AS_IS:
break;
case ENABLE:
- error=table->file->activate_all_index(thd);
+ safe_remove_from_cache(thd,table);
+ error= table->file->activate_all_index(thd);
break;
case DISABLE:
+ safe_remove_from_cache(thd,table);
table->file->deactivate_non_unique_index(HA_POS_ERROR);
break;
}