Skip to content

Commit d06a44e

Browse files
committed
MDEV-11868: min ( distinct ) over ( ) returns wrong value
The bug was not visible in current HEAD. Introduced test case to catch regressions. Also improve error messages regarding distinct usage in window functions.
1 parent 88ddb1e commit d06a44e

File tree

3 files changed

+142
-1
lines changed

3 files changed

+142
-1
lines changed

mysql-test/r/win.result

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2958,3 +2958,94 @@ develop 2 4000 4000.0000
29582958
sales 3 6000 5500.0000
29592959
sales 4 5000 5500.0000
29602960
drop table empsalary;
2961+
#
2962+
# MDEV-11868: min(distinct) over () returns wrong value
2963+
#
2964+
create table TDEC (CDEC int, RNUM int);
2965+
create view VDEC as select * from TDEC;
2966+
insert into TDEC (CDEC) values (null),(-1),(0),(1),(0),(10);
2967+
select TDEC.CDEC, min(TDEC.CDEC) over () from TDEC;
2968+
CDEC min(TDEC.CDEC) over ()
2969+
NULL -1
2970+
-1 -1
2971+
0 -1
2972+
1 -1
2973+
0 -1
2974+
10 -1
2975+
select VDEC.CDEC, min(VDEC.CDEC) over () from VDEC;
2976+
CDEC min(VDEC.CDEC) over ()
2977+
NULL -1
2978+
-1 -1
2979+
0 -1
2980+
1 -1
2981+
0 -1
2982+
10 -1
2983+
select TDEC.CDEC, max(TDEC.CDEC) over () from TDEC;
2984+
CDEC max(TDEC.CDEC) over ()
2985+
NULL 10
2986+
-1 10
2987+
0 10
2988+
1 10
2989+
0 10
2990+
10 10
2991+
select VDEC.CDEC, max(VDEC.CDEC) over () from VDEC;
2992+
CDEC max(VDEC.CDEC) over ()
2993+
NULL 10
2994+
-1 10
2995+
0 10
2996+
1 10
2997+
0 10
2998+
10 10
2999+
select TDEC.CDEC, min(distinct TDEC.CDEC) over () from TDEC;
3000+
CDEC min(distinct TDEC.CDEC) over ()
3001+
NULL -1
3002+
-1 -1
3003+
0 -1
3004+
1 -1
3005+
0 -1
3006+
10 -1
3007+
select VDEC.CDEC, min(distinct VDEC.CDEC) over () from VDEC;
3008+
CDEC min(distinct VDEC.CDEC) over ()
3009+
NULL -1
3010+
-1 -1
3011+
0 -1
3012+
1 -1
3013+
0 -1
3014+
10 -1
3015+
select TDEC.CDEC, max(distinct TDEC.CDEC) over () from TDEC;
3016+
CDEC max(distinct TDEC.CDEC) over ()
3017+
NULL 10
3018+
-1 10
3019+
0 10
3020+
1 10
3021+
0 10
3022+
10 10
3023+
select VDEC.CDEC, max(distinct VDEC.CDEC) over () from VDEC;
3024+
CDEC max(distinct VDEC.CDEC) over ()
3025+
NULL 10
3026+
-1 10
3027+
0 10
3028+
1 10
3029+
0 10
3030+
10 10
3031+
#
3032+
# These should be removed once support for them is added.
3033+
#
3034+
select TDEC.CDEC, count(distinct TDEC.CDEC) over () from TDEC;
3035+
ERROR 42000: This version of MariaDB doesn't yet support 'COUNT(DISTINCT) aggregate as window function'
3036+
select VDEC.CDEC, count(distinct VDEC.CDEC) over () from VDEC;
3037+
ERROR 42000: This version of MariaDB doesn't yet support 'COUNT(DISTINCT) aggregate as window function'
3038+
select TDEC.CDEC, sum(distinct TDEC.CDEC) over () from TDEC;
3039+
ERROR 42000: This version of MariaDB doesn't yet support 'SUM(DISTINCT) aggregate as window function'
3040+
select VDEC.CDEC, sum(distinct VDEC.CDEC) over () from VDEC;
3041+
ERROR 42000: This version of MariaDB doesn't yet support 'SUM(DISTINCT) aggregate as window function'
3042+
select TDEC.CDEC, avg(distinct TDEC.CDEC) over () from TDEC;
3043+
ERROR 42000: This version of MariaDB doesn't yet support 'AVG(DISTINCT) aggregate as window function'
3044+
select VDEC.CDEC, avg(distinct VDEC.CDEC) over () from VDEC;
3045+
ERROR 42000: This version of MariaDB doesn't yet support 'AVG(DISTINCT) aggregate as window function'
3046+
select TDEC.CDEC, GROUP_CONCAT(TDEC.CDEC) over () from TDEC;
3047+
ERROR 42000: This version of MariaDB doesn't yet support 'GROUP_CONCAT() aggregate as window function'
3048+
select VDEC.CDEC, GROUP_CONCAT(distinct VDEC.CDEC) over () from VDEC;
3049+
ERROR 42000: This version of MariaDB doesn't yet support 'GROUP_CONCAT() aggregate as window function'
3050+
drop table TDEC;
3051+
drop view VDEC;

