diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2014-12-06 19:27:42 +0300 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2014-12-06 19:27:42 +0300 |
commit | dc259324d767e10f118c2d14dc905e1bb54aa58a (patch) | |
tree | 05457081ff73b28034d7b5088a2c56e9e67730f3 /sql/sql_explain.cc | |
parent | 5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea (diff) | |
download | mariadb-git-dc259324d767e10f118c2d14dc905e1bb54aa58a.tar.gz |
EXPLAIN JSON: Print out the "expensive constant condition" attached to joins.
Diffstat (limited to 'sql/sql_explain.cc')
-rw-r--r-- | sql/sql_explain.cc | 29 |
1 files changed, 25 insertions, 4 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 800f2ce309b..c68f86ce72c 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -27,6 +27,8 @@ const char * STR_DELETING_ALL_ROWS= "Deleting all rows"; const char * STR_IMPOSSIBLE_WHERE= "Impossible WHERE"; const char * STR_NO_ROWS_AFTER_PRUNING= "No matching rows after partition pruning"; +static void write_item(Json_writer *writer, Item *item); + Explain_query::Explain_query(THD *thd_arg, MEM_ROOT *root) : mem_root(root), upd_del_plan(NULL), insert_plan(NULL), unions(root), selects(root), thd(thd_arg), apc_enabled(false), @@ -732,7 +734,17 @@ void Explain_select::print_explain_json(Explain_query *query, Explain_basic_join does not have ORDER/GROUP. A: factor out join tab printing loop into a common func. */ - Explain_basic_join::print_explain_json(query, writer, is_analyze); + writer->add_member("query_block").start_object(); + writer->add_member("select_id").add_ll(select_id); + + if (exec_const_cond) + { + writer->add_member("const_condition"); + write_item(writer, exec_const_cond); + } + + Explain_basic_join::print_explain_json_interns(query, writer, is_analyze); + writer->end_object(); } } @@ -742,10 +754,20 @@ void Explain_basic_join::print_explain_json(Explain_query *query, Json_writer *writer, bool is_analyze) { - Json_writer_nesting_guard guard(writer); - writer->add_member("query_block").start_object(); writer->add_member("select_id").add_ll(select_id); + + print_explain_json_interns(query, writer, is_analyze); + + writer->end_object(); +} + + +void Explain_basic_join::print_explain_json_interns(Explain_query *query, + Json_writer *writer, + bool is_analyze) +{ + Json_writer_nesting_guard guard(writer); for (uint i=0; i< n_join_tabs; i++) { if (join_tabs[i]->start_dups_weedout) @@ -757,7 +779,6 @@ void Explain_basic_join::print_explain_json(Explain_query *query, writer->end_object(); } print_explain_json_for_children(query, writer, is_analyze); - writer->end_object(); } |