summaryrefslogtreecommitdiff
path: root/sql/sql_explain.h
diff options
context:
space:
mode:
authorSergei Petrunia <psergey@askmonty.org>2014-08-09 01:52:54 +0400
committerSergei Petrunia <psergey@askmonty.org>2014-08-09 01:52:54 +0400
commit83f0ddc6294ea8d4e424a540a043bf88ee4a8c8d (patch)
tree04280aba1544710aac2a6971a8d86a41c11cbecc /sql/sql_explain.h
parentd87ffeb49133aa459e134f09924cd7b7b5013632 (diff)
parent5cfd3270ec79238b27765af3062ae7d97f6f06d0 (diff)
downloadmariadb-git-83f0ddc6294ea8d4e424a540a043bf88ee4a8c8d.tar.gz
Merge 10.1 (with ANALYZE) and 10.1-explain-json
Diffstat (limited to 'sql/sql_explain.h')
-rw-r--r--sql/sql_explain.h35
1 files changed, 33 insertions, 2 deletions
diff --git a/sql/sql_explain.h b/sql/sql_explain.h
index a2b4ea282b7..8708a74e661 100644
--- a/sql/sql_explain.h
+++ b/sql/sql_explain.h
@@ -67,6 +67,7 @@ const int FAKE_SELECT_LEX_ID= (int)UINT_MAX;
class Explain_query;
+class Json_writer;
/*
A node can be either a SELECT, or a UNION.
*/
@@ -97,7 +98,9 @@ public:
virtual int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze)=0;
-
+ virtual void print_explain_json(Explain_query *query, Json_writer *writer,
+ bool is_analyze)= 0;
+
int print_explain_for_children(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
virtual ~Explain_node(){}
@@ -177,6 +180,8 @@ public:
int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
+ void print_explain_json(Explain_query *query, Json_writer *writer,
+ bool is_analyze);
Table_access_tracker *get_using_temporary_read_tracker()
{
@@ -222,6 +227,8 @@ public:
}
int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
+ void print_explain_json(Explain_query *query, Json_writer *writer,
+ bool is_analyze);
const char *fake_select_type;
bool using_filesort;
@@ -235,6 +242,8 @@ public:
return &tmptable_read_tracker;
}
private:
+ uint make_union_table_name(char *buf);
+
Table_access_tracker fake_select_lex_tracker;
/* This one is for reading after ORDER BY */
Table_access_tracker tmptable_read_tracker;
@@ -310,6 +319,8 @@ public:
/* Return tabular EXPLAIN output as a text string */
bool print_explain_str(THD *thd, String *out_str, bool is_analyze);
+ void print_explain_json(select_result_sink *output, bool is_analyze);
+
/* If true, at least part of EXPLAIN can be printed */
bool have_query_plan() { return insert_plan || upd_del_plan|| get_node(1) != NULL; }
@@ -479,7 +490,8 @@ public:
bool used_partitions_set;
/* Empty string means "NULL" will be printed */
- StringBuffer<32> possible_keys_str;
+ List<char> possible_keys;
+ //StringBuffer<32> possible_keys_str;
/*
Index use: key name and length.
@@ -528,11 +540,19 @@ public:
EXPLAIN_BKA_TYPE bka_type;
StringBuffer<32> firstmatch_table_name;
+
+ /*
+ Note: lifespan of WHERE condition is less than lifespan of this object.
+ THe below is valid if tags include "ET_USING_WHERE".
+ */
+ Item *where_cond;
+ Item *pushed_index_cond;
int print_explain(select_result_sink *output, uint8 explain_flags,
bool is_analyze,
uint select_id, const char *select_type,
bool using_temporary, bool using_filesort);
+ void print_explain_json(Json_writer *writer, bool is_analyze);
/* ANALYZE members*/
Table_access_tracker tracker;
@@ -540,6 +560,10 @@ public:
private:
void append_tag_name(String *str, enum explain_extra_tag tag);
+ void fill_key_str(String *key_str);
+ void fill_key_len_str(String *key_len_str);
+ double get_r_filtered();
+ void tag_to_json(Json_writer *writer, enum explain_extra_tag tag);
};
@@ -584,6 +608,8 @@ public:
virtual int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
+ virtual void print_explain_json(Explain_query *query, Json_writer *writer, bool is_analyze)
+ { /* EXPLAIN_JSON_NOT_IMPL */}
};
@@ -604,6 +630,9 @@ public:
int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
+ void print_explain_json(Explain_query *query, Json_writer *writer,
+ bool is_analyze)
+ { /* EXPLAIN_JSON_NOT_IMPL */}
};
@@ -625,6 +654,8 @@ public:
virtual int print_explain(Explain_query *query, select_result_sink *output,
uint8 explain_flags, bool is_analyze);
+ virtual void print_explain_json(Explain_query *query, Json_writer *writer, bool is_analyze)
+ { /* EXPLAIN_JSON_NOT_IMPL */}
};