mysql-test/t/win.test

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1734,3 +1734,43 @@ SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM emps
17341734
SELECT depname, empno, salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary HAVING empno > 1 ORDER BY depname;
17351735

17361736
drop table empsalary;
1737+
1738+
--echo #
1739+
--echo # MDEV-11868: min(distinct) over () returns wrong value
1740+
--echo #
1741+
1742+
create table TDEC (CDEC int, RNUM int);
1743+
create view VDEC as select * from TDEC;
1744+
insert into TDEC (CDEC) values (null),(-1),(0),(1),(0),(10);
1745+
select TDEC.CDEC, min(TDEC.CDEC) over () from TDEC;
1746+
select VDEC.CDEC, min(VDEC.CDEC) over () from VDEC;
1747+
select TDEC.CDEC, max(TDEC.CDEC) over () from TDEC;
1748+
select VDEC.CDEC, max(VDEC.CDEC) over () from VDEC;
1749+
1750+
select TDEC.CDEC, min(distinct TDEC.CDEC) over () from TDEC;
1751+
select VDEC.CDEC, min(distinct VDEC.CDEC) over () from VDEC;
1752+
select TDEC.CDEC, max(distinct TDEC.CDEC) over () from TDEC;
1753+
select VDEC.CDEC, max(distinct VDEC.CDEC) over () from VDEC;
1754+
1755+
--echo #
1756+
--echo # These should be removed once support for them is added.
1757+
--echo #
1758+
--error ER_NOT_SUPPORTED_YET
1759+
select TDEC.CDEC, count(distinct TDEC.CDEC) over () from TDEC;
1760+
--error ER_NOT_SUPPORTED_YET
1761+
select VDEC.CDEC, count(distinct VDEC.CDEC) over () from VDEC;
1762+
--error ER_NOT_SUPPORTED_YET
1763+
select TDEC.CDEC, sum(distinct TDEC.CDEC) over () from TDEC;
1764+
--error ER_NOT_SUPPORTED_YET
1765+
select VDEC.CDEC, sum(distinct VDEC.CDEC) over () from VDEC;
1766+
--error ER_NOT_SUPPORTED_YET
1767+
select TDEC.CDEC, avg(distinct TDEC.CDEC) over () from TDEC;
1768+
--error ER_NOT_SUPPORTED_YET
1769+
select VDEC.CDEC, avg(distinct VDEC.CDEC) over () from VDEC;
1770+
--error ER_NOT_SUPPORTED_YET
1771+
select TDEC.CDEC, GROUP_CONCAT(TDEC.CDEC) over () from TDEC;
1772+
--error ER_NOT_SUPPORTED_YET
1773+
select VDEC.CDEC, GROUP_CONCAT(distinct VDEC.CDEC) over () from VDEC;
1774+
1775+
drop table TDEC;
1776+
drop view VDEC;

sql/sql_window.cc

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2699,10 +2699,20 @@ bool Window_func_runner::add_function_to_run(Item_window_func *win_func)
26992699
{
27002700
/* Distinct is not yet supported. */
27012701
case Item_sum::GROUP_CONCAT_FUNC:
2702+
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
2703+
"GROUP_CONCAT() aggregate as window function");
2704+
return true;
27022705
case Item_sum::SUM_DISTINCT_FUNC:
2706+
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
2707+
"SUM(DISTINCT) aggregate as window function");
2708+
return true;
27032709
case Item_sum::AVG_DISTINCT_FUNC:
27042710
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
2705-
"This aggregate as window function");
2711+
"AVG(DISTINCT) aggregate as window function");
2712+
return true;
2713+
case Item_sum::COUNT_DISTINCT_FUNC:
2714+
my_error(ER_NOT_SUPPORTED_YET, MYF(0),
2715+
"COUNT(DISTINCT) aggregate as window function");
27062716
return true;
27072717
default:
27082718
break;

0 commit comments

Comments
 (0)