Commit 8c2d20e7 authored by Yuchen Pei's avatar Yuchen Pei

MDEV-26345

nayuta's fix (df3d7315fce7b3f466fa867db5b59076ad259843)
parent 0a5e4a01
...@@ -3392,15 +3392,13 @@ bool JOIN::make_aggr_tables_info() ...@@ -3392,15 +3392,13 @@ bool JOIN::make_aggr_tables_info()
if (ht && ht->create_group_by) if (ht && ht->create_group_by)
{ {
/* /*
Check if the storage engine can intercept the query The query optimizer might optimize away aggregate functions or
DISTINCT. In such a cage, we need to notify a storage engine
JOIN::optimize_stage2() might convert DISTINCT into GROUP BY and then supporting a group by handler of the existence of the original
optimize away GROUP BY (group_list). In such a case, we need to notify explicit or implicit grouping. Thus, we set select_distinct ||
a storage engine supporting a group by handler of the existence of the implicit_grouping to Query::distinct.
original DISTINCT. Thus, we set select_distinct || group_optimized_away
to Query::distinct.
*/ */
Query query= {&all_fields, select_distinct || group_optimized_away, Query query= {&all_fields, select_distinct || implicit_grouping,
tables_list, conds, tables_list, conds,
group_list, order ? order : group_list, having, group_list, order ? order : group_list, having,
&select_lex->master_unit()->lim}; &select_lex->master_unit()->lim};
......
for master_1
for child2
child2_1
child2_2
child2_3
for child3
MDEV-26345 SELECT MIN on Spider table returns more rows than expected
connection child2_1;
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
CREATE TABLE tbl_a (
`a`int,
`b`int,
PRIMARY KEY (`a`, `b`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `tbl_a` VALUES (1,1), (1,2), (2,11);
connection master_1;
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
CREATE TABLE tbl_a (
`a`int,
`b`int,
PRIMARY KEY (`a`, `b`)
) ENGINE=Spider DEFAULT CHARSET=utf8 COMMENT='table "tbl_a"' PARTITION BY LIST COLUMNS(`b`) (
PARTITION `pt1` DEFAULT COMMENT = 'srv "s_2_1"'
);
connection master_1;
SELECT MIN(b), a FROM tbl_a WHERE a=1;
MIN(b) a
1 1
SELECT MAX(b), a FROM tbl_a WHERE a<3;
MAX(b) a
11 1
connection master_1;
DROP DATABASE IF EXISTS auto_test_remote;
connection child2_1;
DROP DATABASE IF EXISTS auto_test_remote;
for master_1
for child2
child2_1
child2_2
child2_3
for child3
!include include/default_mysqld.cnf
!include ../my_1_1.cnf
!include ../my_2_1.cnf
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_init.inc
--enable_result_log
--enable_query_log
--enable_warnings
--echo
--echo MDEV-26345 SELECT MIN on Spider table returns more rows than expected
--echo
--connection child2_1
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
eval CREATE TABLE tbl_a (
`a`int,
`b`int,
PRIMARY KEY (`a`, `b`)
) $CHILD2_1_ENGINE $CHILD2_1_CHARSET;
insert into `tbl_a` VALUES (1,1), (1,2), (2,11);
--connection master_1
CREATE DATABASE auto_test_remote;
USE auto_test_remote;
eval CREATE TABLE tbl_a (
`a`int,
`b`int,
PRIMARY KEY (`a`, `b`)
) $MASTER_1_ENGINE $MASTER_1_CHARSET COMMENT='table "tbl_a"' PARTITION BY LIST COLUMNS(`b`) (
PARTITION `pt1` DEFAULT COMMENT = 'srv "s_2_1"'
);
--connection master_1
SELECT MIN(b), a FROM tbl_a WHERE a=1;
SELECT MAX(b), a FROM tbl_a WHERE a<3;
--connection master_1
DROP DATABASE IF EXISTS auto_test_remote;
--connection child2_1
DROP DATABASE IF EXISTS auto_test_remote;
--disable_warnings
--disable_query_log
--disable_result_log
--source ../../t/test_deinit.inc
--enable_result_log
--enable_query_log
--enable_warnings
...@@ -167,7 +167,7 @@ connection child2_1; ...@@ -167,7 +167,7 @@ connection child2_1;
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'; SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %';
argument argument
select `id`,`hr_status`,`region_code`,`region` from `auto_test_remote`.`tbl_person` where `id` = '24FC3F0A5119432BAE13DD65AABAA39C' and `region` = 510411 select `id`,`hr_status`,`region_code`,`region` from `auto_test_remote`.`tbl_person` where `id` = '24FC3F0A5119432BAE13DD65AABAA39C' and `region` = 510411
select count(0) `count(0)` from (select 1) t0 join `auto_test_remote`.`tbl_ncd_cm_person` t1 where ((t1.`person_id` = '24FC3F0A5119432BAE13DD65AABAA39C') and (t1.`diseaseKind_id` = '52A0328740914BCE86ED10A4D2521816')) select distinct count(0) `count(0)` from (select 1) t0 join `auto_test_remote`.`tbl_ncd_cm_person` t1 where ((t1.`person_id` = '24FC3F0A5119432BAE13DD65AABAA39C') and (t1.`diseaseKind_id` = '52A0328740914BCE86ED10A4D2521816'))
SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %' SELECT argument FROM mysql.general_log WHERE argument LIKE '%select %'
SELECT * FROM tbl_person; SELECT * FROM tbl_person;
id hr_status region_code region id hr_status region_code region
......
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