summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test')
-rw-r--r--mysql-test/r/sp-error.result70
-rw-r--r--mysql-test/t/sp-error.test110
-rw-r--r--mysql-test/t/sp.test18
3 files changed, 180 insertions, 18 deletions
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result
new file mode 100644
index 00000000000..ee99e871c3e
--- /dev/null
+++ b/mysql-test/r/sp-error.result
@@ -0,0 +1,70 @@
+delete from mysql.proc;
+create procedure proc1()
+set @x = 42;
+create function func1() returns int
+return 42;
+create procedure foo()
+create procedure bar() set @x=3;
+Can't create a PROCEDURE from within another stored routine
+create procedure foo()
+create function bar() returns double return 2.3;
+Can't create a FUNCTION from within another stored routine
+create procedure proc1()
+set @x = 42;
+PROCEDURE proc1 already exists
+create function func1() returns int
+return 42;
+FUNCTION func1 already exists
+alter procedure foo;
+PROCEDURE foo does not exist
+alter function foo;
+FUNCTION foo does not exist
+drop procedure foo;
+PROCEDURE foo does not exist
+drop function foo;
+FUNCTION foo does not exist
+call foo();
+PROCEDURE foo does not exist
+create procedure foo()
+foo: loop
+leave bar;
+end loop;
+LEAVE with no matching label: bar
+create procedure foo()
+foo: loop
+iterate bar;
+end loop;
+ITERATE with no matching label: bar
+create procedure foo()
+foo: loop
+foo: loop
+set @x=2;
+end loop foo;
+end loop foo;
+Redefining label foo
+create procedure foo()
+foo: loop
+set @x=2;
+end loop bar;
+End-label bar without match
+create procedure foo(out x int)
+begin
+declare y int;
+set x = y;
+end;
+Referring to uninitialized variable y
+create procedure foo(x int)
+select * from test.t1;
+SELECT in a stored procedure must have INTO
+create procedure foo()
+return 42;
+RETURN is only allowed in a FUNCTION
+create function foo() returns int
+begin
+declare x int;
+select max(c) into x from test.t;
+return x;
+end;
+Queries, like SELECT, INSERT, UPDATE (and others), are not allowed in a FUNCTION
+drop procedure proc1;
+drop function func1;
diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test
new file mode 100644
index 00000000000..e3577803a47
--- /dev/null
+++ b/mysql-test/t/sp-error.test
@@ -0,0 +1,110 @@
+#
+# Stored PROCEDURE error tests
+#
+
+# Make sure we don't have any procedures left.
+delete from mysql.proc;
+
+delimiter |;
+
+# 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 1250
+create procedure foo()
+ create procedure bar() set @x=3|
+--error 1250
+create procedure foo()
+ create function bar() returns double return 2.3|
+
+# Already exists
+--error 1251
+create procedure proc1()
+ set @x = 42|
+--error 1251
+create function func1() returns int
+ return 42|
+
+# Does not exist
+--error 1252
+alter procedure foo|
+--error 1252
+alter function foo|
+--error 1252
+drop procedure foo|
+--error 1252
+drop function foo|
+--error 1252
+call foo()|
+
+# LEAVE/ITERATE with no match
+--error 1255
+create procedure foo()
+foo: loop
+ leave bar;
+end loop|
+--error 1255
+create procedure foo()
+foo: loop
+ iterate bar;
+end loop|
+
+# Redefining label
+--error 1256
+create procedure foo()
+foo: loop
+ foo: loop
+ set @x=2;
+ end loop foo;
+end loop foo|
+
+# End label mismatch
+--error 1257
+create procedure foo()
+foo: loop
+ set @x=2;
+end loop bar|
+
+# Referring to undef variable
+--error 1258
+create procedure foo(out x int)
+begin
+ declare y int;
+ set x = y;
+end|
+
+# We require INTO in SELECTs (for now; this might change in the future)
+--error 1259
+create procedure foo(x int)
+ select * from test.t1|
+
+# RETURN in FUNCTION only
+--error 1260
+create procedure foo()
+ return 42|
+
+# Doesn't allow queries in FUNCTIONs (for now :-( )
+--error 1261
+create function foo() returns int
+begin
+ declare x int;
+ select max(c) into x from test.t;
+ return x;
+end|
+
+drop procedure proc1|
+drop function func1|
+
+delimiter ;|
diff --git a/mysql-test/t/sp.test b/mysql-test/t/sp.test
index 3b690f8b542..d56d5859940 100644
--- a/mysql-test/t/sp.test
+++ b/mysql-test/t/sp.test
@@ -213,16 +213,6 @@ until x = 0 end repeat|
drop procedure b2|
-# Btw, this should generate an error (for now; this might change in the future)
---error 1259
-create procedure b3(x int)
-repeat
- select * from test.t1; # No INTO!
- insert into test.t1 values (repeat("b3",3), x);
- set x = x-1;
-until x = 0 end repeat|
-
-
# Labelled WHILE with ITERATE (pointless really)
create procedure c(x int)
hmm: while x > 0 do
@@ -398,14 +388,6 @@ end|
#drop table t2|
drop procedure create_select|
-# 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"|
-
# A minimal, constant FUNCTION.
create function e() returns double
return 2.7182818284590452354|