diff options
author | Oleksandr Byelkin <sanja@mariadb.com> | 2015-04-08 10:13:36 +0200 |
---|---|---|
committer | Oleksandr Byelkin <sanja@mariadb.com> | 2015-04-09 14:21:02 +0200 |
commit | 697194461ad2031420bc1aaf8a03432dbf2acd66 (patch) | |
tree | a05b8dd781ed7b3b2aa55222947e34b41825b4d1 /sql/sql_explain.cc | |
parent | abba4184e68f2ae652f1be19b04f32efb2cb354a (diff) | |
download | mariadb-git-697194461ad2031420bc1aaf8a03432dbf2acd66.tar.gz |
MDEV-7856: EXPLAIN FORMAT=JSON should show partitions
Diffstat (limited to 'sql/sql_explain.cc')
-rw-r--r-- | sql/sql_explain.cc | 58 |
1 files changed, 25 insertions, 33 deletions
diff --git a/sql/sql_explain.cc b/sql/sql_explain.cc index 15f6753130c..3fbb720e6c5 100644 --- a/sql/sql_explain.cc +++ b/sql/sql_explain.cc @@ -37,6 +37,18 @@ Explain_query::Explain_query(THD *thd_arg, MEM_ROOT *root) : { } +static void print_json_array(Json_writer *writer, + const char *title, String_list &list) +{ + List_iterator_fast<char> it(list); + const char *name; + writer->add_member(title).start_array(); + while ((name= it++)) + writer->add_str(name); + writer->end_array(); +} + + Explain_query::~Explain_query() { @@ -1219,17 +1231,9 @@ void add_json_keyset(Json_writer *writer, const char *elem_name, String_list *keyset) { if (!keyset->is_empty()) - { - List_iterator_fast<char> it(*keyset); - const char *name; - writer->add_member(elem_name).start_array(); - while ((name= it++)) - writer->add_str(name); - writer->end_array(); - } + print_json_array(writer, elem_name, *keyset); } - void Explain_table_access::print_explain_json(Explain_query *query, Json_writer *writer, bool is_analyze) @@ -1252,7 +1256,10 @@ void Explain_table_access::print_explain_json(Explain_query *query, writer->add_member("table").start_object(); writer->add_member("table_name").add_str(table_name); - // partitions + + if (used_partitions_set) + print_json_array(writer, "partitions", used_partitions_list); + writer->add_member("access_type").add_str(join_type_str[type]); add_json_keyset(writer, "possible_keys", &possible_keys); @@ -1281,14 +1288,7 @@ void Explain_table_access::print_explain_json(Explain_query *query, parts_list= &key.key_parts_list; if (parts_list && !parts_list->is_empty()) - { - List_iterator_fast<char> it(*parts_list); - const char *name; - writer->add_member("used_key_parts").start_array(); - while ((name= it++)) - writer->add_str(name); - writer->end_array(); - } + print_json_array(writer, "used_key_parts", *parts_list); if (quick_info && !quick_info->is_basic()) { @@ -1299,14 +1299,7 @@ void Explain_table_access::print_explain_json(Explain_query *query, /* `ref` */ if (!ref_list.is_empty()) - { - List_iterator_fast<char> it(ref_list); - const char *str; - writer->add_member("ref").start_array(); - while ((str= it++)) - writer->add_str(str); - writer->end_array(); - } + print_json_array(writer, "ref", ref_list); /* r_loops (not present in tabular output) */ if (is_analyze) @@ -1554,13 +1547,8 @@ void Explain_quick_select::print_json(Json_writer *writer) writer->add_member("range").start_object(); writer->add_member("key").add_str(range.get_key_name()); - - List_iterator_fast<char> it(range.key_parts_list); - const char *name; - writer->add_member("used_key_parts").start_array(); - while ((name= it++)) - writer->add_str(name); - writer->end_array(); + + print_json_array(writer, "used_key_parts", range.key_parts_list); writer->end_object(); } @@ -1845,6 +1833,10 @@ void Explain_update::print_explain_json(Explain_query *query, writer->add_member("delete").add_ll(1); writer->add_member("table_name").add_str(table_name); + + if (used_partitions_set) + print_json_array(writer, "partitions", used_partitions_list); + writer->add_member("access_type").add_str(join_type_str[jtype]); if (!possible_keys.is_empty()) |