Commit 8baad6f3 authored by unknown's avatar unknown

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
parent 54bf7e05
...@@ -1201,3 +1201,12 @@ a b ...@@ -1201,3 +1201,12 @@ a b
8 5 8 5
9 5 9 5
drop table t1,t2; drop table t1,t2;
CREATE TABLE t2 ( NEXT_T BIGINT NOT NULL PRIMARY KEY) TYPE=MyISAM;
CREATE TABLE t1 ( B_ID INTEGER NOT NULL PRIMARY KEY) TYPE=InnoDB;
SET AUTOCOMMIT=0;
INSERT INTO t1 ( B_ID ) VALUES ( 1 );
INSERT INTO t2 ( NEXT_T ) VALUES ( 1 );
ROLLBACK;
SELECT * FROM t1;
B_ID
drop table t1,t2;
...@@ -797,3 +797,11 @@ select * from t1; ...@@ -797,3 +797,11 @@ select * from t1;
select * from t2; select * from t2;
drop table t1,t2; drop table t1,t2;
CREATE TABLE t2 ( NEXT_T BIGINT NOT NULL PRIMARY KEY) TYPE=MyISAM;
CREATE TABLE t1 ( B_ID INTEGER NOT NULL PRIMARY KEY) TYPE=InnoDB;
SET AUTOCOMMIT=0;
INSERT INTO t1 ( B_ID ) VALUES ( 1 );
INSERT INTO t2 ( NEXT_T ) VALUES ( 1 );
ROLLBACK;
SELECT * FROM t1;
drop table t1,t2;
...@@ -728,7 +728,10 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list) ...@@ -728,7 +728,10 @@ mysqld_show_keys(THD *thd, TABLE_LIST *table_list)
net_store_data(packet,convert,(const char*) pos); net_store_data(packet,convert,(const char*) pos);
net_store_data(packet,convert,table->file->index_type(i)); net_store_data(packet,convert,table->file->index_type(i));
/* Comment */ /* Comment */
net_store_data(packet,convert,""); if (!(table->keys_in_use & ((key_map) 1 << i)))
net_store_data(packet,convert,"disabled",8);
else
net_store_data(packet,convert,"");
if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length())) if (my_net_write(&thd->net,(char*) packet->ptr(),packet->length()))
DBUG_RETURN(1); /* purecov: inspected */ DBUG_RETURN(1); /* purecov: inspected */
} }
......
...@@ -912,12 +912,9 @@ mysql_rename_table(enum db_type base, ...@@ -912,12 +912,9 @@ mysql_rename_table(enum db_type base,
Win32 clients must also have a WRITE LOCK on the table ! 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("safe_remove_from_cache");
DBUG_ENTER("close_cached_table");
safe_mutex_assert_owner(&LOCK_open);
if (table) if (table)
{ {
DBUG_PRINT("enter",("table: %s", table->real_name)); DBUG_PRINT("enter",("table: %s", table->real_name));
...@@ -940,7 +937,18 @@ bool close_cached_table(THD *thd,TABLE *table) ...@@ -940,7 +937,18 @@ bool close_cached_table(THD *thd,TABLE *table)
#endif #endif
/* When lock on LOCK_open is freed other threads can continue */ /* When lock on LOCK_open is freed other threads can continue */
pthread_cond_broadcast(&COND_refresh); 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 */ /* Close lock if this is not got with LOCK TABLES */
if (thd->lock) if (thd->lock)
{ {
...@@ -949,7 +957,7 @@ bool close_cached_table(THD *thd,TABLE *table) ...@@ -949,7 +957,7 @@ bool close_cached_table(THD *thd,TABLE *table)
/* Close all copies of 'table'. This also frees all LOCK TABLES lock */ /* Close all copies of 'table'. This also frees all LOCK TABLES lock */
thd->open_tables=unlink_open_table(thd,thd->open_tables,table); 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, 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, ...@@ -1456,9 +1464,11 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
case LEAVE_AS_IS: case LEAVE_AS_IS:
break; break;
case ENABLE: case ENABLE:
error=table->file->activate_all_index(thd); safe_remove_from_cache(thd,table);
error= table->file->activate_all_index(thd);
break; break;
case DISABLE: case DISABLE:
safe_remove_from_cache(thd,table);
table->file->deactivate_non_unique_index(HA_POS_ERROR); table->file->deactivate_non_unique_index(HA_POS_ERROR);
break; break;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment