List:Commits« Previous MessageNext Message »
From:Olav Sandstaa Date:January 9 2011 9:02pm
Subject:Re: bzr commit into mysql-trunk-bugfixing branch (jorgen.loland:3475)
Bug#58837
View as plain text  
Hi Jørgen,

The patch looks good and fixes the valgrind error. OK to push.

Best regards,
Olav

Jorgen Loland wrote:
> #At file:///export/home/jl208045/mysql/mysql-trunk-bugfixing/ based on
> revid:dao-gang.qu@stripped
>
>  3475 Jorgen Loland	2011-01-07
>       BUG#58837: ICP crash or valgrind error due to uninitialized 
>                  value in innobase_index_cond
>       
>       The problem was that ICP pushed a condition to an InnoDB 
>       table accessed through the primary key, and handler::end_range 
>       was not initialized in this case. This problem emerged now 
>       because ICP on InnoDB primary index has recently been enabled.
>      @ mysql-test/include/icp_tests.inc
>         Added test case for BUG#58837
>      @ mysql-test/r/innodb_icp.result
>         Added test case for BUG#58837
>      @ mysql-test/r/innodb_icp_none.result
>         Added test case for BUG#58837
>      @ mysql-test/r/myisam_icp.result
>         Added test case for BUG#58837
>      @ mysql-test/r/myisam_icp_none.result
>         Added test case for BUG#58837
>      @ sql/handler.h
>         Initialize handler::end_range in ha_rnd_init() and ha_rnd_end()
>
>     modified:
>       mysql-test/include/icp_tests.inc
>       mysql-test/r/innodb_icp.result
>       mysql-test/r/innodb_icp_none.result
>       mysql-test/r/myisam_icp.result
>       mysql-test/r/myisam_icp_none.result
>       sql/handler.h
> === modified file 'mysql-test/include/icp_tests.inc'
> --- a/mysql-test/include/icp_tests.inc	2010-12-13 15:22:45 +0000
> +++ b/mysql-test/include/icp_tests.inc	2011-01-07 14:06:38 +0000
> @@ -653,3 +653,47 @@ create table t1 (a char(2) charset utf8,
>  insert into t1 values ('',1);
>  select 1 from t1 where b <= 1 and a <> '';
>  drop table t1;
> +
> +--echo #
> +--echo # Bug#58837: ICP crash or valgrind error due to uninitialized 
> +--echo #            value in innobase_index_cond
> +--echo #
> +
> +CREATE TABLE t1 (
> +  t1_int INT,
> +  t1_time TIME
> +);
> +
> +CREATE TABLE t2 ( 
> +  t2_int int PRIMARY KEY,
> +  t2_int2 INT
> +);
> +
> +--disable_warnings
> +INSERT INTO t2 VALUES ();
> +INSERT INTO t1 VALUES ();
> +--enable_warnings
> +
> +let $query=
> +SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +  (SELECT *
> +   FROM t1 AS t1b
> +   WHERE t1b.t1_int NOT IN
> +     (SELECT t2.t2_int 
> +      FROM t2
> +      WHERE t1b.t1_time LIKE t1b.t1_int
> +      OR t1b.t1_time <> t2.t2_int2
> +      AND 6=7 
> + )
> +)
> +;
> +
> +--echo
> +--eval $query;
> +--echo
> +--eval EXPLAIN $query;
> +--echo
> +
> +DROP TABLE t1,t2;
>
> === modified file 'mysql-test/r/innodb_icp.result'
> --- a/mysql-test/r/innodb_icp.result	2010-12-13 15:22:45 +0000
> +++ b/mysql-test/r/innodb_icp.result	2011-01-07 14:06:38 +0000
> @@ -598,5 +598,56 @@ insert into t1 values ('',1);
>  select 1 from t1 where b <= 1 and a <> '';
>  1
>  drop table t1;
> +#
> +# Bug#58837: ICP crash or valgrind error due to uninitialized 
> +#            value in innobase_index_cond
> +#
> +CREATE TABLE t1 (
> +t1_int INT,
> +t1_time TIME
> +);
> +CREATE TABLE t2 ( 
> +t2_int int PRIMARY KEY,
> +t2_int2 INT
> +);
> +INSERT INTO t2 VALUES ();
> +INSERT INTO t1 VALUES ();
> +
> +SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +t1_int	t1_time
> +
> +EXPLAIN SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +2	SUBQUERY	t1b	ALL	NULL	NULL	NULL	NULL	1	Using where
> +3	DEPENDENT SUBQUERY	t2	unique_subquery	PRIMARY	PRIMARY	4	func	1	Using where; Full
> scan on NULL key
> +
> +DROP TABLE t1,t2;
>  set default_storage_engine= @save_storage_engine;
>  set optimizer_switch=default;
>
> === modified file 'mysql-test/r/innodb_icp_none.result'
> --- a/mysql-test/r/innodb_icp_none.result	2010-12-13 15:22:45 +0000
> +++ b/mysql-test/r/innodb_icp_none.result	2011-01-07 14:06:38 +0000
> @@ -597,5 +597,56 @@ insert into t1 values ('',1);
>  select 1 from t1 where b <= 1 and a <> '';
>  1
>  drop table t1;
> +#
> +# Bug#58837: ICP crash or valgrind error due to uninitialized 
> +#            value in innobase_index_cond
> +#
> +CREATE TABLE t1 (
> +t1_int INT,
> +t1_time TIME
> +);
> +CREATE TABLE t2 ( 
> +t2_int int PRIMARY KEY,
> +t2_int2 INT
> +);
> +INSERT INTO t2 VALUES ();
> +INSERT INTO t1 VALUES ();
> +
> +SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +t1_int	t1_time
> +
> +EXPLAIN SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +2	SUBQUERY	t1b	ALL	NULL	NULL	NULL	NULL	1	Using where
> +3	DEPENDENT SUBQUERY	t2	unique_subquery	PRIMARY	PRIMARY	4	func	1	Using where; Full
> scan on NULL key
> +
> +DROP TABLE t1,t2;
>  set default_storage_engine= @save_storage_engine;
>  set optimizer_switch=default;
>
> === modified file 'mysql-test/r/myisam_icp.result'
> --- a/mysql-test/r/myisam_icp.result	2010-12-13 15:22:45 +0000
> +++ b/mysql-test/r/myisam_icp.result	2011-01-07 14:06:38 +0000
> @@ -596,4 +596,55 @@ insert into t1 values ('',1);
>  select 1 from t1 where b <= 1 and a <> '';
>  1
>  drop table t1;
> +#
> +# Bug#58837: ICP crash or valgrind error due to uninitialized 
> +#            value in innobase_index_cond
> +#
> +CREATE TABLE t1 (
> +t1_int INT,
> +t1_time TIME
> +);
> +CREATE TABLE t2 ( 
> +t2_int int PRIMARY KEY,
> +t2_int2 INT
> +);
> +INSERT INTO t2 VALUES ();
> +INSERT INTO t1 VALUES ();
> +
> +SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +t1_int	t1_time
> +
> +EXPLAIN SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +2	SUBQUERY	t1b	system	NULL	NULL	NULL	NULL	1	
> +3	DEPENDENT SUBQUERY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +
> +DROP TABLE t1,t2;
>  set optimizer_switch=default;
>
> === modified file 'mysql-test/r/myisam_icp_none.result'
> --- a/mysql-test/r/myisam_icp_none.result	2010-12-13 15:22:45 +0000
> +++ b/mysql-test/r/myisam_icp_none.result	2011-01-07 14:06:38 +0000
> @@ -595,4 +595,55 @@ insert into t1 values ('',1);
>  select 1 from t1 where b <= 1 and a <> '';
>  1
>  drop table t1;
> +#
> +# Bug#58837: ICP crash or valgrind error due to uninitialized 
> +#            value in innobase_index_cond
> +#
> +CREATE TABLE t1 (
> +t1_int INT,
> +t1_time TIME
> +);
> +CREATE TABLE t2 ( 
> +t2_int int PRIMARY KEY,
> +t2_int2 INT
> +);
> +INSERT INTO t2 VALUES ();
> +INSERT INTO t1 VALUES ();
> +
> +SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +t1_int	t1_time
> +
> +EXPLAIN SELECT *
> +FROM t1 AS t1a 
> +WHERE NOT EXISTS
> +(SELECT *
> +FROM t1 AS t1b
> +WHERE t1b.t1_int NOT IN
> +(SELECT t2.t2_int 
> +FROM t2
> +WHERE t1b.t1_time LIKE t1b.t1_int
> +OR t1b.t1_time <> t2.t2_int2
> +AND 6=7 
> +)
> +)
> +;;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	PRIMARY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +2	SUBQUERY	t1b	system	NULL	NULL	NULL	NULL	1	
> +3	DEPENDENT SUBQUERY	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Impossible WHERE
> +
> +DROP TABLE t1,t2;
>  set optimizer_switch=default;
>
> === modified file 'sql/handler.h'
> --- a/sql/handler.h	2010-11-18 16:34:56 +0000
> +++ b/sql/handler.h	2011-01-07 14:06:38 +0000
> @@ -1556,6 +1556,7 @@ public:
>      DBUG_ENTER("ha_rnd_init");
>      DBUG_ASSERT(inited==NONE || (inited==RND && scan));
>      inited= (result= rnd_init(scan)) ? NONE: RND;
> +    end_range= NULL;
>      DBUG_RETURN(result);
>    }
>    int ha_rnd_end()
> @@ -1563,6 +1564,7 @@ public:
>      DBUG_ENTER("ha_rnd_end");
>      DBUG_ASSERT(inited==RND);
>      inited=NONE;
> +    end_range= NULL;
>      DBUG_RETURN(rnd_end());
>    }
>    int ha_rnd_next(uchar *buf);
>
>   
> ------------------------------------------------------------------------
>
>

Thread
bzr commit into mysql-trunk-bugfixing branch (jorgen.loland:3475) Bug#58837Jorgen Loland7 Jan
  • Re: bzr commit into mysql-trunk-bugfixing branch (jorgen.loland:3475)Bug#58837Olav Sandstaa9 Jan