Commit 308da651 authored by unknown's avatar unknown
Browse files

Bug#12122: The MERGE algorithm isn't applicable if the ORDER BY clause is

present.

A view created with CREATE VIEW ... ORDER BY ... cannot be resolved with
the MERGE algorithm, even when no other part of the CREATE VIEW statement
would require the view to be resolved using the TEMPTABLE algorithm.

The check for presence of the ORDER BY clause in the underlying select is 
removed from the st_lex::can_be_merged() function.
The ORDER BY list of the underlying select is appended to the ORDER BY list 


mysql-test/t/view.test:
  Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
mysql-test/r/view.result:
  Added a test case for bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
sql/sql_lex.cc:
  Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
  The st_lex::can_be_merged() function now allows views with the ORDER BY
  clause to be resolved using MERGE algorithm. The ORDER BY list of the view 
  is appended to the ORDER BY list of the embedding select.
parent 762aa1c0
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -3078,4 +3078,43 @@ b
2
DROP VIEW v1;
DROP TABLE t1,t2;
create table t1(f1 int, f2 int);
insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2);
select * from t1;
f1	f2
1	2
1	3
1	1
2	3
2	1
2	2
create view v1 as select * from t1 order by f2;
select * from v1;
f1	f2
1	1
2	1
1	2
2	2
1	3
2	3
explain extended select * from v1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	6	Using filesort
Warnings:
Note	1003	select `test`.`t1`.`f1` AS `f1`,`test`.`t1`.`f2` AS `f2` from `test`.`t1` order by `test`.`t1`.`f2`
select * from v1 order by f1;
f1	f2
1	1
1	2
1	3
2	1
2	2
2	3
explain extended select * from v1 order by f1;
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	t1	ALL	NULL	NULL	NULL	NULL	6	Using filesort
Warnings:
Note	1003	select `test`.`t1`.`f1` AS `f1`,`test`.`t1`.`f2` AS `f2` from `test`.`t1` order by `test`.`t1`.`f1`,`test`.`t1`.`f2`
drop view v1;
drop table t1;
End of 5.0 tests.
+14 −0
Original line number Diff line number Diff line
@@ -3024,4 +3024,18 @@ SELECT * FROM t2;
DROP VIEW v1;
DROP TABLE t1,t2;

#
# Bug#12122: Views with ORDER BY can't be resolved using MERGE algorithm.
#
create table t1(f1 int, f2 int);
insert into t1 values(1,2),(1,3),(1,1),(2,3),(2,1),(2,2);
select * from t1;
create view v1 as select * from t1 order by f2;
select * from v1;
explain extended select * from v1;
select * from v1 order by f1;
explain extended select * from v1 order by f1;
drop view v1;
drop table t1;

--echo End of 5.0 tests.
+0 −1
Original line number Diff line number Diff line
@@ -1751,7 +1751,6 @@ bool st_lex::can_be_merged()
  }

  return (selects_allow_merge &&
	  select_lex.order_list.elements == 0 &&
	  select_lex.group_list.elements == 0 &&
	  select_lex.having == 0 &&
          select_lex.with_sum_func == 0 &&