Commit 5d06edfb authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-19714: JOIN::pseudo_bits_cond is not visible in EXPLAIN FORMAT=JSON

Make it visible
parent 9b22354a
...@@ -7291,5 +7291,60 @@ pk i c pk i c ...@@ -7291,5 +7291,60 @@ pk i c pk i c
1 10 foo 1 10 foo 1 10 foo 1 10 foo
DROP TABLE t; DROP TABLE t;
# End of 10.2 tests # End of 10.2 tests
#
# MDEV-19714: JOIN::pseudo_bits_cond is not visible in EXPLAIN FORMAT=JSON
#
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES (1),(5);
CREATE TABLE t2 ( b INT ) ENGINE=MyISAM;
INSERT INTO t2 VALUES (1);
CREATE TABLE t3 ( c INT );
INSERT INTO t3 VALUES (4),(5);
SET @tmp19714=@@optimizer_switch;
SET optimizer_switch='subquery_cache=off';
explain format=json
SELECT ( SELECT b FROM t2 WHERE b = a OR EXISTS ( SELECT c FROM t3 WHERE c = b ) ) FROM t1;
EXPLAIN
{
"query_block": {
"select_id": 1,
"table": {
"table_name": "t1",
"access_type": "ALL",
"rows": 2,
"filtered": 100
},
"subqueries": [
{
"query_block": {
"select_id": 2,
"pseudo_bits_condition": "1 = t1.a or <in_optimizer>(1,<exists>(subquery#3))",
"table": {
"table_name": "t2",
"access_type": "system",
"rows": 1,
"filtered": 100
},
"subqueries": [
{
"query_block": {
"select_id": 3,
"table": {
"table_name": "t3",
"access_type": "ALL",
"rows": 2,
"filtered": 100,
"attached_condition": "1 = t3.c"
}
}
}
]
}
}
]
}
}
SET optimizer_switch=@tmp19714;
drop table t1,t2,t3;
set @optimizer_switch_for_subselect_test=null; set @optimizer_switch_for_subselect_test=null;
set @join_cache_level_for_subselect_test=NULL; set @join_cache_level_for_subselect_test=NULL;
...@@ -8,5 +8,28 @@ set @join_cache_level_for_subselect_test=@@join_cache_level; ...@@ -8,5 +8,28 @@ set @join_cache_level_for_subselect_test=@@join_cache_level;
--source t/subselect.test --source t/subselect.test
--echo #
--echo # MDEV-19714: JOIN::pseudo_bits_cond is not visible in EXPLAIN FORMAT=JSON
--echo #
CREATE TABLE t1 ( a INT );
INSERT INTO t1 VALUES (1),(5);
# t2 must be MyISAM or Aria and contain 1 row
CREATE TABLE t2 ( b INT ) ENGINE=MyISAM;
INSERT INTO t2 VALUES (1);
CREATE TABLE t3 ( c INT );
INSERT INTO t3 VALUES (4),(5);
SET @tmp19714=@@optimizer_switch;
SET optimizer_switch='subquery_cache=off';
explain format=json
SELECT ( SELECT b FROM t2 WHERE b = a OR EXISTS ( SELECT c FROM t3 WHERE c = b ) ) FROM t1;
SET optimizer_switch=@tmp19714;
drop table t1,t2,t3;
set @optimizer_switch_for_subselect_test=null; set @optimizer_switch_for_subselect_test=null;
set @join_cache_level_for_subselect_test=NULL; set @join_cache_level_for_subselect_test=NULL;
...@@ -857,6 +857,11 @@ void Explain_select::print_explain_json(Explain_query *query, ...@@ -857,6 +857,11 @@ void Explain_select::print_explain_json(Explain_query *query,
writer->add_member("outer_ref_condition"); writer->add_member("outer_ref_condition");
write_item(writer, outer_ref_cond); write_item(writer, outer_ref_cond);
} }
if (pseudo_bits_cond)
{
writer->add_member("pseudo_bits_condition");
write_item(writer, pseudo_bits_cond);
}
/* we do not print HAVING which always evaluates to TRUE */ /* we do not print HAVING which always evaluates to TRUE */
if (having || (having_value == Item::COND_FALSE)) if (having || (having_value == Item::COND_FALSE))
......
...@@ -232,6 +232,7 @@ class Explain_select : public Explain_basic_join ...@@ -232,6 +232,7 @@ class Explain_select : public Explain_basic_join
/* Expensive constant condition */ /* Expensive constant condition */
Item *exec_const_cond; Item *exec_const_cond;
Item *outer_ref_cond; Item *outer_ref_cond;
Item *pseudo_bits_cond;
/* HAVING condition */ /* HAVING condition */
Item *having; Item *having;
......
...@@ -25025,6 +25025,7 @@ int JOIN::save_explain_data_intern(Explain_query *output, ...@@ -25025,6 +25025,7 @@ int JOIN::save_explain_data_intern(Explain_query *output,
xpl_sel->exec_const_cond= exec_const_cond; xpl_sel->exec_const_cond= exec_const_cond;
xpl_sel->outer_ref_cond= outer_ref_cond; xpl_sel->outer_ref_cond= outer_ref_cond;
xpl_sel->pseudo_bits_cond= pseudo_bits_cond;
if (tmp_having) if (tmp_having)
xpl_sel->having= tmp_having; xpl_sel->having= tmp_having;
else else
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment