mirror of
https://github.com/MariaDB/server.git
synced 2025-05-04 06:05:05 +03:00
497 lines
15 KiB
Plaintext
497 lines
15 KiB
Plaintext
|
|
--source suite/funcs_1/storedproc/load_sp_tb.inc
|
|
--------------------------------------------------------------------------------
|
|
|
|
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
|
|
--------------------------------------------------------------------------------
|
|
DROP DATABASE IF EXISTS db_storedproc;
|
|
DROP DATABASE IF EXISTS db_storedproc_1;
|
|
CREATE DATABASE db_storedproc;
|
|
CREATE DATABASE db_storedproc_1;
|
|
USE db_storedproc;
|
|
create table t1(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t1;
|
|
create table t2(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t2;
|
|
create table t3(f1 char(20),f2 char(20),f3 integer) engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t3.txt' into table t3;
|
|
create table t4(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t4;
|
|
USE db_storedproc_1;
|
|
create table t6(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t6;
|
|
USE db_storedproc;
|
|
create table t7 (f1 char(20), f2 char(25), f3 date, f4 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t7.txt' into table t7;
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'f3' at row 1
|
|
Warning 1265 Data truncated for column 'f3' at row 2
|
|
Warning 1265 Data truncated for column 'f3' at row 3
|
|
Warning 1265 Data truncated for column 'f3' at row 4
|
|
Warning 1265 Data truncated for column 'f3' at row 5
|
|
Warning 1265 Data truncated for column 'f3' at row 6
|
|
Warning 1265 Data truncated for column 'f3' at row 7
|
|
Warning 1265 Data truncated for column 'f3' at row 8
|
|
Warning 1265 Data truncated for column 'f3' at row 9
|
|
Warning 1265 Data truncated for column 'f3' at row 10
|
|
create table t8 (f1 char(20), f2 char(25), f3 date, f4 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t7.txt' into table t8;
|
|
Warnings:
|
|
Warning 1265 Data truncated for column 'f3' at row 1
|
|
Warning 1265 Data truncated for column 'f3' at row 2
|
|
Warning 1265 Data truncated for column 'f3' at row 3
|
|
Warning 1265 Data truncated for column 'f3' at row 4
|
|
Warning 1265 Data truncated for column 'f3' at row 5
|
|
Warning 1265 Data truncated for column 'f3' at row 6
|
|
Warning 1265 Data truncated for column 'f3' at row 7
|
|
Warning 1265 Data truncated for column 'f3' at row 8
|
|
Warning 1265 Data truncated for column 'f3' at row 9
|
|
Warning 1265 Data truncated for column 'f3' at row 10
|
|
create table t9(f1 int, f2 char(25), f3 int) engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t9.txt' into table t9;
|
|
create table t10(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t10;
|
|
create table t11(f1 char(20),f2 char(25),f3 date,f4 int,f5 char(25),f6 int)
|
|
engine = <engine_to_be_tested>;
|
|
load data infile '<MYSQLTEST_VARDIR>/std_data/funcs_1/t4.txt' into table t11;
|
|
|
|
Section 3.1.3 - Syntax checks for the stored procedure-specific flow
|
|
control statements IF, CASE, LOOP, LEAVE, ITERATE, REPEAT, WHILE:
|
|
--------------------------------------------------------------------------------
|
|
|
|
Testcase 3.1.3.7:
|
|
-----------------
|
|
|
|
Ensure that the IF statement acts correctly for all variants, including cases
|
|
where statements are nested.
|
|
--------------------------------------------------------------------------------
|
|
DROP TABLE IF EXISTS res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
DROP PROCEDURE IF EXISTS sp9;
|
|
CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 CHAR(20), f2 VARCHAR(20), f3 SMALLINT);
|
|
CREATE PROCEDURE sp9( action char(20), subaction char(20) )
|
|
BEGIN
|
|
if action = 'action' then
|
|
if subaction = 'subaction' then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'action', 'subaction' , 1);
|
|
else
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'action', 'none' , 2);
|
|
END if;
|
|
else
|
|
if subaction = 'subaction'
|
|
then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'none', 'subaction' , 3);
|
|
elseif subaction = 'subaction1'
|
|
then
|
|
BEGIN
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values ('none', 'subaction1', 4);
|
|
END;
|
|
else
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'none', 'none' , 5);
|
|
END if;
|
|
END if;
|
|
END//
|
|
CALL sp9( 'action', 'subaction' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742 where f3=1;
|
|
f1 f2 f3
|
|
action subaction 1
|
|
CALL sp9( 'temp', 'subaction' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742 where f3=3;
|
|
f1 f2 f3
|
|
none subaction 3
|
|
CALL sp9( 'temp', 'subaction1' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742 where f3=4;
|
|
f1 f2 f3
|
|
none subaction1 4
|
|
CALL sp9( 'action', 'temp' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742 where f3=2;
|
|
f1 f2 f3
|
|
action none 2
|
|
CALL sp9( 'temp', 'temp' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742 where f3=5;
|
|
f1 f2 f3
|
|
none none 5
|
|
DROP PROCEDURE sp9;
|
|
DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
|
|
Testcase 3.1.3.8.:
|
|
------------------
|
|
|
|
Ensure that the CASE statement acts correctly for all variants, including cases
|
|
where statements are nested.
|
|
--------------------------------------------------------------------------------
|
|
drop table IF EXISTS res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
DROP PROCEDURE IF EXISTS sp10;
|
|
create table res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 char(20), f2 varchar(20), f3 smallint);
|
|
CREATE PROCEDURE sp10( action char(20), subaction char(20) )
|
|
BEGIN
|
|
case action
|
|
when 'action' then
|
|
case
|
|
when subaction = 'subaction_1' then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'action', 'subaction_2' , 1);
|
|
when subaction = 'subaction_2' then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'action', 'subaction_2' , 2);
|
|
else
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'action', 'none' , 3);
|
|
END case;
|
|
else
|
|
case
|
|
when subaction = 'subaction_1' then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'none', 'subaction_1' , 4);
|
|
when subaction = 'subaction_2' then
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'none', 'subaction_2' , 5);
|
|
else
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'none', 'none' , 6);
|
|
END case;
|
|
END case;
|
|
END//
|
|
CALL sp10( 'action', 'subaction_1' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
action subaction_2 1
|
|
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CALL sp10( 'action', 'subaction_2' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
action subaction_2 2
|
|
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CALL sp10( 'temp', 'subaction_1' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
none subaction_1 4
|
|
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CALL sp10( 'temp', 'subaction_2' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
none subaction_2 5
|
|
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CALL sp10( 'action', 'temp' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
action none 3
|
|
delete from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CALL sp10( 'temp', 'temp' );
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
none none 6
|
|
DROP PROCEDURE sp10;
|
|
DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
|
|
Testcase 3.1.3.9 + 3.1.3.15:
|
|
----------------------------
|
|
|
|
09. Ensure that the LOOP statement acts correctly for all variants, including
|
|
. cases where statements are nested.
|
|
15. Ensure that the LEAVE statement acts correctly for all variants, including
|
|
. cases where statements are nested.
|
|
--------------------------------------------------------------------------------
|
|
DROP TABLE IF EXISTS res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
DROP PROCEDURE IF EXISTS sp11;
|
|
CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 CHAR(20), f2 VARCHAR(20), f3 SMALLINT);
|
|
CREATE PROCEDURE sp11( )
|
|
BEGIN
|
|
declare count1 integer default 1;
|
|
declare count2 integer default 1;
|
|
label1: loop
|
|
if count2 > 3 then leave label1;
|
|
END if;
|
|
set count1 = 1;
|
|
label2: loop
|
|
if count1 > 4 then leave label2;
|
|
END if;
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'xyz' , 'pqr', count1);
|
|
set count1 = count1 + 1;
|
|
iterate label2;
|
|
END loop label2;
|
|
set count2 = count2 + 1;
|
|
iterate label1;
|
|
END loop label1;
|
|
END//
|
|
CALL sp11();
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
xyz pqr 1
|
|
xyz pqr 2
|
|
xyz pqr 3
|
|
xyz pqr 4
|
|
xyz pqr 1
|
|
xyz pqr 2
|
|
xyz pqr 3
|
|
xyz pqr 4
|
|
xyz pqr 1
|
|
xyz pqr 2
|
|
xyz pqr 3
|
|
xyz pqr 4
|
|
DROP PROCEDURE sp11;
|
|
DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
|
|
Testcase 3.1.3.16:
|
|
------------------
|
|
|
|
Ensure that the ITERATE statement acts correctly for all variants, including
|
|
cases where statements are nested.
|
|
(tests for this testcase are also included in other testcases)
|
|
--------------------------------------------------------------------------------
|
|
DROP PROCEDURE IF EXISTS sp31316;
|
|
CREATE PROCEDURE sp31316( )
|
|
BEGIN
|
|
declare count1 integer default 1;
|
|
declare count2 integer default 1;
|
|
label1: loop
|
|
if count2 > 3 then leave label1;
|
|
END if;
|
|
set count1 = 1;
|
|
label2: loop
|
|
if count1 > 4 then leave label2;
|
|
END if;
|
|
insert into temp values( count1, count2);
|
|
set count1 = count1 + 1;
|
|
iterate label3;
|
|
END loop label2;
|
|
set count2 = count2 + 1;
|
|
iterate label1;
|
|
END loop label1;
|
|
END//
|
|
ERROR 42000: ITERATE with no matching label: label3
|
|
|
|
Testcase 3.1.3.18:
|
|
------------------
|
|
|
|
Ensure that the REPEAT statement acts correctly for all variants, including
|
|
cases where statements are nested.
|
|
--------------------------------------------------------------------------------
|
|
DROP PROCEDURE IF EXISTS sp17;
|
|
DROP TABLE IF EXISTS res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
CREATE TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742( f1 CHAR(20), f2 VARCHAR(20), f3 SMALLINT);
|
|
CREATE PROCEDURE sp17( )
|
|
BEGIN
|
|
declare count1 integer default 1;
|
|
declare count2 integer default 1;
|
|
repeat
|
|
set count1 = count1 + 1;
|
|
set count2 = 1;
|
|
label1: repeat
|
|
set count2 = count2 + 1;
|
|
insert into res_t3_itisalongname_1381742_itsaverylongname_1381742 values( 'xyz' , 'pqr', count1);
|
|
until count2 > 3
|
|
END repeat label1;
|
|
until count1 > 3
|
|
END repeat;
|
|
END//
|
|
CALL sp17();
|
|
SELECT * from res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
f1 f2 f3
|
|
xyz pqr 2
|
|
xyz pqr 2
|
|
xyz pqr 2
|
|
xyz pqr 3
|
|
xyz pqr 3
|
|
xyz pqr 3
|
|
xyz pqr 4
|
|
xyz pqr 4
|
|
xyz pqr 4
|
|
DROP PROCEDURE sp17;
|
|
DROP TABLE res_t3_itisalongname_1381742_itsaverylongname_1381742;
|
|
|
|
Testcase 3.1.3.24:
|
|
------------------
|
|
|
|
Ensure that the WHILE statement acts correctly for all variants, including cases
|
|
where statements are nested.
|
|
--------------------------------------------------------------------------------
|
|
drop table IF EXISTS res_t21;
|
|
DROP PROCEDURE IF EXISTS sp21;
|
|
create table res_t21(name text(10), surname blob(20), age_averylongfieldname_averylongname_1234569 smallint);
|
|
insert into res_t21 values('ashwin', 'mokadam', 25);
|
|
CREATE PROCEDURE sp21( )
|
|
BEGIN
|
|
declare count1 integer default 0;
|
|
declare count2 integer default 0;
|
|
while count1 < 3 do
|
|
BEGIN
|
|
declare ithisissamevariablename int default 100;
|
|
SELECT ithisissamevariablename;
|
|
BEGIN
|
|
declare ithisissamevariablename int default 200;
|
|
SELECT ithisissamevariablename;
|
|
END;
|
|
set count2 = 0;
|
|
label1: while count2 < 3 do
|
|
BEGIN
|
|
declare count1 integer default 7;
|
|
set count2 = count2 + 1;
|
|
insert into res_t21 values( 'xyz' , 'pqr', count2);
|
|
label2: while count1 < 10 do
|
|
set count1 = count1 + 1;
|
|
insert into res_t21 values( 'xyz' , 'pqr', count1);
|
|
END while label2;
|
|
END;
|
|
END while label1;
|
|
set count1 = count1 + 1;
|
|
END;
|
|
END while;
|
|
END//
|
|
CALL sp21();
|
|
ithisissamevariablename
|
|
100
|
|
ithisissamevariablename
|
|
200
|
|
ithisissamevariablename
|
|
100
|
|
ithisissamevariablename
|
|
200
|
|
ithisissamevariablename
|
|
100
|
|
ithisissamevariablename
|
|
200
|
|
SELECT * from res_t21;
|
|
name surname age_averylongfieldname_averylongname_1234569
|
|
ashwin mokadam 25
|
|
xyz pqr 1
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 2
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 3
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 1
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 2
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 3
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 1
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 2
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
xyz pqr 3
|
|
xyz pqr 8
|
|
xyz pqr 9
|
|
xyz pqr 10
|
|
DROP PROCEDURE sp21;
|
|
drop table res_t21;
|
|
|
|
Testcase 3.1.3.30:
|
|
------------------
|
|
|
|
Ensure that multiple cases of all possible combinations of the control flow
|
|
statements, nested within multiple compound statements within a stored
|
|
procedure, always act correctly and return the expected result.
|
|
--------------------------------------------------------------------------------
|
|
DROP TABLE IF EXISTS res_tbl;
|
|
DROP PROCEDURE IF EXISTS sp31330;
|
|
create table res_tbl (f1 int, f2 text, f3 blob, f4 date,
|
|
f5 set('one', 'two', 'three', 'four', 'five') default 'one');
|
|
CREATE PROCEDURE sp31330 (path int)
|
|
BEGIN
|
|
declare count int default 1;
|
|
declare var1 text;
|
|
declare var2 blob;
|
|
declare var3 date;
|
|
declare var4 set('one', 'two', 'three', 'four', 'five') DEFAULT 'five';
|
|
case
|
|
when path=1 then
|
|
set var3 = '2000-11-09';
|
|
set var1 = 'flowing through case 1';
|
|
label1: loop
|
|
if count > 5 then
|
|
if var4=1000 then
|
|
set var2 = 'exiting out of case 1 - invalid SET';
|
|
END if;
|
|
if var4='two' then
|
|
set var2 = 'exiting out of case 1';
|
|
END if;
|
|
insert into res_tbl values (1, var1, var2, var3, (count-2));
|
|
leave label1;
|
|
elseif count = 5 then
|
|
set count= count + 2;
|
|
set var4='two';
|
|
iterate label1;
|
|
else
|
|
set count= count + 1;
|
|
END if;
|
|
set var4='one';
|
|
END loop label1;
|
|
when path=2 then
|
|
set var3 = '1989-11-09';
|
|
set var1 = 'flowing through case 2';
|
|
set @count3=0;
|
|
label2: repeat
|
|
set count=count + 1;
|
|
set @count2=1;
|
|
while @count2 <= 5 do
|
|
set @count2 = @count2 + 1;
|
|
END while;
|
|
SELECT @count2;
|
|
set @count3=@count3 + @count2;
|
|
until count > 5
|
|
END repeat label2;
|
|
set var2 = 'exiting out of case 2';
|
|
set var4 = count-3;
|
|
SELECT @count3;
|
|
insert into res_tbl values (2, var1, var2, var3, var4);
|
|
ELSE BEGIN
|
|
set @error_opt='undefined path specified';
|
|
SELECT @error_opt;
|
|
END;
|
|
END case;
|
|
END//
|
|
CALL sp31330();
|
|
ERROR 42000: Incorrect number of arguments for PROCEDURE db_storedproc.sp31330; expected 1, got 0
|
|
CALL sp31330(1);
|
|
SELECT * from res_tbl;
|
|
f1 f2 f3 f4 f5
|
|
1 flowing through case 1 exiting out of case 1 2000-11-09 one,three
|
|
CALL sp31330(2);
|
|
@count2
|
|
6
|
|
@count2
|
|
6
|
|
@count2
|
|
6
|
|
@count2
|
|
6
|
|
@count2
|
|
6
|
|
@count3
|
|
30
|
|
SELECT * from res_tbl;
|
|
f1 f2 f3 f4 f5
|
|
1 flowing through case 1 exiting out of case 1 2000-11-09 one,three
|
|
2 flowing through case 2 exiting out of case 2 1989-11-09 one,two
|
|
CALL sp31330(4);
|
|
@error_opt
|
|
undefined path specified
|
|
DROP PROCEDURE sp31330;
|
|
drop table res_tbl;
|
|
|
|
--source suite/funcs_1/storedproc/cleanup_sp_tb.inc
|
|
--------------------------------------------------------------------------------
|
|
DROP DATABASE IF EXISTS db_storedproc;
|
|
DROP DATABASE IF EXISTS db_storedproc_1;
|
|
|
|
. +++ END OF SCRIPT +++
|
|
--------------------------------------------------------------------------------
|