mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
MDEV-9652: EXPLAIN FORMAT=JSON should show outer_ref_cond
Show outer_ref_condition in EXPLAIN FORMAT=JSON output.
This commit is contained in:
parent
0dbfc0fde7
commit
ab44e892d8
5 changed files with 59 additions and 1 deletions
|
@ -1543,3 +1543,43 @@ ANALYZE
|
|||
set optimizer_switch=@tmp_optimizer_switch;
|
||||
set join_cache_level=@tmp_join_cache_level;
|
||||
drop table t1,t2,t3,t4;
|
||||
#
|
||||
# MDEV-9652: EXPLAIN FORMAT=JSON should show outer_ref_cond
|
||||
#
|
||||
create table t0(a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 select a,a from t0;
|
||||
explain format=json
|
||||
select a, (select max(a) from t1 where t0.a<5 and t1.b<t0.a) from t0;
|
||||
EXPLAIN
|
||||
{
|
||||
"query_block": {
|
||||
"select_id": 1,
|
||||
"table": {
|
||||
"table_name": "t0",
|
||||
"access_type": "ALL",
|
||||
"rows": 10,
|
||||
"filtered": 100
|
||||
},
|
||||
"subqueries": [
|
||||
{
|
||||
"expression_cache": {
|
||||
"state": "uninitialized",
|
||||
"query_block": {
|
||||
"select_id": 2,
|
||||
"outer_ref_condition": "(t0.a < 5)",
|
||||
"table": {
|
||||
"table_name": "t1",
|
||||
"access_type": "ALL",
|
||||
"rows": 10,
|
||||
"filtered": 100,
|
||||
"attached_condition": "((t0.a < 5) and (t1.b < t0.a))"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
drop table t0,t1;
|
||||
|
|
|
@ -394,5 +394,15 @@ set join_cache_level=@tmp_join_cache_level;
|
|||
|
||||
drop table t1,t2,t3,t4;
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-9652: EXPLAIN FORMAT=JSON should show outer_ref_cond
|
||||
--echo #
|
||||
create table t0(a int);
|
||||
insert into t0 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
|
||||
create table t1 (a int, b int);
|
||||
insert into t1 select a,a from t0;
|
||||
|
||||
explain format=json
|
||||
select a, (select max(a) from t1 where t0.a<5 and t1.b<t0.a) from t0;
|
||||
drop table t0,t1;
|
||||
|
||||
|
|
|
@ -862,6 +862,12 @@ void Explain_select::print_explain_json(Explain_query *query,
|
|||
writer->add_member("const_condition");
|
||||
write_item(writer, exec_const_cond);
|
||||
}
|
||||
if (outer_ref_cond)
|
||||
{
|
||||
writer->add_member("outer_ref_condition");
|
||||
write_item(writer, outer_ref_cond);
|
||||
}
|
||||
|
||||
/* we do not print HAVING which always evaluates to TRUE */
|
||||
if (having || (having_value == Item::COND_FALSE))
|
||||
{
|
||||
|
|
|
@ -232,9 +232,10 @@ public:
|
|||
|
||||
/* Expensive constant condition */
|
||||
Item *exec_const_cond;
|
||||
Item *outer_ref_cond;
|
||||
|
||||
/* HAVING condition */
|
||||
COND *having;
|
||||
Item *having;
|
||||
Item::cond_result having_value;
|
||||
|
||||
/* Global join attributes. In tabular form, they are printed on the first row */
|
||||
|
|
|
@ -24252,6 +24252,7 @@ int JOIN::save_explain_data_intern(Explain_query *output, bool need_tmp_table,
|
|||
xpl_sel->using_filesort= true;
|
||||
|
||||
xpl_sel->exec_const_cond= exec_const_cond;
|
||||
xpl_sel->outer_ref_cond= outer_ref_cond;
|
||||
if (tmp_having)
|
||||
xpl_sel->having= tmp_having;
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue