Commit 25f8623f authored by unknown's avatar unknown
Browse files

Fixed BUG#8937: Stored Procedure: AVG() works as SUM() in SELECT ... INTO statement


mysql-test/r/sp.result:
  New test case for BUG#8937.
mysql-test/t/sp.test:
  New test case for BUG#8937.
sql/item_sum.h:
  Added val_int() method for Item_sum_avg for forced int types (in SPs for instance),
  otherwise Item_sum_sum::val_int() is used.
parent 804a2a8c
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -2736,4 +2736,23 @@ call bug8849()|
call bug8849()|
drop procedure bug8849|
drop tables t3,t4,t5|
drop procedure if exists bug8937|
create procedure bug8937()
begin
declare s,x,y,z int;
declare a float;
select sum(data),avg(data),min(data),max(data) into s,x,y,z from t1;
select s,x,y,z;
select avg(data) into a from t1;
select a;
end|
delete from t1|
insert into t1 (data) values (1), (2), (3), (4), (6)|
call bug8937()|
s	x	y	z
16	3	1	6
a
3.2000
drop procedure bug8937|
delete from t1|
drop table t1,t2;
+25 −1
Original line number Diff line number Diff line
@@ -3330,8 +3330,32 @@ call bug8849()|
drop procedure bug8849|
drop tables t3,t4,t5|

#
# BUG#8937: Stored Procedure: AVG() works as SUM() in SELECT ... INTO statement
#
--disable_warnings
drop procedure if exists bug8937|
--enable_warnings
create procedure bug8937()
begin
  declare s,x,y,z int;
  declare a float;

  select sum(data),avg(data),min(data),max(data) into s,x,y,z from t1;
  select s,x,y,z;
  select avg(data) into a from t1;
  select a;
end|

delete from t1|
insert into t1 (data) values (1), (2), (3), (4), (6)|
call bug8937()|

drop procedure bug8937|
delete from t1|


# Add bug above this line. Use existing tables t1 and t2 when
# Add bugs above this line. Use existing tables t1 and t2 when
# practical, or create table t3, t3 etc temporarily (and drop them).
delimiter ;|
drop table t1,t2;
+2 −0
Original line number Diff line number Diff line
@@ -356,6 +356,8 @@ class Item_sum_avg :public Item_sum_sum
  void clear();
  bool add();
  double val_real();
  // In SPs we might force the "wrong" type with select into a declare variable
  longlong val_int() { return (longlong)val_real(); }
  my_decimal *val_decimal(my_decimal *);
  String *val_str(String *str);
  void reset_field();