summaryrefslogtreecommitdiff
path: root/sql/sql_explain.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_explain.cc')
-rw-r--r--sql/sql_explain.cc45
1 files changed, 28 insertions, 17 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc
index e9bdc4be66f..e49ba0da11c 100644
--- a/sql/sql_explain.cc
+++ b/sql/sql_explain.cc
@@ -25,6 +25,8 @@
#include "opt_range.h"
#include "sql_expression_cache.h"
+#include <stack>
+
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";
@@ -41,7 +43,7 @@ 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), upd_del_plan(nullptr), insert_plan(nullptr),
unions(root), selects(root), thd(thd_arg), apc_enabled(false),
operations(0)
{
@@ -1090,14 +1092,13 @@ void Explain_aggr_window_funcs::print_json_members(Json_writer *writer,
{
Explain_aggr_filesort *srt;
List_iterator<Explain_aggr_filesort> it(sorts);
- writer->add_member("sorts").start_object();
+ Json_writer_array sorts(writer, "sorts");
while ((srt= it++))
{
- writer->add_member("filesort").start_object();
+ Json_writer_object sort(writer);
+ Json_writer_object filesort(writer, "filesort");
srt->print_json_members(writer, is_analyze);
- writer->end_object(); // filesort
}
- writer->end_object(); // sorts
}
@@ -1119,17 +1120,26 @@ 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)
- writer->add_member("duplicates_removal").start_object();
+ Json_writer_array loop(writer, "nested_loop");
+ for (uint i=0; i< n_join_tabs; i++)
+ {
+ if (join_tabs[i]->start_dups_weedout)
+ {
+ writer->start_object();
+ writer->add_member("duplicates_removal");
+ writer->start_array();
+ }
- join_tabs[i]->print_explain_json(query, writer, is_analyze);
+ join_tabs[i]->print_explain_json(query, writer, is_analyze);
- if (join_tabs[i]->end_dups_weedout)
- writer->end_object();
- }
+ if (join_tabs[i]->end_dups_weedout)
+ {
+ writer->end_array();
+ writer->end_object();
+ }
+ }
+ } // "nested_loop"
print_explain_json_for_children(query, writer, is_analyze);
}
@@ -1714,7 +1724,7 @@ void Explain_table_access::print_explain_json(Explain_query *query,
Json_writer *writer,
bool is_analyze)
{
- Json_writer_nesting_guard guard(writer);
+ Json_writer_object jsobj(writer);
if (pre_join_sort)
{
@@ -2133,14 +2143,15 @@ void Explain_quick_select::print_json(Json_writer *writer)
}
else
{
- writer->add_member(get_name_by_type()).start_object();
+ Json_writer_array ranges(writer, get_name_by_type());
List_iterator_fast<Explain_quick_select> it (children);
Explain_quick_select* child;
while ((child = it++))
+ {
+ Json_writer_object obj(writer);
child->print_json(writer);
-
- writer->end_object();
+ }
}
}