Bug #8386 Real result doesn't apear when calling a function
Submitted: 9 Feb 2005 5:28 Modified: 11 Mar 2005 16:39
Reporter: Efren Bravo Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server Severity:S2 (Serious)
Version:mysql 502 alpha OS:Microsoft Windows (Windows XP SP1)
Assigned to: Dmitry Lenev CPU Architecture:Any

[9 Feb 2005 5:28] Efren Bravo
Description:
declare a table:
------------------

CREATE TABLE `srchm` (
  `idu` int(10) unsigned NOT NULL default '0',
  `idm` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`idu`,`idm`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

insert into srchm values (2,5);

and declare the following function:
-----------------------------------------

create function f_get(p_u     int(10),
                                      p_m tinyint(3))
                                       returns tinyint(3)
begin
  declare v_tempdata tinyint(3) default 0;
  declare v_percent  tinyint(3) default 10;

  declare c_m cursor for
    select 1 from srchm m
    where m.idu =p_u  and m.idm =p_m limit 1;
    
  declare continue handler for not found set v_percent =v_percent -1;

  open c_m;
  fetch c_m into v_tempdata;
  close c_m;
  
  return v_percent;
end

and now:
-----------
mysql> select f_getcomppers(2,5);
+------------------------+
| f_getcomppers(2,5) |
+-----------------------+
|                          1 | (it would return 10 but it return the value of the select)
+-----------------------+ (why?)
1 row in set (0.08 sec)

mysql> select f_getcomppers(2,1212);
+----------------------------+
| f_getcomppers(2,1212) |
+----------------------------+
|                               9 |  (this result is Ok)
+----------------------------+
1 row in set (0.00 sec)

mysql> select f_getcomppers(2,5), 'otro campo';
+-----------------------+--------------+
| f_getcomppers(2,5) | otro campo | (here is happening equal the case one and 
+-----------------------+--------------+ the real result is now in the second field, 
|                         1 |     10         |  but the second field doesn't appear)
+-----------------------+--------------+
1 row in set (0.00 sec) 

How to repeat:
this bug is present in the call to any created function, whenever it contains cursors
[9 Feb 2005 5:36] Efren Bravo
to call to the function it is this way:

mysql> select f_get(2,5);                     /*case 1*/
mysql> select f_get(2,1212);                /*case 2*/
mysql> select f_get(2,5), 'another field'; /*case 3*/
[9 Feb 2005 5:52] Jorge del Conde
Thanks for your bug report !
[4 Mar 2005 18:49] Dmitry Lenev
Fixed in 5.0.3
[11 Mar 2005 16:39] Paul Dubois
Noted in 5.0.3 changelog.