mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Bug#20777 Function w BIGINT UNSIGNED shows diff. behaviour with and without --ps-protocol
- Stored procedures returning unsinged values returns signed values if text protocol is used. The reason is that the stored proceedure item Item_func_sp wasn't initializing the member variables properly based on the information contained in the associated result field. - The patch is to upon field-item association, ::fix_fields, initialize the member variables in appropriate order. - Field type of an Item_func_sp was hard coded to MYSQL_TYPE_VARCHAR. This is changed to return the type of the actual result field. - Member function name sp_result_field was refactored to the more appropriate init_result_field. - Member function name find_and_check_access was refactored to sp_check_access.
This commit is contained in:
@ -5741,4 +5741,92 @@ END|
|
||||
CALL bug24117()|
|
||||
DROP PROCEDURE bug24117|
|
||||
DROP TABLE t3|
|
||||
drop function if exists bug20777|
|
||||
drop table if exists examplebug20777|
|
||||
create function bug20777(f1 bigint unsigned) returns bigint unsigned
|
||||
begin
|
||||
set f1 = (f1 - 10); set f1 = (f1 + 10);
|
||||
return f1;
|
||||
end|
|
||||
select bug20777(9223372036854775803) as '9223372036854775803 2**63-5';
|
||||
9223372036854775803 2**63-5
|
||||
9223372036854775803
|
||||
select bug20777(9223372036854775804) as '9223372036854775804 2**63-4';
|
||||
9223372036854775804 2**63-4
|
||||
9223372036854775804
|
||||
select bug20777(9223372036854775805) as '9223372036854775805 2**63-3';
|
||||
9223372036854775805 2**63-3
|
||||
9223372036854775805
|
||||
select bug20777(9223372036854775806) as '9223372036854775806 2**63-2';
|
||||
9223372036854775806 2**63-2
|
||||
9223372036854775806
|
||||
select bug20777(9223372036854775807) as '9223372036854775807 2**63-1';
|
||||
9223372036854775807 2**63-1
|
||||
9223372036854775807
|
||||
select bug20777(9223372036854775808) as '9223372036854775808 2**63+0';
|
||||
9223372036854775808 2**63+0
|
||||
9223372036854775808
|
||||
select bug20777(9223372036854775809) as '9223372036854775809 2**63+1';
|
||||
9223372036854775809 2**63+1
|
||||
9223372036854775809
|
||||
select bug20777(9223372036854775810) as '9223372036854775810 2**63+2';
|
||||
9223372036854775810 2**63+2
|
||||
9223372036854775810
|
||||
select bug20777(-9223372036854775808) as 'lower bounds signed bigint';
|
||||
lower bounds signed bigint
|
||||
0
|
||||
select bug20777(9223372036854775807) as 'upper bounds signed bigint';
|
||||
upper bounds signed bigint
|
||||
9223372036854775807
|
||||
select bug20777(0) as 'lower bounds unsigned bigint';
|
||||
lower bounds unsigned bigint
|
||||
0
|
||||
select bug20777(18446744073709551615) as 'upper bounds unsigned bigint';
|
||||
upper bounds unsigned bigint
|
||||
18446744073709551615
|
||||
select bug20777(18446744073709551616) as 'upper bounds unsigned bigint + 1';
|
||||
upper bounds unsigned bigint + 1
|
||||
18446744073709551615
|
||||
select bug20777(-1) as 'lower bounds unsigned bigint - 1';
|
||||
lower bounds unsigned bigint - 1
|
||||
0
|
||||
select bug20777(1.84e+19) as 'submitter value, 1.84e19';
|
||||
submitter value, 1.84e19
|
||||
9223372036854775808
|
||||
create table examplebug20777 as select
|
||||
0 as 'i',
|
||||
bug20777(9223372036854775806) as '2**63-2',
|
||||
bug20777(9223372036854775807) as '2**63-1',
|
||||
bug20777(9223372036854775808) as '2**63',
|
||||
bug20777(9223372036854775809) as '2**63+1',
|
||||
bug20777(18446744073709551614) as '2**64-2',
|
||||
bug20777(18446744073709551615) as '2**64-1',
|
||||
bug20777(18446744073709551616) as '2**64',
|
||||
bug20777(0) as '0',
|
||||
bug20777(-1) as '-1';
|
||||
insert into examplebug20777 values (1, 9223372036854775806, 9223372036854775807, 223372036854775808, 9223372036854775809, 18446744073709551614, 18446744073709551615, 8446744073709551616, 0, -1);
|
||||
show create table examplebug20777;
|
||||
Table Create Table
|
||||
examplebug20777 CREATE TABLE `examplebug20777` (
|
||||
`i` int(1) NOT NULL default '0',
|
||||
`2**63-2` bigint(20) unsigned default NULL,
|
||||
`2**63-1` bigint(20) unsigned default NULL,
|
||||
`2**63` bigint(20) unsigned default NULL,
|
||||
`2**63+1` bigint(20) unsigned default NULL,
|
||||
`2**64-2` bigint(20) unsigned default NULL,
|
||||
`2**64-1` bigint(20) unsigned default NULL,
|
||||
`2**64` bigint(20) unsigned default NULL,
|
||||
`0` bigint(20) unsigned default NULL,
|
||||
`-1` bigint(20) unsigned default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
select * from examplebug20777 order by i;
|
||||
i 2**63-2 2**63-1 2**63 2**63+1 2**64-2 2**64-1 2**64 0 -1
|
||||
0 9223372036854775806 9223372036854775807 9223372036854775808 9223372036854775809 18446744073709551614 18446744073709551615 18446744073709551615 0 0
|
||||
1 9223372036854775806 9223372036854775807 223372036854775808 9223372036854775809 18446744073709551614 18446744073709551615 8446744073709551616 0 0
|
||||
drop table examplebug20777;
|
||||
select bug20777(18446744073709551613)+1;
|
||||
bug20777(18446744073709551613)+1
|
||||
18446744073709551614
|
||||
drop function bug20777;
|
||||
End of 5.0 tests.
|
||||
drop table t1,t2;
|
||||
|
@ -6715,9 +6715,56 @@ DROP PROCEDURE bug24117|
|
||||
DROP TABLE t3|
|
||||
|
||||
#
|
||||
# NOTE: The delimiter is `|`, and not `;`. It is changed to `;`
|
||||
# at the end of the file!
|
||||
# Bug#20777: Function w BIGINT UNSIGNED shows diff. behaviour --ps-protocol
|
||||
#
|
||||
--disable_warnings
|
||||
drop function if exists bug20777|
|
||||
drop table if exists examplebug20777|
|
||||
--enabled_warnings
|
||||
create function bug20777(f1 bigint unsigned) returns bigint unsigned
|
||||
begin
|
||||
set f1 = (f1 - 10); set f1 = (f1 + 10);
|
||||
return f1;
|
||||
end|
|
||||
delimiter ;|
|
||||
select bug20777(9223372036854775803) as '9223372036854775803 2**63-5';
|
||||
select bug20777(9223372036854775804) as '9223372036854775804 2**63-4';
|
||||
select bug20777(9223372036854775805) as '9223372036854775805 2**63-3';
|
||||
select bug20777(9223372036854775806) as '9223372036854775806 2**63-2';
|
||||
select bug20777(9223372036854775807) as '9223372036854775807 2**63-1';
|
||||
select bug20777(9223372036854775808) as '9223372036854775808 2**63+0';
|
||||
select bug20777(9223372036854775809) as '9223372036854775809 2**63+1';
|
||||
select bug20777(9223372036854775810) as '9223372036854775810 2**63+2';
|
||||
select bug20777(-9223372036854775808) as 'lower bounds signed bigint';
|
||||
select bug20777(9223372036854775807) as 'upper bounds signed bigint';
|
||||
select bug20777(0) as 'lower bounds unsigned bigint';
|
||||
select bug20777(18446744073709551615) as 'upper bounds unsigned bigint';
|
||||
select bug20777(18446744073709551616) as 'upper bounds unsigned bigint + 1';
|
||||
select bug20777(-1) as 'lower bounds unsigned bigint - 1';
|
||||
select bug20777(1.84e+19) as 'submitter value, 1.84e19';
|
||||
|
||||
create table examplebug20777 as select
|
||||
0 as 'i',
|
||||
bug20777(9223372036854775806) as '2**63-2',
|
||||
bug20777(9223372036854775807) as '2**63-1',
|
||||
bug20777(9223372036854775808) as '2**63',
|
||||
bug20777(9223372036854775809) as '2**63+1',
|
||||
bug20777(18446744073709551614) as '2**64-2',
|
||||
bug20777(18446744073709551615) as '2**64-1',
|
||||
bug20777(18446744073709551616) as '2**64',
|
||||
bug20777(0) as '0',
|
||||
bug20777(-1) as '-1';
|
||||
insert into examplebug20777 values (1, 9223372036854775806, 9223372036854775807, 223372036854775808, 9223372036854775809, 18446744073709551614, 18446744073709551615, 8446744073709551616, 0, -1);
|
||||
show create table examplebug20777;
|
||||
select * from examplebug20777 order by i;
|
||||
|
||||
drop table examplebug20777;
|
||||
select bug20777(18446744073709551613)+1;
|
||||
drop function bug20777;
|
||||
delimiter |;
|
||||
|
||||
###
|
||||
--echo End of 5.0 tests.
|
||||
|
||||
#
|
||||
# BUG#NNNN: New bug synopsis
|
||||
@ -6726,8 +6773,13 @@ DROP TABLE t3|
|
||||
#drop procedure if exists bugNNNN|
|
||||
#--enable_warnings
|
||||
#create procedure bugNNNN...
|
||||
|
||||
#
|
||||
# Add bugs above this line. Use existing tables t1 and t2 when
|
||||
# practical, or create table t3, t4 etc temporarily (and drop them).
|
||||
# practical, or create table t3,t4 etc temporarily (and drop them).
|
||||
# NOTE: The delimiter is `|`, and not `;`. It is changed to `;`
|
||||
# at the end of the file!
|
||||
#
|
||||
|
||||
delimiter ;|
|
||||
drop table t1,t2;
|
||||
|
||||
|
Reference in New Issue
Block a user