mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Fix 2 more bugs in item_windowfunc.
1. Item_windowfunc must check the nullness of the field if it returns the value from the result_field. 2. The decimal value must come from the window_func instead of the result_field when not fetching values from the result_field. Added a more extensive test case that highlights if these bugs occur. The 2 select statements check behaviour for decimal and real typed fields respectively.
This commit is contained in:
@@ -19,24 +19,77 @@ insert into t1 values
|
||||
(112 , 5, 1, 12.25),
|
||||
(113 , 5, NULL, 13.35),
|
||||
(114 , 5, NULL, 14.50),
|
||||
(115 , 5, NULL, 15.65);
|
||||
select pk, a, b, sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
|
||||
sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
(115 , 5, NULL, 15.65),
|
||||
(116 , 6, 1, NULL),
|
||||
(117 , 6, 1, 10),
|
||||
(118 , 6, 1, 1.1),
|
||||
(119 , 6, 1, NULL),
|
||||
(120 , 6, 1, NULL),
|
||||
(121 , 6, 1, NULL),
|
||||
(122 , 6, 1, 2.2),
|
||||
(123 , 6, 1, 20.1),
|
||||
(124 , 6, 1, -10.4),
|
||||
(125 , 6, 1, NULL),
|
||||
(126 , 6, 1, NULL),
|
||||
(127 , 6, 1, NULL);
|
||||
select pk, a, b, sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
from t1;
|
||||
pk a b sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
101 0 10 0 3.2
|
||||
102 0 10 0 3.2
|
||||
103 1 10 0 7.199999999999999
|
||||
104 1 10 0 7.199999999999999
|
||||
105 2 20 0 13.2
|
||||
106 2 20 0 21.35
|
||||
107 2 20 0 20.35
|
||||
108 2 10 0 13.250000000000002
|
||||
109 4 20 0 19.3
|
||||
110 4 20 0 19.3
|
||||
111 5 NULL 0 23.4
|
||||
112 5 1 0 36.75
|
||||
113 5 NULL 0 40.1
|
||||
114 5 NULL NULL 43.5
|
||||
115 5 NULL NULL 30.15
|
||||
pk a b sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
101 0 10 20
|
||||
102 0 10 20
|
||||
103 1 10 20
|
||||
104 1 10 20
|
||||
105 2 20 40
|
||||
106 2 20 60
|
||||
107 2 20 50
|
||||
108 2 10 30
|
||||
109 4 20 40
|
||||
110 4 20 40
|
||||
111 5 NULL 1
|
||||
112 5 1 1
|
||||
113 5 NULL 1
|
||||
114 5 NULL NULL
|
||||
115 5 NULL NULL
|
||||
116 6 1 2
|
||||
117 6 1 3
|
||||
118 6 1 3
|
||||
119 6 1 3
|
||||
120 6 1 3
|
||||
121 6 1 3
|
||||
122 6 1 3
|
||||
123 6 1 3
|
||||
124 6 1 3
|
||||
125 6 1 3
|
||||
126 6 1 3
|
||||
127 6 1 2
|
||||
select pk, a, c, sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
from t1;
|
||||
pk a c sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
101 0 1.1 3.2
|
||||
102 0 2.1 3.2
|
||||
103 1 3.1 7.199999999999999
|
||||
104 1 4.1 7.199999999999999
|
||||
105 2 6.1 13.2
|
||||
106 2 7.1 21.35
|
||||
107 2 8.15 20.35
|
||||
108 2 5.1 13.250000000000002
|
||||
109 4 9.15 19.3
|
||||
110 4 10.15 19.3
|
||||
111 5 11.15 23.4
|
||||
112 5 12.25 36.75
|
||||
113 5 13.35 40.1
|
||||
114 5 14.5 43.5
|
||||
115 5 15.65 30.15
|
||||
116 6 NULL 10
|
||||
117 6 10 11.1
|
||||
118 6 1.1 11.1
|
||||
119 6 NULL 1.0999999999999996
|
||||
120 6 NULL NULL
|
||||
121 6 NULL 2.1999999999999997
|
||||
122 6 2.2 22.3
|
||||
123 6 20.1 11.9
|
||||
124 6 -10.4 9.7
|
||||
125 6 NULL -10.400000000000002
|
||||
126 6 NULL NULL
|
||||
127 6 NULL NULL
|
||||
drop table t1;
|
||||
|
||||
@@ -21,12 +21,27 @@ insert into t1 values
|
||||
(112 , 5, 1, 12.25),
|
||||
(113 , 5, NULL, 13.35),
|
||||
(114 , 5, NULL, 14.50),
|
||||
(115 , 5, NULL, 15.65);
|
||||
(115 , 5, NULL, 15.65),
|
||||
(116 , 6, 1, NULL),
|
||||
(117 , 6, 1, 10),
|
||||
(118 , 6, 1, 1.1),
|
||||
(119 , 6, 1, NULL),
|
||||
(120 , 6, 1, NULL),
|
||||
(121 , 6, 1, NULL),
|
||||
(122 , 6, 1, 2.2),
|
||||
(123 , 6, 1, 20.1),
|
||||
(124 , 6, 1, -10.4),
|
||||
(125 , 6, 1, NULL),
|
||||
(126 , 6, 1, NULL),
|
||||
(127 , 6, 1, NULL);
|
||||
|
||||
|
||||
--sorted_result
|
||||
select pk, a, b, sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING),
|
||||
sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
select pk, a, b, sum(b) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
from t1;
|
||||
|
||||
--sorted_result
|
||||
select pk, a, c, sum(c) over (partition by a order by pk ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
|
||||
from t1;
|
||||
|
||||
drop table t1;
|
||||
|
||||
@@ -490,7 +490,7 @@ public:
|
||||
else if (read_value_from_result_field)
|
||||
{
|
||||
res= result_field->val_real();
|
||||
null_value= false;
|
||||
null_value= result_field->is_null();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -563,7 +563,7 @@ public:
|
||||
}
|
||||
else
|
||||
{
|
||||
res= result_field->val_decimal(dec);
|
||||
res= window_func->val_decimal(dec);
|
||||
null_value= window_func->null_value;
|
||||
}
|
||||
return res;
|
||||
|
||||
Reference in New Issue
Block a user