summaryrefslogtreecommitdiff
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
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
-rw-r--r--mysql-test/r/innodb.result9
-rw-r--r--mysql-test/t/innodb.test8
-rw-r--r--sql/sql_show.cc5
-rw-r--r--sql/sql_table.cc24
4 files changed, 38 insertions, 8 deletions
diff --git a/mysql-test/r/innodb.result b/mysql-test/r/innodb.result
index 48db5412da7..b12466983f8 100644
--- a/mysql-test/r/innodb.result
+++ b/mysql-test/r/innodb.result
@@ -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;
diff --git a/mysql-test/t/innodb.test b/mysql-test/t/innodb.test
index 2f7285e7898..9d614e8d163 100644
--- a/mysql-test/t/innodb.test
+++ b/mysql-test/t/innodb.test
@@ -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;
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 6e1cf2e8217..4d6f9d3490e 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -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 */
}
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;
}