diff options
author | Sergei Petrunia <psergey@askmonty.org> | 2014-05-27 21:04:45 +0400 |
---|---|---|
committer | Sergei Petrunia <psergey@askmonty.org> | 2014-05-27 21:04:45 +0400 |
commit | 5cfd3270ec79238b27765af3062ae7d97f6f06d0 (patch) | |
tree | 2bfa2bb941567c1eb7f81d7b86962973e6fbf1c6 /sql/sql_parse.cc | |
parent | 0925ab9d88f4328810d25392333a4cac11c6e694 (diff) | |
download | mariadb-git-10.1-explain-json.tar.gz |
MDEV-6109: EXPLAIN JSON10.1-explain-json
- First code, "EXPLAIN FORMAT=JSON stmt" and "ANALYZE FORMAT=JSON stmt"
work for basic queries. Complex constructs (e.g subqueries, etc) not
yet supported.
- No test infrastructure yet
Diffstat (limited to 'sql/sql_parse.cc')
-rw-r--r-- | sql/sql_parse.cc | 43 |
1 files changed, 32 insertions, 11 deletions
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 42a3045cb1d..04892610fcf 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -97,6 +97,8 @@ #include "log_slow.h" #include "sql_bootstrap.h" +#include "my_json_writer.h" + #define FLAGSTR(V,F) ((V)&(F)?#F" ":"") #ifdef WITH_ARIA_STORAGE_ENGINE @@ -5233,20 +5235,39 @@ static bool execute_sqlcom_select(THD *thd, TABLE_LIST *all_tables) top-level LIMIT */ result->reset_offset_limit(); - thd->lex->explain->print_explain(result, thd->lex->describe, - thd->lex->analyze_stmt); - if (lex->describe & DESCRIBE_EXTENDED) + if (thd->lex->explain_json) { - char buff[1024]; - String str(buff,(uint32) sizeof(buff), system_charset_info); - str.length(0); /* - The warnings system requires input in utf8, @see - mysqld_show_warnings(). + Json_writer writer; + writer.start_object(); + thd->lex->explain->print_explain_json(&writer, thd->lex->analyze_stmt); + writer.end_object(); + + const CHARSET_INFO *cs= system_charset_info; + List<Item> item_list; + String *buf= &writer.output; + item_list.push_back(new Item_string(buf->ptr(), buf->length(), cs)); + result->send_data(item_list); */ - thd->lex->unit.print(&str, QT_TO_SYSTEM_CHARSET); - push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, - ER_YES, str.c_ptr_safe()); + thd->lex->explain->print_explain_json(result, thd->lex->analyze_stmt); + } + else + { + thd->lex->explain->print_explain(result, thd->lex->describe, + thd->lex->analyze_stmt); + if (lex->describe & DESCRIBE_EXTENDED) + { + char buff[1024]; + String str(buff,(uint32) sizeof(buff), system_charset_info); + str.length(0); + /* + The warnings system requires input in utf8, @see + mysqld_show_warnings(). + */ + thd->lex->unit.print(&str, QT_TO_SYSTEM_CHARSET); + push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, + ER_YES, str.c_ptr_safe()); + } } } |