diff options
-rw-r--r-- | mysql-test/r/derived.result | 25 | ||||
-rw-r--r-- | mysql-test/t/derived.test | 34 | ||||
-rw-r--r-- | sql/sql_lex.cc | 3 |
3 files changed, 57 insertions, 5 deletions
diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index 363a4700ee6..c94618a9497 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -417,6 +417,29 @@ MIN(i) DROP TABLE t1; # End of 5.0 tests # +# MDEV-5005: Subquery in Procedure somehow affecting temporary table +# +create temporary table if not exists t1 (id int not null); +select A.* from ( select tt.* from t1 tt ) A; +id +prepare stmt from "select A.* from ( select tt.* from t1 tt ) A "; +execute stmt; +id +deallocate prepare stmt; +drop temporary table t1; +CREATE PROCEDURE p () +BEGIN +select A.* from ( select tt.* from t1 tt ) A ; +END | +create temporary table if not exists t1 (id int not null); +CALL p(); +id +CALL p(); +id +drop procedure p; +drop temporary table t1; +# End of 5.3 tests +# # Bug#58730 Assertion failed: table->key_read == 0 in close_thread_table, # temptable views # @@ -440,7 +463,6 @@ SELECT 1 FROM t1 JOIN v1 ON 1 > (SELECT 1 FROM v2); ERROR 21000: Subquery returns more than 1 row DROP TABLE t1, t2; DROP VIEW v1, v2; -set optimizer_switch=@save_derived_optimizer_switch; create table t1 (n bigint(20) unsigned, d1 datetime, d2 datetime, key (d1)); insert t1 values (2085,'2012-01-01 00:00:00','2013-01-01 00:00:00'); insert t1 values (2084,'2012-02-01 00:00:00','2013-01-01 00:00:00'); @@ -454,3 +476,4 @@ n d1 d2 result 2085 2012-01-01 00:00:00 2013-01-01 00:00:00 0 2084 2012-02-01 00:00:00 2013-01-01 00:00:00 0 drop table t1; +set optimizer_switch=@save_derived_optimizer_switch; diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test index 381c87c635c..bcbe995341a 100644 --- a/mysql-test/t/derived.test +++ b/mysql-test/t/derived.test @@ -320,6 +320,37 @@ DROP TABLE t1; --echo # End of 5.0 tests +--echo # +--echo # MDEV-5005: Subquery in Procedure somehow affecting temporary table +--echo # + +create temporary table if not exists t1 (id int not null); + +select A.* from ( select tt.* from t1 tt ) A; + +prepare stmt from "select A.* from ( select tt.* from t1 tt ) A "; +execute stmt; +deallocate prepare stmt; + +drop temporary table t1; + +--delimiter | +CREATE PROCEDURE p () +BEGIN + select A.* from ( select tt.* from t1 tt ) A ; +END | +--delimiter ; + +create temporary table if not exists t1 (id int not null); + +CALL p(); +CALL p(); + +drop procedure p; + +drop temporary table t1; + +--echo # End of 5.3 tests --echo # --echo # Bug#58730 Assertion failed: table->key_read == 0 in close_thread_table, @@ -342,7 +373,6 @@ SELECT 1 FROM t1 JOIN v1 ON 1 > (SELECT 1 FROM v2); DROP TABLE t1, t2; DROP VIEW v1, v2; -set optimizer_switch=@save_derived_optimizer_switch; # # MDEV-614 lp:1050806 - different result for a query using subquery between 5.5.25 and 5.5.27 @@ -358,3 +388,5 @@ select * from ( where d1 < '2012-12-12 12:12:12' and n in (2085, 2084) order by d2 asc ) as calculated_result; drop table t1; + +set optimizer_switch=@save_derived_optimizer_switch; diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 9b22662fd64..55381da1ccd 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -3769,10 +3769,7 @@ void SELECT_LEX::mark_as_belong_to_derived(TABLE_LIST *derived) TABLE_LIST *tl; List_iterator<TABLE_LIST> ti(leaf_tables); while ((tl= ti++)) - { - tl->open_type= OT_BASE_ONLY; tl->belong_to_derived= derived; - } } |