summaryrefslogtreecommitdiff
path: root/mysql-test/t/sp-error.test
blob: ab3ee6a9ac61bdc35c08ee4600057e4f144c973f (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
#
# Stored PROCEDURE error tests
#

# Make sure we don't have any procedures left.
delete from mysql.proc;

delimiter |;

# This should give three syntax errors (sometimes crashed; bug #643)
# (Unfortunately, this is not a 100% test, on some platforms this
#  passed despite the bug.)
--error 1064
create procedure syntaxerror(t int)|
--error 1064
create procedure syntaxerror(t int)|
--error 1064
create procedure syntaxerror(t int)|

# Check that we get the right error, i.e. UDF declaration parses correctly,
# but foo.so doesn't exist.
# QQ This generates an error message containing a misleading errno which
#    might vary between systems (it usually doesn't have anything to do with
#    the actual failing dlopen()).
#--error 1126
#create function foo returns real soname "foo.so"|

create procedure proc1()
  set @x = 42|

create function func1() returns int
  return 42|

# Can't create recursively
--error 1279
create procedure foo()
  create procedure bar() set @x=3|
--error 1279
create procedure foo()
  create function bar() returns double return 2.3|

# Already exists
--error 1280
create procedure proc1()
  set @x = 42|
--error 1280
create function func1() returns int
  return 42|

drop procedure proc1|
drop function func1|

# Does not exist
--error 1281
alter procedure foo|
--error 1281
alter function foo|
--error 1281
drop procedure foo|
--error 1281
drop function foo|
--error 1281
call foo()|
drop procedure if exists foo|

# LEAVE/ITERATE with no match
--error 1284
create procedure foo()
foo: loop
  leave bar;
end loop|
--error 1284
create procedure foo()
foo: loop
  iterate bar;
end loop|

# Redefining label
--error 1285
create procedure foo()
foo: loop
  foo: loop
    set @x=2;
  end loop foo;
end loop foo|

# End label mismatch
--error 1286
create procedure foo()
foo: loop
  set @x=2;
end loop bar|

# Referring to undef variable
--error 1287
create procedure foo(out x int)
begin
  declare y int;
  set x = y;
end|

# We require INTO in SELECTs for some older clients (as mysql and mysqltest,
# for now).
create procedure foo()
begin
  select name from mysql.proc;
  select type from mysql.proc;
end|
--error 1288
call foo()|
drop procedure foo|

# RETURN in FUNCTION only
--error 1289
create procedure foo()
  return 42|

# Doesn't allow queries in FUNCTIONs (for now :-( )
--error 1290
create function foo() returns int
begin
  declare x int;
  select max(c) into x from test.t;
  return x;
end|

# Wrong number of arguments
create procedure p(x int)
  insert into test.t1 values (x)|
create function f(x int) returns int
  return x+42|

--error 1294
call p()|
--error 1294
call p(1, 2)|
--error 1294
select f()|
--error 1294
select f(1, 2)|

drop procedure p|
drop function f|

--error 1295
create procedure p(val int, out res int)
begin
  declare x int default 0;
  declare continue handler for foo set x = 1;

  insert into test.t1 values (val);
  if (x) then
    set res = 0;
  else
    set res = 1;
  end if;
end|

--error 1295
create procedure p(val int, out res int)
begin
  declare x int default 0;
  declare foo condition for 1146;
  declare continue handler for bar set x = 1;

  insert into test.t1 values (val);
  if (x) then
    set res = 0;
  else
    set res = 1;
  end if;
end|

delimiter ;|