diff --git a/mysql-test/r/sp-row.result b/mysql-test/r/sp-row.result index c3204fe043b..61c0660cf71 100644 --- a/mysql-test/r/sp-row.result +++ b/mysql-test/r/sp-row.result @@ -2246,3 +2246,13 @@ b 10 DROP PROCEDURE p1; DROP TABLE t1; +# +# MDEV-13527 Crash when EXPLAIN SELECT .. INTO row_sp_variable.field +# +BEGIN NOT ATOMIC +DECLARE a ROW(a INT); +EXPLAIN SELECT 1 INTO a.a; +END; +$$ +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used diff --git a/mysql-test/suite/compat/oracle/r/sp-row.result b/mysql-test/suite/compat/oracle/r/sp-row.result index 86b6b9a530b..16421cd45ac 100644 --- a/mysql-test/suite/compat/oracle/r/sp-row.result +++ b/mysql-test/suite/compat/oracle/r/sp-row.result @@ -3070,3 +3070,14 @@ b 10 DROP PROCEDURE p1; DROP TABLE t1; +# +# MDEV-13527 Crash when EXPLAIN SELECT .. INTO row_sp_variable.field +# +DECLARE +a ROW(a INT); +BEGIN +EXPLAIN SELECT 1 INTO a.a; +END; +$$ +id select_type table type possible_keys key key_len ref rows Extra +1 SIMPLE NULL NULL NULL NULL NULL NULL NULL No tables used diff --git a/mysql-test/suite/compat/oracle/t/sp-row.test b/mysql-test/suite/compat/oracle/t/sp-row.test index 5d97bf02fa2..94cc5db9802 100644 --- a/mysql-test/suite/compat/oracle/t/sp-row.test +++ b/mysql-test/suite/compat/oracle/t/sp-row.test @@ -2375,3 +2375,16 @@ DELIMITER ;$$ CALL p1; DROP PROCEDURE p1; DROP TABLE t1; + +--echo # +--echo # MDEV-13527 Crash when EXPLAIN SELECT .. INTO row_sp_variable.field +--echo # + +DELIMITER $$; +DECLARE + a ROW(a INT); +BEGIN + EXPLAIN SELECT 1 INTO a.a; +END; +$$ +DELIMITER ;$$ diff --git a/mysql-test/t/sp-row.test b/mysql-test/t/sp-row.test index 6ed8b4495f4..e213d4dbc2d 100644 --- a/mysql-test/t/sp-row.test +++ b/mysql-test/t/sp-row.test @@ -1471,3 +1471,16 @@ DELIMITER ;$$ CALL p1; DROP PROCEDURE p1; DROP TABLE t1; + + +--echo # +--echo # MDEV-13527 Crash when EXPLAIN SELECT .. INTO row_sp_variable.field +--echo # + +DELIMITER $$; +BEGIN NOT ATOMIC + DECLARE a ROW(a INT); + EXPLAIN SELECT 1 INTO a.a; +END; +$$ +DELIMITER ;$$ diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 49eda48c451..56b434229e2 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -12155,7 +12155,7 @@ select_outvar: } | ident '.' ident { - if (!($$= Lex->create_outvar(thd, &$1, &$3))) + if (!($$= Lex->create_outvar(thd, &$1, &$3)) && Lex->result) MYSQL_YYABORT; } ; diff --git a/sql/sql_yacc_ora.yy b/sql/sql_yacc_ora.yy index 80c9375e777..660212dd4b0 100644 --- a/sql/sql_yacc_ora.yy +++ b/sql/sql_yacc_ora.yy @@ -12218,7 +12218,7 @@ select_outvar: } | ident '.' ident { - if (!($$= Lex->create_outvar(thd, &$1, &$3))) + if (!($$= Lex->create_outvar(thd, &$1, &$3)) && Lex->result) MYSQL_YYABORT; } ;