Commit 09dfd9e7 authored by unknown's avatar unknown
Browse files

Merge bk-internal:/home/bk/mysql-5.0-opt

into  macbook.local:/Users/kgeorge/mysql/work/B22781-5.0-opt


sql/sql_select.cc:
  Auto merged
parents 9055f98e 45cad70f
Loading
Loading
Loading
Loading
+65 −2
Original line number Diff line number Diff line
@@ -303,10 +303,10 @@ spid sum(userid)
1	1
explain select sql_big_result score,count(*) from t1 group by score desc;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index	NULL	score	3	NULL	8	Using index
1	SIMPLE	t1	index	NULL	score	3	NULL	8	Using index; Using filesort
explain select sql_big_result score,count(*) from t1 group by score desc order by null;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index	NULL	score	3	NULL	8	Using index
1	SIMPLE	t1	index	NULL	score	3	NULL	8	Using index; Using filesort
select sql_big_result score,count(*) from t1 group by score desc;
score	count(*)
3	5
@@ -821,3 +821,66 @@ a b real_b
68	France	France
DROP VIEW v1;
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, key (b));
INSERT INTO t1 VALUES (1,      1);
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20) FROM t1;
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20) FROM t1;
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20) FROM t1;
SELECT MIN(b), MAX(b) from t1;
MIN(b)	MAX(b)
0	19
EXPLAIN SELECT b, sum(1) FROM t1 GROUP BY b;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index	NULL	b	5	NULL	128	Using index
EXPLAIN SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index	NULL	b	5	NULL	128	Using index; Using filesort
SELECT b, sum(1) FROM t1 GROUP BY b;
b	sum(1)
0	6
1	7
2	7
3	7
4	7
5	7
6	7
7	7
8	7
9	6
10	6
11	6
12	6
13	6
14	6
15	6
16	6
17	6
18	6
19	6
SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
b	sum(1)
0	6
1	7
2	7
3	7
4	7
5	7
6	7
7	7
8	7
9	6
10	6
11	6
12	6
13	6
14	6
15	6
16	6
17	6
18	6
19	6
DROP TABLE t1;
+16 −0
Original line number Diff line number Diff line
@@ -337,3 +337,19 @@ id select_type table type possible_keys key key_len ref rows Extra
1	SIMPLE	t2	index	NULL	fkey	5	NULL	5	Using index
1	SIMPLE	t1	eq_ref	PRIMARY	PRIMARY	4	test.t2.fkey	1	Using where
DROP TABLE t1,t2;
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB;
INSERT INTO t1 VALUES (    1 , 1              , 1);
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20), 1 FROM t1;
EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	index	NULL	b	5	NULL	128	
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	128	Using filesort
DROP TABLE t1;
+22 −0
Original line number Diff line number Diff line
@@ -655,3 +655,25 @@ where t2.b=v1.a GROUP BY t2.b;

DROP VIEW v1;
DROP TABLE t1,t2;

#
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
#
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, key (b));

INSERT INTO t1 VALUES (1,      1);
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20) FROM t1;
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20) FROM t1;
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20) FROM t1;
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20) FROM t1;

SELECT MIN(b), MAX(b) from t1;

EXPLAIN SELECT b, sum(1) FROM t1 GROUP BY b;
EXPLAIN SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
SELECT b, sum(1) FROM t1 GROUP BY b;
SELECT SQL_BIG_RESULT b, sum(1) FROM t1 GROUP BY b;
DROP TABLE t1;
+18 −0
Original line number Diff line number Diff line
@@ -302,3 +302,21 @@ SELECT COUNT(*) FROM t2 LEFT JOIN t1 ON t2.fkey = t1.id
  WHERE t1.name LIKE 'A%' OR FALSE;

DROP TABLE t1,t2;

#
# Bug#22781: SQL_BIG_RESULT fails to influence sort plan
#
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c FLOAT, KEY b(b)) ENGINE = INNODB;

INSERT INTO t1 VALUES (    1 , 1              , 1);
INSERT INTO t1 SELECT  a + 1 , MOD(a + 1 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 2 , MOD(a + 2 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 4 , MOD(a + 4 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 8 , MOD(a + 8 , 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 16, MOD(a + 16, 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 32, MOD(a + 32, 20), 1 FROM t1;
INSERT INTO t1 SELECT  a + 64, MOD(a + 64, 20), 1 FROM t1;

EXPLAIN SELECT b, SUM(c) FROM t1 GROUP BY b;
EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
DROP TABLE t1;
+10 −3
Original line number Diff line number Diff line
@@ -1400,6 +1400,7 @@ JOIN::exec()
      skip_sort_order= 0;
    }
    if (order && 
        (order != group_list || !(select_options & SELECT_BIG_RESULT)) &&
	(const_tables == tables ||
 	 ((simple_order || skip_sort_order) &&
	  test_if_skip_sort_order(&join_tab[const_tables], order,
@@ -11995,11 +11996,17 @@ create_sort_index(THD *thd, JOIN *join, ORDER *order,
  table=  tab->table;
  select= tab->select;

  if (test_if_skip_sort_order(tab,order,select_limit,0))
  /*
    When there is SQL_BIG_RESULT do not sort using index for GROUP BY,
    and thus force sorting on disk.
  */
  if ((order != join->group_list || 
       !(join->select_options & SELECT_BIG_RESULT)) &&
      test_if_skip_sort_order(tab,order,select_limit,0))
    DBUG_RETURN(0);
  if (!(sortorder=make_unireg_sortorder(order,&length)))
    goto err;				/* purecov: inspected */
  /* It's not fatal if the following alloc fails */

  table->sort.io_cache=(IO_CACHE*) my_malloc(sizeof(IO_CACHE),
                                             MYF(MY_WME | MY_ZEROFILL));
  table->status=0;				// May be wrong if quick_select
+8 −8

File changed.

Contains only whitespace changes.

+36 −36

File changed.

Contains only whitespace changes.

+8 −8

File changed.

Contains only whitespace changes.

Loading