summaryrefslogtreecommitdiff
path: root/sql/sql_explain.cc
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2014-12-06 19:27:42 +0300
committerSergei Petrunia <psergey@askmonty.org>2014-12-06 19:27:42 +0300
commitdc259324d767e10f118c2d14dc905e1bb54aa58a (patch)
tree05457081ff73b28034d7b5088a2c56e9e67730f3 /sql/sql_explain.cc
parent5ee1c25fa8043f81ad744d1c532b8c1dafa3b5ea (diff)
downloadmariadb-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.cc29
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();
}