summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorunknown <pem@mysql.com>2003-03-05 19:45:17 +0100
committerunknown <pem@mysql.com>2003-03-05 19:45:17 +0100
commitf74b36a24266e290cf23c7d06333c3a558e33af9 (patch)
treee234a7655df51a3c25765f6ba7d58d0148fbd99c /mysql-test
parentf519382d2bf276a9beb5d123fde93ec4cdfdefea (diff)
downloadmariadb-git-f74b36a24266e290cf23c7d06333c3a558e33af9.tar.gz
Improved error handling regarding SPs (with info like names etc in the output).
Disabled queries in FUNCTIONs. include/mysqld_error.h: New error message for queries in FUNCTIONs. mysql-test/t/sp.test: Moved error tests to sp-error.test. sql/share/czech/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/danish/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/dutch/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/english/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/estonian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/french/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/german/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/greek/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/hungarian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/italian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/japanese/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/korean/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/norwegian-ny/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/norwegian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/polish/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/portuguese/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/romanian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/russian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/serbian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/slovak/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/spanish/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/swedish/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/share/ukrainian/errmsg.txt: New error message for queries in FUNCTIONs. Improved most of the SP error messages with added info. sql/sp_head.cc: Added debug output to sp_instr_jump::execute(). (Moved from sp_head.h) sql/sp_head.h: Moved sp_instr_jump::execute() to sp_head.cc. sql/sql_lex.h: Added SQLCOM_CREATE_SPFUNCTION (for improved error handling). sql/sql_parse.cc: Improved error handling regarding SPs (adding info like names etc in output). sql/sql_yacc.yy: Improved error handling regarding SPs (adding info like names etc in output). Disabled queries in FUNCTIONS (since it can't work anyway).
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|