mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-28 17:15:19 +03:00 
			
		
		
		
	 0ff8f60b45
			
		
	
	0ff8f60b45
	
	
	
		
			
			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;
		
	
		
			
				
	
	
		
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Bug #11602: SP with very large body not handled well
 | |
| #
 | |
| 
 | |
| --disable_warnings
 | |
| drop procedure if exists test.longprocedure;
 | |
| drop table if exists t1;
 | |
| --enable_warnings
 | |
| 
 | |
| create table t1 (a int);
 | |
| insert into t1 values (1),(2),(3);
 | |
| 
 | |
| let $body=`select repeat('select count(*) into out1 from t1;\n', 3072)`;
 | |
| 
 | |
| delimiter //;
 | |
| --disable_query_log
 | |
| eval select length('$body') as length//
 | |
| eval create procedure test.longprocedure (out out1 int) deterministic
 | |
| begin
 | |
|   $body
 | |
| end//
 | |
| --enable_query_log
 | |
| 
 | |
| delimiter ;//
 | |
| 
 | |
| # this is larger than the length above, because it includes the 'begin' and
 | |
| # 'end' bits and some whitespace
 | |
| select length(routine_definition) from information_schema.routines where routine_schema = 'test' and routine_name = 'longprocedure';
 | |
| 
 | |
| call test.longprocedure(@value); select @value;
 | |
| 
 | |
| drop procedure test.longprocedure;
 | |
| drop table t1;
 | |
| #
 | |
| # Bug #9819 "Cursors: Mysql Server Crash while fetching from table with 5
 | |
| # million records.": 
 | |
| # To really test the bug, increase the number of loop iterations ($1).
 | |
| # For 4 millions set $1 to 22.
 | |
| create table t1 (f1 char(100) , f2 mediumint , f3 int , f4 real, f5 numeric);
 | |
| insert into t1 (f1, f2, f3, f4, f5) values
 | |
| ("This is a test case for for Bug#9819", 1, 2, 3.0, 4.598);
 | |
| create table t2 like t1;
 | |
| let $1=8;
 | |
| --disable_query_log
 | |
| --disable_result_log
 | |
| while ($1)
 | |
| {
 | |
|   eval insert into t1 select * from t1;
 | |
|   dec $1;
 | |
| }
 | |
| --enable_result_log
 | |
| --enable_query_log
 | |
| select count(*) from t1;
 | |
| select count(*) from t2;
 | |
| --disable_warnings
 | |
| drop procedure if exists p1;
 | |
| --enable_warnings
 | |
| delimiter |;
 | |
| create procedure p1()
 | |
| begin
 | |
|   declare done integer default 0;
 | |
|   declare vf1 char(100) ;
 | |
|   declare vf2 mediumint;
 | |
|   declare vf3 int ;
 | |
|   declare vf4 real ;
 | |
|   declare vf5 numeric ;
 | |
|   declare cur1 cursor for select f1,f2,f3,f4,f5 from t1;  
 | |
|   declare continue handler for sqlstate '02000' set done = 1; 
 | |
|   open cur1;
 | |
|   while done <> 1 do
 | |
|     fetch cur1 into vf1, vf2, vf3, vf4, vf5;
 | |
|     if not done then
 | |
|       insert into t2 values (vf1, vf2, vf3, vf4, vf5);
 | |
|     end if;
 | |
|   end while;
 | |
|   close cur1;
 | |
| end|
 | |
| delimiter ;|
 | |
| call p1();
 | |
| select count(*) from t1;
 | |
| select count(*) from t2;
 | |
| select f1 from t1 limit 1;
 | |
| select f1 from t2 limit 1;
 | |
| drop procedure p1;
 | |
| drop table t1, t2;
 |