mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Fixed bug mdev-11907.
With the current design the function copy_funcs() should ignore the items with window functions from the array **func_ptr.
This commit is contained in:
@ -2270,17 +2270,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.6667
|
9 2 0.6667
|
||||||
10 2 1.0000
|
10 2 1.0000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
create view v1 as select pk, c, c/count(*) over (partition by c order by pk
|
create view v1 as select pk, c, c/count(*) over (partition by c order by pk
|
||||||
rows between 1 preceding and 2 following) as CNT
|
rows between 1 preceding and 2 following) as CNT
|
||||||
from t1;
|
from t1;
|
||||||
@ -2299,17 +2288,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.6667
|
9 2 0.6667
|
||||||
10 2 1.0000
|
10 2 1.0000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
select pk, c, c/count(*) over w1 as CNT from t1
|
select pk, c, c/count(*) over w1 as CNT from t1
|
||||||
window w1 as (partition by c order by pk rows between 1 preceding and 2 following);
|
window w1 as (partition by c order by pk rows between 1 preceding and 2 following);
|
||||||
pk c CNT
|
pk c CNT
|
||||||
@ -2323,17 +2301,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.6667
|
9 2 0.6667
|
||||||
10 2 1.0000
|
10 2 1.0000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
create view v2 as select pk, c, c/count(*) over w1 as CNT from t1
|
create view v2 as select pk, c, c/count(*) over w1 as CNT from t1
|
||||||
window w1 as (partition by c order by pk rows between 1 preceding and 2 following);
|
window w1 as (partition by c order by pk rows between 1 preceding and 2 following);
|
||||||
show create view v2;
|
show create view v2;
|
||||||
@ -2351,17 +2318,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.6667
|
9 2 0.6667
|
||||||
10 2 1.0000
|
10 2 1.0000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
select pk, c, c/count(*) over w1 as CNT from t1
|
select pk, c, c/count(*) over w1 as CNT from t1
|
||||||
window w1 as (partition by c order by pk rows unbounded preceding);
|
window w1 as (partition by c order by pk rows unbounded preceding);
|
||||||
pk c CNT
|
pk c CNT
|
||||||
@ -2375,17 +2331,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.4000
|
9 2 0.4000
|
||||||
10 2 0.3333
|
10 2 0.3333
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
create view v3 as select pk, c, c/count(*) over w1 as CNT from t1
|
create view v3 as select pk, c, c/count(*) over w1 as CNT from t1
|
||||||
window w1 as (partition by c order by pk rows unbounded preceding);
|
window w1 as (partition by c order by pk rows unbounded preceding);
|
||||||
show create view v3;
|
show create view v3;
|
||||||
@ -2403,17 +2348,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.4000
|
9 2 0.4000
|
||||||
10 2 0.3333
|
10 2 0.3333
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
select pk, c, c/count(*) over (partition by c order by pk
|
select pk, c, c/count(*) over (partition by c order by pk
|
||||||
range between 3 preceding and current row) as CNT
|
range between 3 preceding and current row) as CNT
|
||||||
from t1;
|
from t1;
|
||||||
@ -2428,17 +2362,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.5000
|
9 2 0.5000
|
||||||
10 2 0.5000
|
10 2 0.5000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
create view v4 as select pk, c, c/count(*) over (partition by c order by pk
|
create view v4 as select pk, c, c/count(*) over (partition by c order by pk
|
||||||
range between 3 preceding and current row) as CNT
|
range between 3 preceding and current row) as CNT
|
||||||
from t1;
|
from t1;
|
||||||
@ -2457,17 +2380,6 @@ pk c CNT
|
|||||||
8 2 0.5000
|
8 2 0.5000
|
||||||
9 2 0.5000
|
9 2 0.5000
|
||||||
10 2 0.5000
|
10 2 0.5000
|
||||||
Warnings:
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
Warning 1365 Division by 0
|
|
||||||
drop view v1,v2,v3,v4;
|
drop view v1,v2,v3,v4;
|
||||||
drop table t0,t1;
|
drop table t0,t1;
|
||||||
#
|
#
|
||||||
@ -3096,3 +3008,24 @@ select i, rank() over (order by i) rnk from t1 group by 1+2;
|
|||||||
i rnk
|
i rnk
|
||||||
2 1
|
2 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
#
|
||||||
|
# MDEV-11907: window function as the second operand of division
|
||||||
|
#
|
||||||
|
create table t1 (pk int, c int);
|
||||||
|
insert into t1 values (1,1),(2,1),(3,1),(4,1),(5,2);
|
||||||
|
set @sql_mode_save= @@sql_mode;
|
||||||
|
set sql_mode='ERROR_FOR_DIVISION_BY_ZERO';
|
||||||
|
select pk, c, c/count(*) over
|
||||||
|
(partition by c order by pk
|
||||||
|
rows between 1 preceding and 2 following) as CNT
|
||||||
|
from t1;
|
||||||
|
pk c CNT
|
||||||
|
1 1 0.3333
|
||||||
|
2 1 0.2500
|
||||||
|
3 1 0.3333
|
||||||
|
4 1 0.5000
|
||||||
|
5 2 2.0000
|
||||||
|
show warnings;
|
||||||
|
Level Code Message
|
||||||
|
set sql_mode=@sql_mode_save;
|
||||||
|
drop table t1;
|
||||||
|
@ -1809,3 +1809,24 @@ select i, row_number() over () from t1 group by 1+2;
|
|||||||
select i, rank() over (order by i) rnk from t1 group by 1+2;
|
select i, rank() over (order by i) rnk from t1 group by 1+2;
|
||||||
|
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-11907: window function as the second operand of division
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
create table t1 (pk int, c int);
|
||||||
|
insert into t1 values (1,1),(2,1),(3,1),(4,1),(5,2);
|
||||||
|
|
||||||
|
set @sql_mode_save= @@sql_mode;
|
||||||
|
set sql_mode='ERROR_FOR_DIVISION_BY_ZERO';
|
||||||
|
|
||||||
|
select pk, c, c/count(*) over
|
||||||
|
(partition by c order by pk
|
||||||
|
rows between 1 preceding and 2 following) as CNT
|
||||||
|
from t1;
|
||||||
|
show warnings;
|
||||||
|
|
||||||
|
set sql_mode=@sql_mode_save;
|
||||||
|
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -23338,6 +23338,9 @@ copy_funcs(Item **func_ptr, const THD *thd)
|
|||||||
Item *func;
|
Item *func;
|
||||||
for (; (func = *func_ptr) ; func_ptr++)
|
for (; (func = *func_ptr) ; func_ptr++)
|
||||||
{
|
{
|
||||||
|
if (func->type() == Item::FUNC_ITEM &&
|
||||||
|
((Item_func *) func)->with_window_func)
|
||||||
|
continue;
|
||||||
func->save_in_result_field(1);
|
func->save_in_result_field(1);
|
||||||
/*
|
/*
|
||||||
Need to check the THD error state because Item::val_xxx() don't
|
Need to check the THD error state because Item::val_xxx() don't
|
||||||
|
Reference in New Issue
Block a user