← Back to team overview

maria-developers team mailing list archive

Re: [Commits] Rev 2935: Fixed LP bugs BUG#729067/730466. in file:///home/igor/maria/maria-5.3-bug729067/

 

Hi!

Ok to push.


12 марта 2011, в 10:49, Igor Babaev написал(а):

> At file:///home/igor/maria/maria-5.3-bug729067/
> 
> ------------------------------------------------------------
> revno: 2935
> revision-id: igor@xxxxxxxxxxxx-20110312084903-b9mmi2wdgbdar3tc
> parent: timour@xxxxxxxxxxxx-20110308212344-7r4ue17b3rxschlj
> committer: Igor Babaev <igor@xxxxxxxxxxxx>
> branch nick: maria-5.3-bug729067
> timestamp: Sat 2011-03-12 00:49:03 -0800
> message:
>  Fixed LP bugs BUG#729067/730466.
>  Do not reset the value of the item_equal field in the Item_field object
>  once it has been set.
> === modified file 'mysql-test/r/join.result'
> --- a/mysql-test/r/join.result	2011-02-28 21:29:59 +0000
> +++ b/mysql-test/r/join.result	2011-03-12 08:49:03 +0000
> @@ -1285,3 +1285,38 @@
> 1	1	1	1	1
> 1	1	1	1	1
> drop table t1,t2,t3;
> +#
> +# BUG#729067/730466: unexpected 'Range checked for each record'
> +#                    for queries with OR in WHERE clause 
> +#
> +CREATE TABLE t1 (f1 int, f2 int) ;
> +INSERT INTO t1 VALUES (4,0),(5,1);
> +CREATE TABLE t2 (f1 int, f2 int, KEY (f2)) ;
> +INSERT INTO t2 VALUES (5,7), (8,9);
> +EXPLAIN
> +SELECT * FROM t1 STRAIGHT_JOIN t2 ON t2.f1 = t1.f1
> +WHERE t1.f1<>0 OR t1.f2<>0 AND t1.f1 = t2.f2;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	2	Using where
> +1	SIMPLE	t2	ALL	f2	NULL	NULL	NULL	2	Using where; Using join buffer (flat, BNL join)
> +SELECT * FROM t1 STRAIGHT_JOIN t2 ON t2.f1 = t1.f1
> +WHERE t1.f1<>0 OR t1.f2<>0 AND t1.f1 = t2.f2;
> +f1	f2	f1	f2
> +5	1	5	7
> +DROP TABLE t1,t2;
> +CREATE TABLE t1(f1 int PRIMARY KEY, f2 int) ;
> +INSERT INTO t1 VALUES (9,4), (10,9);
> +CREATE TABLE t2(f1 int PRIMARY KEY, f2 int) ;
> +INSERT INTO t2 VALUES (9,4), (10,9);
> +EXPLAIN
> +SELECT STRAIGHT_JOIN * FROM t1 JOIN t2 ON t2.f2 = t1.f1
> +WHERE t1.f1 IN (SELECT f1 FROM t1) AND t1.f1 = t2.f1 OR t1.f1 = 9;
> +id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
> +1	PRIMARY	t1	ALL	PRIMARY	NULL	NULL	NULL	2	Using where
> +1	PRIMARY	t2	ALL	PRIMARY	NULL	NULL	NULL	2	Using where; Using join buffer (flat, BNL join)
> +2	SUBQUERY	t1	index	NULL	PRIMARY	4	NULL	2	Using index
> +SELECT STRAIGHT_JOIN * FROM t1 JOIN t2 ON t2.f2 = t1.f1
> +WHERE t1.f1 IN (SELECT f1 FROM t1) AND t1.f1 = t2.f1 OR t1.f1 = 9;
> +f1	f2	f1	f2
> +9	4	10	9
> +DROP TABLE t1,t2;
> 
> === modified file 'mysql-test/t/join.test'
> --- a/mysql-test/t/join.test	2011-02-28 21:29:59 +0000
> +++ b/mysql-test/t/join.test	2011-03-12 08:49:03 +0000
> @@ -964,3 +964,36 @@
> 
> drop table t1,t2,t3;
> 
> +--echo #
> +--echo # BUG#729067/730466: unexpected 'Range checked for each record'
> +--echo #                    for queries with OR in WHERE clause 
> +--echo #
> +
> +CREATE TABLE t1 (f1 int, f2 int) ;
> +INSERT INTO t1 VALUES (4,0),(5,1);
> +
> +CREATE TABLE t2 (f1 int, f2 int, KEY (f2)) ;
> +INSERT INTO t2 VALUES (5,7), (8,9);
> +
> +EXPLAIN
> +SELECT * FROM t1 STRAIGHT_JOIN t2 ON t2.f1 = t1.f1
> +  WHERE t1.f1<>0 OR t1.f2<>0 AND t1.f1 = t2.f2;
> +SELECT * FROM t1 STRAIGHT_JOIN t2 ON t2.f1 = t1.f1
> +  WHERE t1.f1<>0 OR t1.f2<>0 AND t1.f1 = t2.f2;
> +
> +DROP TABLE t1,t2;
> +
> +CREATE TABLE t1(f1 int PRIMARY KEY, f2 int) ;
> +INSERT INTO t1 VALUES (9,4), (10,9);
> +
> +CREATE TABLE t2(f1 int PRIMARY KEY, f2 int) ;
> +INSERT INTO t2 VALUES (9,4), (10,9);
> +
> +EXPLAIN
> +SELECT STRAIGHT_JOIN * FROM t1 JOIN t2 ON t2.f2 = t1.f1
> +  WHERE t1.f1 IN (SELECT f1 FROM t1) AND t1.f1 = t2.f1 OR t1.f1 = 9;
> +SELECT STRAIGHT_JOIN * FROM t1 JOIN t2 ON t2.f2 = t1.f1
> +  WHERE t1.f1 IN (SELECT f1 FROM t1) AND t1.f1 = t2.f1 OR t1.f1 = 9;
> +
> +DROP TABLE t1,t2;
> +
> 
> === modified file 'sql/item_cmpfunc.cc'
> --- a/sql/item_cmpfunc.cc	2011-02-06 04:57:03 +0000
> +++ b/sql/item_cmpfunc.cc	2011-03-12 08:49:03 +0000
> @@ -5723,7 +5723,8 @@
>     not_null_tables_cache|= tmp_table_map;
>     if (item->maybe_null)
>       maybe_null=1;
> -    item->item_equal= this;
> +    if (!item->item_equal)
> +      item->item_equal= this;
>   }
>   fix_length_and_dec();
>   fixed= 1;
> 
> _______________________________________________
> commits mailing list
> commits@xxxxxxxxxxx
> https://lists.askmonty.org/cgi-bin/mailman/listinfo/commits