Loading mysql-test/r/innodb_cache.result +20 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ commit; show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 drop table if exists t1; drop table t3,t2,t1; CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB; select count(*) from t1; count(*) Loading @@ -108,3 +108,22 @@ select count(*) from t1; count(*) 1 drop table t1; set GLOBAL query_cache_size=1355776; CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a)) TYPE=innodb; CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b)) TYPE=innodb; CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`)) TYPE=innodb; INSERT INTO t1 VALUES (1,'me'); INSERT INTO t2 VALUES (1,'you'); INSERT INTO t3 VALUES (2,1,1,2); delete from t3 where t1_id = 1 and t2_id = 1; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; id a begin; insert into t3 VALUES ( NULL, 1, 1, 2 ); insert into t3 VALUES ( NULL, 1, 1, 2 ); Duplicate entry '1-1' for key 2 commit; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; id a 1 me drop table t3,t2,t1; mysql-test/r/range.result +1 −1 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ t1 ref y y 5 const 1 Using where t2 range x x 5 NULL 2 Using where explain select count(*) from t1 where x in (1); table type possible_keys key key_len ref rows Extra t1 range x x 5 NULL 1 Using where; Using index t1 ref x x 5 const 1 Using where; Using index explain select count(*) from t1 where x in (1,2); table type possible_keys key key_len ref rows Extra t1 range x x 5 NULL 2 Using where; Using index Loading mysql-test/t/innodb_cache.test +22 −1 Original line number Diff line number Diff line Loading @@ -48,10 +48,31 @@ show status like "Qcache_queries_in_cache"; show status like "Qcache_hits"; commit; show status like "Qcache_queries_in_cache"; drop table t3,t2,t1; drop table if exists t1; CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB; select count(*) from t1; insert into t1 (id) values (0); select count(*) from t1; drop table t1; # # one statement roll back inside transation # set GLOBAL query_cache_size=1355776; CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a)) TYPE=innodb; CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b)) TYPE=innodb; CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`)) TYPE=innodb; INSERT INTO t1 VALUES (1,'me'); INSERT INTO t2 VALUES (1,'you'); INSERT INTO t3 VALUES (2,1,1,2); delete from t3 where t1_id = 1 and t2_id = 1; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; begin; insert into t3 VALUES ( NULL, 1, 1, 2 ); -- error 1062 insert into t3 VALUES ( NULL, 1, 1, 2 ); commit; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; drop table t3,t2,t1; sql/handler.cc +2 −3 Original line number Diff line number Diff line Loading @@ -446,13 +446,12 @@ int ha_rollback_trans(THD *thd, THD_TRANS *trans) reinit_io_cache(&thd->transaction.trans_log, WRITE_CACHE, (my_off_t) 0, 0, 1); thd->transaction.trans_log.end_of_file= max_binlog_cache_size; if (operation_done) thd->transaction.cleanup(); } thd->variables.tx_isolation=thd->session_tx_isolation; if (operation_done) { statistic_increment(ha_rollback_count,&LOCK_status); thd->transaction.cleanup(); } } #endif /* USING_TRANSACTIONS */ DBUG_RETURN(error); Loading sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1590,12 +1590,14 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level, // BETWEEN or IN if (cond_func->key_item()->type() == Item::FIELD_ITEM) add_key_field(key_fields,*and_level, ((Item_field*) (cond_func->key_item()))->field, 0, ((Item_field*) (cond_func->key_item()))->field, #ifndef TO_BE_REMOVED_IN_4_1 /* special treatment for IN. Not necessary in 4.1 */ cond_func->argument_count() == 1, cond_func->arguments() + (cond_func->functype() != Item_func::IN_FUNC), cond_func->argument_count() - (cond_func->functype() != Item_func::IN_FUNC), #else cond_func->argument_count() == 2, cond_func->arguments()+1, cond_func->argument_count()-1, #endif usable_tables); Loading Loading
mysql-test/r/innodb_cache.result +20 −1 Original line number Diff line number Diff line Loading @@ -98,7 +98,7 @@ commit; show status like "Qcache_queries_in_cache"; Variable_name Value Qcache_queries_in_cache 1 drop table if exists t1; drop table t3,t2,t1; CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB; select count(*) from t1; count(*) Loading @@ -108,3 +108,22 @@ select count(*) from t1; count(*) 1 drop table t1; set GLOBAL query_cache_size=1355776; CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a)) TYPE=innodb; CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b)) TYPE=innodb; CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`)) TYPE=innodb; INSERT INTO t1 VALUES (1,'me'); INSERT INTO t2 VALUES (1,'you'); INSERT INTO t3 VALUES (2,1,1,2); delete from t3 where t1_id = 1 and t2_id = 1; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; id a begin; insert into t3 VALUES ( NULL, 1, 1, 2 ); insert into t3 VALUES ( NULL, 1, 1, 2 ); Duplicate entry '1-1' for key 2 commit; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; id a 1 me drop table t3,t2,t1;
mysql-test/r/range.result +1 −1 Original line number Diff line number Diff line Loading @@ -255,7 +255,7 @@ t1 ref y y 5 const 1 Using where t2 range x x 5 NULL 2 Using where explain select count(*) from t1 where x in (1); table type possible_keys key key_len ref rows Extra t1 range x x 5 NULL 1 Using where; Using index t1 ref x x 5 const 1 Using where; Using index explain select count(*) from t1 where x in (1,2); table type possible_keys key key_len ref rows Extra t1 range x x 5 NULL 2 Using where; Using index Loading
mysql-test/t/innodb_cache.test +22 −1 Original line number Diff line number Diff line Loading @@ -48,10 +48,31 @@ show status like "Qcache_queries_in_cache"; show status like "Qcache_hits"; commit; show status like "Qcache_queries_in_cache"; drop table t3,t2,t1; drop table if exists t1; CREATE TABLE t1 (id int(11) NOT NULL auto_increment, PRIMARY KEY (id)) TYPE=InnoDB; select count(*) from t1; insert into t1 (id) values (0); select count(*) from t1; drop table t1; # # one statement roll back inside transation # set GLOBAL query_cache_size=1355776; CREATE TABLE t1 ( id int(10) NOT NULL auto_increment, a varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY a (a)) TYPE=innodb; CREATE TABLE t2 ( id int(10) NOT NULL auto_increment, b varchar(25) default NULL, PRIMARY KEY (id), UNIQUE KEY b (b)) TYPE=innodb; CREATE TABLE t3 ( id int(10) NOT NULL auto_increment, t1_id int(10) NOT NULL default '0', t2_id int(10) NOT NULL default '0', state int(11) default NULL, PRIMARY KEY (id), UNIQUE KEY t1_id (t1_id,t2_id), KEY t2_id (t2_id,t1_id), CONSTRAINT `t3_ibfk_1` FOREIGN KEY (`t1_id`) REFERENCES `t1` (`id`), CONSTRAINT `t3_ibfk_2` FOREIGN KEY (`t2_id`) REFERENCES `t2` (`id`)) TYPE=innodb; INSERT INTO t1 VALUES (1,'me'); INSERT INTO t2 VALUES (1,'you'); INSERT INTO t3 VALUES (2,1,1,2); delete from t3 where t1_id = 1 and t2_id = 1; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; begin; insert into t3 VALUES ( NULL, 1, 1, 2 ); -- error 1062 insert into t3 VALUES ( NULL, 1, 1, 2 ); commit; select t1.* from t1, t2, t3 where t3.state & 1 = 0 and t3.t1_id = t1.id and t3.t2_id = t2.id and t1.id = 1 order by t1.a asc; drop table t3,t2,t1;
sql/handler.cc +2 −3 Original line number Diff line number Diff line Loading @@ -446,13 +446,12 @@ int ha_rollback_trans(THD *thd, THD_TRANS *trans) reinit_io_cache(&thd->transaction.trans_log, WRITE_CACHE, (my_off_t) 0, 0, 1); thd->transaction.trans_log.end_of_file= max_binlog_cache_size; if (operation_done) thd->transaction.cleanup(); } thd->variables.tx_isolation=thd->session_tx_isolation; if (operation_done) { statistic_increment(ha_rollback_count,&LOCK_status); thd->transaction.cleanup(); } } #endif /* USING_TRANSACTIONS */ DBUG_RETURN(error); Loading
sql/sql_select.cc +3 −1 Original line number Diff line number Diff line Loading @@ -1590,12 +1590,14 @@ add_key_fields(JOIN_TAB *stat,KEY_FIELD **key_fields,uint *and_level, // BETWEEN or IN if (cond_func->key_item()->type() == Item::FIELD_ITEM) add_key_field(key_fields,*and_level, ((Item_field*) (cond_func->key_item()))->field, 0, ((Item_field*) (cond_func->key_item()))->field, #ifndef TO_BE_REMOVED_IN_4_1 /* special treatment for IN. Not necessary in 4.1 */ cond_func->argument_count() == 1, cond_func->arguments() + (cond_func->functype() != Item_func::IN_FUNC), cond_func->argument_count() - (cond_func->functype() != Item_func::IN_FUNC), #else cond_func->argument_count() == 2, cond_func->arguments()+1, cond_func->argument_count()-1, #endif usable_tables); Loading