diff --git a/mysql-test/r/derived_view.result b/mysql-test/r/derived_view.result index 0278c36b557..cd582f8ae9b 100644 --- a/mysql-test/r/derived_view.result +++ b/mysql-test/r/derived_view.result @@ -2224,7 +2224,7 @@ DROP VIEW v; DROP TABLE t1,t2; # # mdev-5105: memory overwrite in multi-table update -# using natuaral join with a view +# using natural join with a view # create table t1(a int,b tinyint,c tinyint)engine=myisam; create table t2(a tinyint,b float,c int, d int, e int, f int, key (b), key(c), key(d), key(e), key(f))engine=myisam; @@ -2234,6 +2234,19 @@ update t3 natural join v1 set a:=1; drop view v1; drop table t1,t2,t3; # +# mdev-5288: assertion failure for query over a view with ORDER BY +# +CREATE TABLE t1 (a int, b int) ENGINE=MyISAM; +INSERT INTO t1 VALUES (4,1); +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +EXPLAIN EXTENDED SELECT a FROM v1 WHERE a > 100 ORDER BY b; +id select_type table type possible_keys key key_len ref rows filtered Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables +Warnings: +Note 1003 select 4 AS `a` from `test`.`t1` where (4 > 100) order by 1 +DROP VIEW v1; +DROP TABLE t1; +# # end of 5.3 tests # set optimizer_switch=@exit_optimizer_switch; diff --git a/mysql-test/t/derived_view.test b/mysql-test/t/derived_view.test index 8d1b3109d20..3da58d8ae23 100644 --- a/mysql-test/t/derived_view.test +++ b/mysql-test/t/derived_view.test @@ -1566,7 +1566,7 @@ DROP TABLE t1,t2; --echo # --echo # mdev-5105: memory overwrite in multi-table update ---echo # using natuaral join with a view +--echo # using natural join with a view --echo # create table t1(a int,b tinyint,c tinyint)engine=myisam; @@ -1578,6 +1578,19 @@ update t3 natural join v1 set a:=1; drop view v1; drop table t1,t2,t3; +--echo # +--echo # mdev-5288: assertion failure for query over a view with ORDER BY +--echo # + +CREATE TABLE t1 (a int, b int) ENGINE=MyISAM; +INSERT INTO t1 VALUES (4,1); + +CREATE ALGORITHM=MERGE VIEW v1 AS SELECT * FROM t1; +EXPLAIN EXTENDED SELECT a FROM v1 WHERE a > 100 ORDER BY b; + +DROP VIEW v1; +DROP TABLE t1; + --echo # --echo # end of 5.3 tests --echo # diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index e8c795e9c54..8ba3c671598 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -3534,7 +3534,7 @@ void SELECT_LEX::update_used_tables() } for (ORDER *order= group_list.first; order; order= order->next) (*order->item)->update_used_tables(); - if (master_unit()->global_parameters != this) + if (!master_unit()->is_union() || master_unit()->global_parameters != this) { for (ORDER *order= order_list.first; order; order= order->next) (*order->item)->update_used_tables();