diff --git a/mysql-test/r/analyze_stmt.result b/mysql-test/r/analyze_stmt.result index 41fdce43807..6f9bdb11fc1 100644 --- a/mysql-test/r/analyze_stmt.result +++ b/mysql-test/r/analyze_stmt.result @@ -197,3 +197,21 @@ select * from t1; a b 6 6 drop table t0, t1; +# +# MDEV-6393: ANALYZE SELECT crashes in Explain_query::print_explain with a non-existing column +# +create table t1 (i int); +insert into t1 values (1),(2); +analyze select a from t1; +ERROR 42S22: Unknown column 'a' in 'field list' +analyze delete from t1 where a=2; +ERROR 42S22: Unknown column 'a' in 'where clause' +analyze update t1 set a=2; +ERROR 42S22: Unknown column 'a' in 'field list' +create table t2 like t1; +insert into t2 select * from t1; +analyze update t2,t1 set t2.i=5 where t2.a=t1.a; +ERROR 42S22: Unknown column 't2.a' in 'where clause' +analyze delete t1 from t2,t1 where t2.a=t1.a; +ERROR 42S22: Unknown column 't2.a' in 'where clause' +drop table t1,t2; diff --git a/mysql-test/t/analyze_stmt.test b/mysql-test/t/analyze_stmt.test index 2f9de4a3763..d310ab2a3fb 100644 --- a/mysql-test/t/analyze_stmt.test +++ b/mysql-test/t/analyze_stmt.test @@ -146,3 +146,28 @@ select * from t1; drop table t0, t1; +--echo # +--echo # MDEV-6393: ANALYZE SELECT crashes in Explain_query::print_explain with a non-existing column +--echo # +create table t1 (i int); +insert into t1 values (1),(2); +--error ER_BAD_FIELD_ERROR +analyze select a from t1; + +--error ER_BAD_FIELD_ERROR +analyze delete from t1 where a=2; + +--error ER_BAD_FIELD_ERROR +analyze update t1 set a=2; + +create table t2 like t1; +insert into t2 select * from t1; + +--error ER_BAD_FIELD_ERROR +analyze update t2,t1 set t2.i=5 where t2.a=t1.a; + +--error ER_BAD_FIELD_ERROR +analyze delete t1 from t2,t1 where t2.a=t1.a; + +drop table t1,t2; + diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 5e305bd4541..e9be2b284a9 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -5282,7 +5282,8 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables) return 1; delete thd->protocol; thd->protocol= save_protocol; - thd->lex->explain->send_explain(thd); + if (!res) + thd->lex->explain->send_explain(thd); if (result != lex->result) delete result;