Commit 89bb3165 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 bd4d8729
......@@ -1201,3 +1201,12 @@ a b
8 5
9 5
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;
select * from 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)
net_store_data(packet,convert,(const char*) pos);
net_store_data(packet,convert,table->file->index_type(i));
/* 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()))
DBUG_RETURN(1); /* purecov: inspected */
}
......
......@@ -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;
}
......
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