summaryrefslogtreecommitdiff
path: root/mysql-test/suite/sys_vars/t/max_sp_recursion_depth_func.test
blob: ab43536457ba33d8d8dca649b1e971e6028d785e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
############# mysql-test\t\max_sp_recursion_depth_func.test ###################
#                                                                             #
# Variable Name: max_sp_recursion_depth               					         #
# Scope: SESSION                                                              #
# Access Type: Dynamic                                                        #
# Data Type: NUMERIC                                                          #
# Default Value: 0                                                            #
# Max Value:    25                                                            #
#                                                                             #
#                                                                             #
# Creation Date: 2008-03-02                                                   #
# Author:  Sharique Abdullah                                                      #
#                                                                             #
# Description: Test Cases of Dynamic System Variable "max_sp_recursion_depth  #
#              that checks behavior of this variable in the following ways    #
#              * Functionality based on different values                      #
#                                                                             #
#Reference:http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#
#  option_mysqld_max_sp_recursion_depth                                       #
#                                                                             #
###############################################################################


#
# Setup
#

SET @session_max_recursion_depth = @@SESSION.max_sp_recursion_depth;


--echo '#--------------------FN_DYNVARS_099_01-------------------------#'
##########################################################
#    Test behavior of variable on new connection # 01    #
##########################################################
--echo ** Connecting test_con1 using username 'root' **
CONNECT (test_con1,localhost,root,,);
--echo ** Connection test_con1 **
CONNECTION test_con1;


# Setting session value of variable
SET @@session.max_sp_recursion_depth = 10;
SELECT @@session.max_sp_recursion_depth;
# create procedure to add rows

--disable_warnings
DROP PROCEDURE IF EXISTS sp_addRecords;
--enable_warnings

DELIMITER //;

CREATE PROCEDURE sp_addRecords (IN var1 INT,IN var2 INT)
BEGIN
SELECT var1,var2;
IF var1 < var2 THEN
   CALL sp_addRecords(var1+1,var2);
   SELECT var1,var2;
END IF;
END //

DELIMITER ;//


CALL sp_addRecords(0,8);

--echo '#--------------------FN_DYNVARS_099_02-------------------------#'
##########################################################
#    Test behavior of variable on new connection # 02    #
##########################################################

--echo ** Connecting test_con2 using username 'root' **
CONNECT (test_con2,localhost,root,,);
--echo ** Connection test_con2 **
connection test_con2;


# Setting session value of variable and inserting data in table
SET @@session.max_sp_recursion_depth = 4;
SELECT @@session.max_sp_recursion_depth;
# create procedure to add rows

--disable_warnings
DROP PROCEDURE IF EXISTS sp_addRecords1;
--enable_warnings

DELIMITER //;

CREATE PROCEDURE sp_addRecords1 (IN var1 INT,IN var2 INT)
BEGIN
SELECT var1,var2;
IF var1 < var2 THEN
   CALL sp_addRecords1(var1+1,var2);
   SELECT var1,var2;
END IF;
END //

DELIMITER ;//


CALL sp_addRecords1(0,4);




--echo '#---------------------FN_DYNVARS_99_03----------------------#'
####################################################################
#  Check if max_sp_recursion_depth value is set to 10              #
####################################################################
SET @@max_sp_recursion_depth = 10;
# create procedure to add rows

--disable_warnings
DROP PROCEDURE IF EXISTS sp_addRecords2;
--enable_warnings

DELIMITER //;

CREATE PROCEDURE sp_addRecords2(IN var1 INT,IN var2 INT)
BEGIN
SELECT var1,var2;
IF var1 < var2 THEN
   CALL sp_addRecords2(var1+1,var2);
   SELECT var1,var2;
END IF;
END //

DELIMITER ;//


CALL sp_addRecords2(0,8);


--echo '#---------------------FN_DYNVARS_99_04----------------------#'
###############################################################################
#Check if max_sp_recursion_depth value is set lower then called recursion value              
###############################################################################


SET @@max_sp_recursion_depth = 4;
# create procedure to add rows
#DROP PROCEDURE  IF EXISTS  sp_addRecords1;

--disable_warnings
DROP PROCEDURE IF EXISTS sp_addRecords3;
--enable_warnings

DELIMITER //;

CREATE PROCEDURE sp_addRecords3 (IN var1 INT,IN var2 INT)
BEGIN
SELECT var1,var2;
IF var1 < var2 THEN
   CALL sp_addRecords3(var1+1,var2);
   SELECT var1,var2;
END IF;
END //

DELIMITER ;//

--echo Expected error 'SP Recursion limit'
--ERROR ER_SP_RECURSION_LIMIT
CALL sp_addRecords3(0,8);

#
# Cleanup
#

--echo ** Connection default **
connection default;

--echo ** Disconnecting test_con1, test_con2 **
disconnect test_con1;
disconnect test_con2;

--disable_warnings
DROP PROCEDURE IF EXISTS sp_addRecords;
DROP PROCEDURE IF EXISTS sp_addRecords1;
DROP PROCEDURE IF EXISTS sp_addRecords2;
DROP PROCEDURE IF EXISTS sp_addRecords3;
--enable_warnings

SET @@SESSION.max_sp_recursion_depth = @session_max_recursion_depth;