summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
authorSergei Petrunia <sergey@mariadb.com>2022-04-04 12:32:22 +0300
committerSergei Petrunia <sergey@mariadb.com>2022-04-29 10:48:26 +0300
commit3f68c2169e16814e8e268d0f9a9f29aee522453e (patch)
treec510410cc65f3943c4ed69fd7e93ee9804cc9cb5 /sql/sql_base.cc
parent02c3babdec0c931c6983863bff129114f750bd22 (diff)
downloadmariadb-git-3f68c2169e16814e8e268d0f9a9f29aee522453e.tar.gz
MDEV-28201: Server crashes upon SHOW ANALYZE/EXPLAIN FORMAT=JSON
- Describe the lifetime of EXPLAIN data structures in sql_explain.h:ExplainDataStructureLifetime. - Make Item_field::set_field() call set_refers_to_temp_table() when it refers to a temp. table. - Introduce QT_DONT_ACCESS_TMP_TABLES flag for Item::print. It directs Item_field::print to not try access its the temp table. - Introduce Explain_query::notify_tables_are_closed() and call it right before the query closes its tables. - Make Explain data stuctures' print_explain_json() methods accept "no_tmp_tbl" parameter which means pass QT_DONT_ACCESS_TMP_TABLES when printing items. - Make Show_explain_request::call_in_target_thread() not call set_current_thd(). This wasn't needed as the code inside lex->print_explain() uses output->thd anyway. output->thd refers to the SHOW command's THD object.
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc12
1 files changed, 12 insertions, 0 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 1555e19b346..cb674c62ea2 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -759,6 +759,18 @@ close_all_tables_for_name(THD *thd, TABLE_SHARE *share,
}
+int close_thread_tables_for_query(THD *thd)
+{
+ if (thd->lex && thd->lex->explain)
+ thd->lex->explain->notify_tables_are_closed();
+
+ DBUG_EXECUTE_IF("explain_notify_tables_are_closed",
+ if (dbug_user_var_equals_str(thd, "show_explain_probe_query",
+ thd->query()))
+ dbug_serve_apcs(thd, 1);
+ );
+ return close_thread_tables(thd);
+}
/*
Close all tables used by the current substatement, or all tables
used by this thread if we are on the upper level.