Commit e6d51aac authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-9550 COUNT(NULL) returns incorrect result with sequence storage engine

when calculating COUNT(basic_const), take into account that
this basic_const may be NULL
parent 9214d043
...@@ -85,4 +85,10 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -85,4 +85,10 @@ id select_type table type possible_keys key key_len ref rows Extra
explain select count(*) from seq_1_to_15_step_2 group by mod(seq,2); explain select count(*) from seq_1_to_15_step_2 group by mod(seq,2);
id select_type table type possible_keys key key_len ref rows Extra id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE seq_1_to_15_step_2 index NULL PRIMARY 8 NULL 8 Using index; Using temporary; Using filesort 1 SIMPLE seq_1_to_15_step_2 index NULL PRIMARY 8 NULL 8 Using index; Using temporary; Using filesort
drop table seq_1_to_15_step_2; create temporary table t1 select * from seq_1_to_3;
select count(NULL) from t1;
count(NULL)
0
select count(NULL) from seq_1_to_3;
count(NULL)
0
...@@ -39,4 +39,9 @@ explain select count(*) from seq_1_to_15_step_2, seq_1_to_15_step_2 as t2; ...@@ -39,4 +39,9 @@ explain select count(*) from seq_1_to_15_step_2, seq_1_to_15_step_2 as t2;
explain select count(*) from seq_1_to_15_step_2 where seq > 0; explain select count(*) from seq_1_to_15_step_2 where seq > 0;
explain select count(*) from seq_1_to_15_step_2 group by mod(seq,2); explain select count(*) from seq_1_to_15_step_2 group by mod(seq,2);
drop table seq_1_to_15_step_2; #
# MDEV-9550 COUNT(NULL) returns incorrect result with sequence storage engine
#
create temporary table t1 select * from seq_1_to_3;
select count(NULL) from t1;
select count(NULL) from seq_1_to_3;
...@@ -452,7 +452,11 @@ int ha_seq_group_by_handler::next_row() ...@@ -452,7 +452,11 @@ int ha_seq_group_by_handler::next_row()
switch (item_sum->sum_func()) { switch (item_sum->sum_func()) {
case Item_sum::COUNT_FUNC: case Item_sum::COUNT_FUNC:
{ {
field->store((longlong) elements, 1); Item *arg0= ((Item_sum*) item_sum)->get_arg(0);
if (arg0->basic_const_item() && arg0->is_null())
field->store(0LL, 1);
else
field->store((longlong) elements, 1);
break; break;
} }
case Item_sum::SUM_FUNC: case Item_sum::SUM_FUNC:
......
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