diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index 7dc03a31878..38a8e0368c6 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -841,4 +841,13 @@ ROW(1, 1, 'a') IN (select b,a,c from t where c='b' or c='a') 1 select ROW(1, 1, 'a') IN (select b,a,c from t limit 2); This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' -drop table if exists t; +drop table t; +create table t (a int); +insert into t values (1); +do @a:=(SELECT a from t); +select @a; +@a +1 +drop table t; +do (SELECT a from t); +Table 'test.t' doesn't exist diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index ba9491125a4..de07df1905b 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -462,4 +462,12 @@ select ROW(1, 2, 'a') IN (select a,b,c from t where c='b' or c='a'); select ROW(1, 1, 'a') IN (select b,a,c from t where c='b' or c='a'); -- error 1235 select ROW(1, 1, 'a') IN (select b,a,c from t limit 2); -drop table if exists t; +drop table t; + +create table t (a int); +insert into t values (1); +do @a:=(SELECT a from t); +select @a; +drop table t; +-- error 1146 +do (SELECT a from t); diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 071904582fe..e74c7e35328 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -1609,7 +1609,14 @@ mysql_execute_command(THD *thd) break; } case SQLCOM_DO: - res=mysql_do(thd, *lex->insert_list); + if (tables && ((res= check_table_access(thd, SELECT_ACL, tables)) || + (res= open_and_lock_tables(thd,tables)))) + break; + + fix_tables_pointers(lex->all_selects_list); + res= mysql_do(thd, *lex->insert_list); + if (thd->net.report_error) + res= -1; break; case SQLCOM_EMPTY_QUERY: