mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Increase allowed size of stored procedure bodies to 4GB, and
produce a sensible error when that limit is exceeded. (Bug #11602) client/mysqltest.c: Increase query buffer size, and explain why mysql-test/r/system_mysql_db.result: Update results scripts/mysql_create_system_tables.sh: Increase size of proc.body scripts/mysql_fix_privilege_tables.sql: Increase size of proc.body sql/share/errmsg.txt: Add error for SP routines that are too long sql/sp.cc: Raise an error when the SP body is too long. sql/sp.h: Add error for SP body being too long. sql/sql_parse.cc: Handle SP_BODY_TOO_LONG error. mysql-test/r/sp-big.result: New BitKeeper file ``mysql-test/r/sp-big.result'' mysql-test/t/sp-big.test: New BitKeeper file ``mysql-test/t/sp-big.test''
This commit is contained in:
15
mysql-test/r/sp-big.result
Normal file
15
mysql-test/r/sp-big.result
Normal file
@ -0,0 +1,15 @@
|
||||
drop procedure if exists test.longprocedure;
|
||||
drop table if exists t1;
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
length
|
||||
107520
|
||||
select length(routine_definition) from information_schema.routines where routine_schema = 'test' and routine_name = 'longprocedure';
|
||||
length(routine_definition)
|
||||
107530
|
||||
call test.longprocedure(@value);
|
||||
select @value;
|
||||
@value
|
||||
3
|
||||
drop procedure test.longprocedure;
|
||||
drop table t1;
|
@ -172,7 +172,7 @@ proc CREATE TABLE `proc` (
|
||||
`security_type` enum('INVOKER','DEFINER') NOT NULL default 'DEFINER',
|
||||
`param_list` blob NOT NULL,
|
||||
`returns` char(64) NOT NULL default '',
|
||||
`body` blob NOT NULL,
|
||||
`body` longblob NOT NULL,
|
||||
`definer` char(77) character set utf8 collate utf8_bin NOT NULL default '',
|
||||
`created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
|
||||
`modified` timestamp NOT NULL default '0000-00-00 00:00:00',
|
||||
|
33
mysql-test/t/sp-big.test
Normal file
33
mysql-test/t/sp-big.test
Normal file
@ -0,0 +1,33 @@
|
||||
#
|
||||
# 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;
|
Reference in New Issue
Block a user