summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormalff/marcsql@weblab.(none) <>2006-07-31 12:11:08 -0700
committermalff/marcsql@weblab.(none) <>2006-07-31 12:11:08 -0700
commit2336834e08c98fcc3132b831054883fe01bb13cb (patch)
tree9cb7bf50baf1156807804a1bd1cca8d46063bacb
parentc867301b0d1ae4062cebfd1ef5c27b1afb1ba6a1 (diff)
parentab86e0b3cba9366bd2df3f35ef3cfc1651cd9217 (diff)
downloadmariadb-git-2336834e08c98fcc3132b831054883fe01bb13cb.tar.gz
Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime
into weblab.(none):/home/marcsql/TREE/mysql-5.0-21269
-rw-r--r--mysql-test/r/udf.result6
-rw-r--r--mysql-test/t/udf.test12
-rw-r--r--sql/sql_yacc.yy11
3 files changed, 29 insertions, 0 deletions
diff --git a/mysql-test/r/udf.result b/mysql-test/r/udf.result
index 484c42c41bf..d71e7ef2ce7 100644
--- a/mysql-test/r/udf.result
+++ b/mysql-test/r/udf.result
@@ -93,6 +93,12 @@ NULL
0R
FR
DROP TABLE bug19904;
+CREATE DEFINER=CURRENT_USER() FUNCTION should_not_parse
+RETURNS STRING SONAME "should_not_parse.so";
+ERROR HY000: Incorrect usage of SONAME and DEFINER
+CREATE DEFINER=someone@somewhere FUNCTION should_not_parse
+RETURNS STRING SONAME "should_not_parse.so";
+ERROR HY000: Incorrect usage of SONAME and DEFINER
End of 5.0 tests.
DROP FUNCTION metaphon;
DROP FUNCTION myfunc_double;
diff --git a/mysql-test/t/udf.test b/mysql-test/t/udf.test
index f3be08c8537..9d295d32831 100644
--- a/mysql-test/t/udf.test
+++ b/mysql-test/t/udf.test
@@ -109,6 +109,18 @@ SELECT myfunc_double(n) AS f FROM bug19904;
SELECT metaphon(v) AS f FROM bug19904;
DROP TABLE bug19904;
+#
+# Bug#21269: DEFINER-clause is allowed for UDF-functions
+#
+
+--error ER_WRONG_USAGE
+CREATE DEFINER=CURRENT_USER() FUNCTION should_not_parse
+RETURNS STRING SONAME "should_not_parse.so";
+
+--error ER_WRONG_USAGE
+CREATE DEFINER=someone@somewhere FUNCTION should_not_parse
+RETURNS STRING SONAME "should_not_parse.so";
+
--echo End of 5.0 tests.
#
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index a92d19ee58d..d497678cec3 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1256,6 +1256,17 @@ create_function_tail:
RETURNS_SYM udf_type UDF_SONAME_SYM TEXT_STRING_sys
{
LEX *lex=Lex;
+ if (lex->definer != NULL)
+ {
+ /*
+ DEFINER is a concept meaningful when interpreting SQL code.
+ UDF functions are compiled.
+ Using DEFINER with UDF has therefore no semantic,
+ and is considered a parsing error.
+ */
+ my_error(ER_WRONG_USAGE, MYF(0), "SONAME", "DEFINER");
+ YYABORT;
+ }
lex->sql_command = SQLCOM_CREATE_FUNCTION;
lex->udf.name = lex->spname->m_name;
lex->udf.returns=(Item_result) $2;