diff options
Diffstat (limited to 'sql/sql_explain.cc')
| -rw-r--r-- | sql/sql_explain.cc | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 9b474fd5dee..59c70849709 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -33,7 +33,8 @@ static void write_item(Json_writer *writer, Item *item); static void append_item_to_str(String *out, Item *item); Explain_query::Explain_query(THD *thd_arg, MEM_ROOT *root) : - mem_root(root), upd_del_plan(NULL), insert_plan(NULL), + mem_root(root), sp_tracker(NULL), + upd_del_plan(NULL), insert_plan(NULL), unions(root), selects(root), thd(thd_arg), apc_enabled(false), operations(0) { @@ -59,6 +60,8 @@ Explain_query::~Explain_query() delete upd_del_plan; delete insert_plan; + + delete sp_tracker; uint i; for (i= 0 ; i < unions.elements(); i++) delete unions.at(i); @@ -144,6 +147,13 @@ void Explain_query::add_upd_del_plan(Explain_update *upd_del_plan_arg) void Explain_query::query_plan_ready() { + // Q: the below doesn't look stellar module-wise. + if (current_thd->lex->analyze_stmt) + { + // Tracking is only done when running ANALYZE. + sp_tracker= new Stored_routine_tracker(); + } + if (!apc_enabled) thd->apc_target.enable(); apc_enabled= true; @@ -224,6 +234,9 @@ void Explain_query::print_explain_json(select_result_sink *output, node->print_explain_json(this, &writer, is_analyze); } + if (sp_tracker) + sp_tracker->print_json_members(&writer); + writer.end_object(); CHARSET_INFO *cs= system_charset_info; |
