summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorRucha Deodhar <rucha.deodhar@mariadb.com>2021-04-26 17:11:51 +0530
committerRucha Deodhar <rucha.deodhar@mariadb.com>2021-04-26 17:11:51 +0530
commitf73166cded0ee5a3b8615d16a0d91dfd8e867dba (patch)
tree21a10d71e7ef63e8a718bfc8540745c1f7167e1b /sql
parent54c460ace606157f2a23706ec98e9de70aba767e (diff)
downloadmariadb-git-bb-10.3-MDEV-25462.tar.gz
MDEV-25462: Assertion `m_status == DA_ERROR || m_status == DA_OK ||bb-10.3-MDEV-25462
m_status == DA_OK_BULK' failed in Diagnostics_area::message from get_schema_tables_record Analysis: When parsing takes place and we get ER_PARSE_ERROR, error is not set because we assume we are parsing a stored procedure. Fix: Set error status if error is ER_PARSE_ERROR and we are not parsing a stored procedure.
Diffstat (limited to 'sql')
-rw-r--r--sql/sp.cc1
-rw-r--r--sql/sql_class.h1
-rw-r--r--sql/sql_parse.cc1
-rw-r--r--sql/sql_show.cc2
4 files changed, 4 insertions, 1 deletions
diff --git a/sql/sp.cc b/sql/sp.cc
index ac9203ffb8a..4696ab8f0ae 100644
--- a/sql/sp.cc
+++ b/sql/sp.cc
@@ -870,6 +870,7 @@ static sp_head *sp_compile(THD *thd, String *defstr, sql_mode_t sql_mode,
thd->lex->sphead= parent;
thd->push_internal_handler(&warning_handler);
thd->spcont= 0;
+ thd->is_parsing_IS_table=true;
if (parse_sql(thd, & parser_state, creation_ctx) || thd->lex == NULL)
{
diff --git a/sql/sql_class.h b/sql/sql_class.h
index c9967b98994..d43b49d56d4 100644
--- a/sql/sql_class.h
+++ b/sql/sql_class.h
@@ -2814,6 +2814,7 @@ public:
bool create_tmp_table_for_derived;
bool save_prep_leaf_list;
+ bool is_parsing_IS_table;
/* container for handler's private per-connection data */
Ha_data ha_data[MAX_HA];
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 98a437c5991..e4888bee6fd 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -7586,6 +7586,7 @@ void THD::reset_for_next_command(bool do_clear_error)
get_stmt_da()->reset_for_next_command();
rand_used= 0;
m_sent_row_count= m_examined_row_count= 0;
+ is_parsing_IS_table=false;
accessed_rows_and_keys= 0;
reset_slow_query_state();
diff --git a/sql/sql_show.cc b/sql/sql_show.cc
index 38b3d62d539..7ed4c3b5696 100644
--- a/sql/sql_show.cc
+++ b/sql/sql_show.cc
@@ -5045,7 +5045,7 @@ public:
const char* msg, Sql_condition ** cond_hdl)
{
if (sql_errno == ER_TRG_NO_DEFINER || sql_errno == ER_TRG_NO_CREATION_CTX
- || sql_errno == ER_PARSE_ERROR)
+ || (sql_errno == ER_PARSE_ERROR && thd->is_parsing_IS_table))
return true;
if (*level != Sql_condition::WARN_LEVEL_ERROR)