mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Patch for WL#2894: Make stored routine variables work
according to the standard.
The idea is to use Field-classes to implement stored routines
variables. Also, we should provide facade to Item-hierarchy
by Item_field class (it is necessary, since SRVs take part
in expressions).
The patch fixes the following bugs:
- BUG#8702: Stored Procedures: No Error/Warning shown for inappropriate data
type matching;
- BUG#8768: Functions: For any unsigned data type, -ve values can be passed
and returned;
- BUG#8769: Functions: For Int datatypes, out of range values can be passed
and returned;
- BUG#9078: STORED PROCDURE: Decimal digits are not displayed when we use
DECIMAL datatype;
- BUG#9572: Stored procedures: variable type declarations ignored;
- BUG#12903: upper function does not work inside a function;
- BUG#13705: parameters to stored procedures are not verified;
- BUG#13808: ENUM type stored procedure parameter accepts non-enumerated
data;
- BUG#13909: Varchar Stored Procedure Parameter always BINARY string (ignores
CHARACTER SET);
- BUG#14161: Stored procedure cannot retrieve bigint unsigned;
- BUG#14188: BINARY variables have no 0x00 padding;
- BUG#15148: Stored procedure variables accept non-scalar values;
This commit is contained in:
@@ -248,13 +248,13 @@ return i+1|
|
||||
call sub1("sub1a", (select 7))|
|
||||
call sub1("sub1b", (select max(i) from t2))|
|
||||
call sub1("sub1c", (select i,d from t2 limit 1))|
|
||||
ERROR 21000: Operand should contain 1 column(s)
|
||||
call sub1("sub1d", (select 1 from (select 1) a))|
|
||||
call sub2("sub2")|
|
||||
select * from t1|
|
||||
id data
|
||||
sub1a 7
|
||||
sub1b 3
|
||||
sub1c 1
|
||||
sub1d 1
|
||||
sub2 6
|
||||
select sub3((select max(i) from t2))|
|
||||
@@ -2686,7 +2686,7 @@ call bug8937()|
|
||||
s x y z
|
||||
16 3 1 6
|
||||
a
|
||||
3.2000
|
||||
3.2
|
||||
drop procedure bug8937|
|
||||
delete from t1|
|
||||
drop procedure if exists bug6900|
|
||||
@@ -2890,21 +2890,30 @@ create function bug9775(v1 char(1)) returns enum('a','b') return v1|
|
||||
select bug9775('a'),bug9775('b'),bug9775('c')|
|
||||
bug9775('a') bug9775('b') bug9775('c')
|
||||
a b
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'bug9775('c')' at row 1
|
||||
drop function bug9775|
|
||||
create function bug9775(v1 int) returns enum('a','b') return v1|
|
||||
select bug9775(1),bug9775(2),bug9775(3)|
|
||||
bug9775(1) bug9775(2) bug9775(3)
|
||||
a b
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'bug9775(3)' at row 1
|
||||
drop function bug9775|
|
||||
create function bug9775(v1 char(1)) returns set('a','b') return v1|
|
||||
select bug9775('a'),bug9775('b'),bug9775('a,b'),bug9775('c')|
|
||||
bug9775('a') bug9775('b') bug9775('a,b') bug9775('c')
|
||||
a b a,b
|
||||
a b a
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'v1' at row 1
|
||||
Warning 1265 Data truncated for column 'bug9775('c')' at row 1
|
||||
drop function bug9775|
|
||||
create function bug9775(v1 int) returns set('a','b') return v1|
|
||||
select bug9775(1),bug9775(2),bug9775(3),bug9775(4)|
|
||||
bug9775(1) bug9775(2) bug9775(3) bug9775(4)
|
||||
a b a,b
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'bug9775(4)' at row 1
|
||||
drop function bug9775|
|
||||
drop function if exists bug8861|
|
||||
create function bug8861(v1 int) returns year return v1|
|
||||
@@ -2927,12 +2936,10 @@ create procedure bug9004_2(x char(16))
|
||||
call bug9004_1(x)|
|
||||
call bug9004_1('12345678901234567')|
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'id' at row 1
|
||||
Warning 1265 Data truncated for column 'id' at row 2
|
||||
Warning 1265 Data truncated for column 'x' at row 1
|
||||
call bug9004_2('12345678901234567890')|
|
||||
Warnings:
|
||||
Warning 1265 Data truncated for column 'id' at row 1
|
||||
Warning 1265 Data truncated for column 'id' at row 2
|
||||
Warning 1265 Data truncated for column 'x' at row 1
|
||||
delete from t1|
|
||||
drop procedure bug9004_1|
|
||||
drop procedure bug9004_2|
|
||||
@@ -3527,14 +3534,15 @@ end|
|
||||
call bug12589_1()|
|
||||
Table Create Table
|
||||
tm1 CREATE TEMPORARY TABLE `tm1` (
|
||||
`spv1` decimal(1,0) unsigned default NULL
|
||||
`spv1` decimal(3,3) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect DECIMAL value: 'test'
|
||||
Warning 1264 Out of range value adjusted for column 'spv1' at row 1
|
||||
Warning 1366 Incorrect decimal value: 'test' for column 'spv1' at row 1
|
||||
call bug12589_2()|
|
||||
Table Create Table
|
||||
tm1 CREATE TEMPORARY TABLE `tm1` (
|
||||
`spv1` decimal(6,3) unsigned default NULL
|
||||
`spv1` decimal(6,3) default NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
call bug12589_3()|
|
||||
Table Create Table
|
||||
@@ -4016,34 +4024,37 @@ create procedure bug14643_1()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||
begin
|
||||
declare v int default x;
|
||||
declare v int default undefined_var;
|
||||
if v = 1 then
|
||||
select 1;
|
||||
else
|
||||
select 2;
|
||||
select v, isnull(v);
|
||||
end if;
|
||||
end;
|
||||
end|
|
||||
create procedure bug14643_2()
|
||||
begin
|
||||
declare continue handler for sqlexception select 'boo' as 'Handler';
|
||||
case x
|
||||
case undefined_var
|
||||
when 1 then
|
||||
select 1;
|
||||
else
|
||||
select 2;
|
||||
end case;
|
||||
select undefined_var;
|
||||
end|
|
||||
call bug14643_1()|
|
||||
Handler
|
||||
boo
|
||||
2
|
||||
2
|
||||
v isnull(v)
|
||||
NULL 1
|
||||
call bug14643_2()|
|
||||
Handler
|
||||
boo
|
||||
2
|
||||
2
|
||||
Handler
|
||||
boo
|
||||
drop procedure bug14643_1|
|
||||
drop procedure bug14643_2|
|
||||
drop procedure if exists bug14304|
|
||||
|
||||
Reference in New Issue
Block a user