mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-19714: JOIN::pseudo_bits_cond is not visible in EXPLAIN FORMAT=JSON
Make it visible
This commit is contained in:
@ -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;
|
|||||||
|
|
||||||
--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,
|
|||||||
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 @@ public:
|
|||||||
/* 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,
|
|||||||
|
|
||||||
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
|
||||||
|
Reference in New Issue
Block a user