mysql-server/mysql-test/t/sp-external.test
2025-03-05 14:31:37 +07:00

2774 lines
79 KiB
Text
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

--echo #
--echo # WL#15254: SQL syntax extensions to support external language routines
--echo #
DELIMITER //;
--echo #
--echo # Tests for LANGUAGE clause
--echo #
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE SQL
BEGIN RETURN a-1; END //
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_name = "foo" //
DROP FUNCTION foo//
--echo # SQL is default
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS where Language like "%JAVA%"//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_name = "foo" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION JAVASCRIPT(x INTEGER) RETURNS INTEGER DETERMINISTIC
LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION JAVASCRIPT//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'JAVASCRIPT'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT JAVASCRIPT(2)//
DROP FUNCTION JAVASCRIPT//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE PYTHON
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE RUBY
AS $$
x-1
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # Test lower-case
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE javascript
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # Test mixed-case
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE jAvaScRIpt
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # Any valid identifier can be used for language name
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE JAVA1
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE $NOLANG
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC
LANGUAGE $$JAVASCRIPT
AS $$
return x-1;
$$
//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE 123j
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE __
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC
LANGUAGE "JAVASCRIPT"
AS $$
return x-1;
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC
LANGUAGE 'JAVASCRIPT'
AS $$
return x-1;
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE " "
AS $$
return x-1;
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE J?
AS $$
return x-1;
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC
LANGUAGE \JAVASCRIPT
AS $$
return x-1;
$$
//
--echo # An identifier may not consist solely of digits
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE 123
AS $$
return x-1;
$$
//
--echo # MySQL allows multiple clauses for the same characteristics
--echo # (This is not according to SQL standard). Last one will take effect.
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
LANGUAGE JAVASCRIPT DETERMINISTIC LANGUAGE SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE SQL DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # Multiple languages in one clause is not allowed
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE SQL DETERMINISTIC LANGUAGE JAVASCRIPT PYTHON
AS $$
return x-1;
$$
//
--echo Check "weird" white space before and after JAVASCRIPT.
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE
JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE
JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE JAVASCRIPT DETERMINISTIC
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE
-- Comment
JAVASCRIPT
-- Comment
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo The language will here be interpreted to be BEGIN
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE
BEGIN RETURN a-1; END //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
LANGUAGE SQL DETERMINISTIC LANGUAGE
BEGIN RETURN a-1; END //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE
BEGIN a-1; END //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE
AS $$
return x-1;
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
LANGUAGE JAVASCRIPT DETERMINISTIC LANGUAGE
AS $$
return x-1;
$$
//
--echo #Combinations with other characteristics
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC NO SQL
LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC NO SQL
LANGUAGE SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE SQL NO SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE JAVASCRIPT
CONTAINS SQL
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC READS SQL DATA
LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE JAVASCRIPT
MODIFIES SQL DATA
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE SQL
CONTAINS SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC READS SQL DATA
LANGUAGE SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE SQL
MODIFIES SQL DATA
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER NOT DETERMINISTIC LANGUAGE SQL
BEGIN RETURN a-1; END //
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER NOT DETERMINISTIC
LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # This is not SQL
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE SQL
AS $$ return a-1; $$ //
--echo # This is not Javascript
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
BEGIN RETURN a-1; END //
--echo # Repeat test cases for PROCEDURE
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_name = "bar" //
DROP PROCEDURE bar//
--echo # SQL is default
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
--echo # Currently, no other language than SQL is supported
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS where Language like "%JAVA%"//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_name = "bar" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP PROCEDURE bar//
CREATE PROCEDURE JAVASCRIPT(a INTEGER) DETERMINISTIC
LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure JAVASCRIPT//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'JAVASCRIPT'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL JAVASCRIPT(2)//
DROP procedure JAVASCRIPT//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE PYTHON
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE RUBY
AS $$ b = a $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # Test lower-case
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE javascript
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # Test mixed-case
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE jAvaScRIpt
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # Any valid identifier can be used for language name
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE JAVA1
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE $NOLANG
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE $$JAVASCRIPT
AS $$ let b = a; $$ //
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE 123j
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE __
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE "JAVASCRIPT"
AS $$ let b = a; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE 'JAVASCRIPT'
AS $$ let b = a; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE " "
AS $$ let b = a; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE J?
AS $$ let b = a; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE \JAVASCRIPT
AS $$ let b = a; $$ //
--echo # An identifier may not consist solely of digits
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE 123
AS $$ let b = a; $$ //
--echo # MySQL allows multiple clauses for the same characteristics
--echo # (This is not according to SQL standard). Last one will take effect.
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE JAVASCRIPT DETERMINISTIC LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE SQL DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # Multiple languages in one clause is not allowed
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE SQL DETERMINISTIC LANGUAGE JAVASCRIPT PYTHON
AS $$ b = a $$ //
--echo Check "weird" white space before and after JAVASCRIPT.
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE
JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE
JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE JAVASCRIPT DETERMINISTIC
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE
-- Comment
JAVASCRIPT
-- Comment
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo The language will here be interpreted to be BEGIN
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE
BEGIN DECLARE b INTEGER DEFAULT a; END //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE SQL DETERMINISTIC LANGUAGE
BEGIN DECLARE b INTEGER DEFAULT a; END //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE
BEGIN a-1; END //
--echo #Combinations with other characteristics
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC NO SQL
LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC NO SQL
LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE SQL NO SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE JAVASCRIPT
CONTAINS SQL
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC READS SQL DATA
LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE JAVASCRIPT
MODIFIES SQL DATA
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE SQL
CONTAINS SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC READS SQL DATA
LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) DETERMINISTIC LANGUAGE SQL
MODIFIES SQL DATA
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) NOT DETERMINISTIC LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
DROP PROCEDURE bar//
CREATE PROCEDURE bar(a INTEGER) NOT DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$ let b = a; $$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # This is not SQL
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
LANGUAGE SQL DETERMINISTIC LANGUAGE SQL
$$ let b = a; $$ //
--echo # This is not Javascript
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
BEGIN DECLARE b INTEGER DEFAULT a; END //
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE SQL
BEGIN DECLARE b INTEGER DEFAULT a; END //
--echo # Changing language will not be allowed
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER DETERMINISTIC LANGUAGE SQL
BEGIN RETURN a-1; END //
--error ER_SP_NO_ALTER_LANGUAGE
ALTER FUNCTION foo LANGUAGE JAVASCRIPT //
SHOW CREATE FUNCTION foo//
ALTER FUNCTION foo LANGUAGE SQL NO SQL //
SHOW CREATE FUNCTION foo//
--error ER_PARSE_ERROR
ALTER FUNCTION foo LANGUAGE NO SQL //
DROP FUNCTION foo //
--error ER_SP_NO_ALTER_LANGUAGE
ALTER PROCEDURE bar LANGUAGE JAVASCRIPT //
ALTER PROCEDURE bar LANGUAGE SQL NO SQL //
SHOW CREATE PROCEDURE bar//
--error ER_PARSE_ERROR
ALTER PROCEDURE bar LANGUAGE NO SQL //
DROP PROCEDURE bar //
--echo #
--echo # Tests for inline code in external language
--echo #
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$ //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS 'return x-1;' //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS "return x-1;" //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS '
return x-1;
' //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
"
return x-1;
" //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo Routine body must come after characteristics
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
AS $$
return x-1;
$$
DETERMINISTIC LANGUAGE JAVASCRIPT
//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
'
return "$$" + a + "$$";
'
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
return "$$" + a + "$$";
$code$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$coDE$
return "$$" + a + "$$";
$coDE$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$CODE$
return "$$" + a + "$$";
$CODE$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$tag$
return "$$" + a + "$$";
$tag$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$TAG$
return "$$" + a + "$$";
$TAG$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$NULL$
return "$$" + a + "$$";
$NULL$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$abdc_1234$
return "$$" + a + "$$";
$abdc_1234$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$_a$
return "$$" + a + "$$";
$_a$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$_$
return "$$" + a + "$$";
$_$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$0$
return "$$" + a + "$$";
$0$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$100$
return "$$" + a + "$$";
$100$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$12345678901234$
return "$$" + a + "$$";
$12345678901234$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM$
return "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$¡$
return "$$" + a + "$$";
$¡$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM¡™£¢∞§¶•ªº≠œ∑´®†¥¨ˆøπ“«åß∂ƒ©˙∆˚¬…æΩ≈ç√∫µ≤≥÷fifl‡°·—±ÅÍÎÏ˝ÓÔÒÚÆ¸˛Ç◊ı¯˘¿$
return "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM¡™£¢∞§¶•ªº≠œ∑´®†¥¨ˆøπ“«åß∂ƒ©˙∆˚¬…æΩ≈ç√∫µ≤≥÷fifl‡°·—±ÅÍÎÏ˝ÓÔÒÚÆ¸˛Ç◊ı¯˘¿$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = 3;
const $y$ = 4;
return $x + $y$ + a;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
const x$$ = 3;
const $y$$z = 4;
return x$$ + $y$$z + a;
$code$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
$$
return x-1;
$$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE 'return x-1;' //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE return x-1 //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC AS LANGUAGE JAVASCRIPT
"return x-1;" //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
$code$
return "$$" + a + "$$";
$code$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $
return x-1;
$ //
--echo # Test conflicting dollar quotes
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return "$$" + a + "$$";
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
return "$code$" + a + "$code$";
$code$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return x-1;
$code$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
return "$$" + a + "$$";
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$Code$
return "$$" + a + "$$";
$CODE$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$CodE$
return "$$" + a + "$$";
$code$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = 3;
const $y$ = 4;
return $x + $y$ + a;
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
const x$$ = 3;
const $y$$z = 4;
return x$$ + $y$$z + a;
$
//
# Tag differs in last char
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM™∞•≠∑†π“∂ƒ˙∆˚…Ω≈√∫≤≥fifl‡—˝˛ı˘$
return "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM™∞•≠∑†π“∂ƒ˙∆˚…Ω≈√∫≤≥fifl‡—˝˛ı˗$
//
--echo Check cases with invalid dollar tags
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $+a$
return x-1;
$+a$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a-$
return x-1;
$a-$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a(b$
return x-1;
$a(b$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a~b$
return x-1;
$a~b$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return x-1;
$$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $ $
return x-1;
$ $ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $I'm$
return x-1;
$I'm$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $'Hi'$
return x-1;
$'Hi'$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a"b"$
return x-1;
$a"b"$ //
--echo # Test multi-byte characters in code (∂ is 3 bytes in utf8mb3)
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return "∂" + a + "$∂$";
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
return "∂" + a + "$∂$$";
$code$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
return "∂" + a + "$∂$$∂";
$code$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$∂
return "∂" + a + "$∂$";
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo Test multi-byte characters in quote tags
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $∂$
return "∂" + a + "∂$";
$∂$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $co∂e$
return "∂" + a + "$∂$$";
$co∂e$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
# The 4-byte utf8mb3 characters below may not be correctly displayed in an editor
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀$
return "😀$😔" + a + "😀$😔$";
$😀$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀😔$
return "😀$😔" + a + "😀$😔$";
$😀😔$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀$
return "$x😀😔" + a + "$x😀😔$";
$x😀$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀x$
return "$😀x😔$" + a + "$😀😔x$";
$😀x$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀y$
return "$x😀😔y$" + a + "$x😀y😔$";
$x😀y$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀y😔$
return "😀😔$" + a + "😀$😔$";
$x😀y😔$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀😔$
return "😀$😔" + a + "😀$😔$";
$😔😀$
//
--echo # Escape sequences is not supported in dollar quoted strings
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
return "\$$" + a + "\$code$";
$$
//
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
return "\$$" + a + "\$code$";
$code$
//
--echo # Check some variants that should give external parse error
--echo # if the language is supported
CREATE FUNCTION foo(x INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$ rtrn "$$" + x + "$foo$"; $code$ //
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
CREATE FUNCTION foo(x INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = x,
const $y = 1
return $x + $y;
$$
//
SHOW CREATE FUNCTION foo//
--replace_column 6 <modified> 7 <created>
SHOW FUNCTION STATUS WHERE Name = 'foo'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
SELECT foo(2)//
DROP FUNCTION foo//
--echo # Multiple occurrences of routine body is not allowed
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS 'return "$$" + a + "$foo$";'
AS $$ return a-1; $$ //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS VARCHAR(20)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$ return "$$" + a + "$foo$"; $code$
AS $$ return a-1; $$ //
--echo # Both external code and SQL code is not allowed
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$ return a-1; $$
BEGIN RETURN a-1; END //
--error ER_PARSE_ERROR
CREATE FUNCTION foo(a INTEGER) RETURNS INTEGER
DETERMINISTIC LANGUAGE SQL
AS $$ return a-1; $$
BEGIN RETURN a-1; END //
--echo # Parse error if no routine body
--error ER_PARSE_ERROR
CREATE FUNCTION foo() RETURNS INTEGER
DETERMINISTIC LANGUAGE JAVASCRIPT//
--echo # Repeat test cases for procedures
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = a;
$$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS 'let b = a;' //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS "let b = a;" //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS '
let b = a;
' //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
"
let b = a;
" //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo Routine body must come after characteristics
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
AS $$
let b = a;
$$
DETERMINISTIC LANGUAGE JAVASCRIPT
//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
'
let b = "$$" + a + "$$";
'
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
let b = "$$" + a + "$$";
$code$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$coDE$
let b = "$$" + a + "$$";
$coDE$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$CODE$
let b = "$$" + a + "$$";
$CODE$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$tag$
let b = "$$" + a + "$$";
$tag$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$TAG$
let b = "$$" + a + "$$";
$TAG$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$NULL$
let b = "$$" + a + "$$";
$NULL$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$abdc_1234$
let b = "$$" + a + "$$";
$abdc_1234$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$_a$
let b = "$$" + a + "$$";
$_a$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$_$
let b = "$$" + a + "$$";
$_$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$0$
let b = "$$" + a + "$$";
$0$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$100$
let b = "$$" + a + "$$";
$100$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$12345678901234$
let b = "$$" + a + "$$";
$12345678901234$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM$
let b = "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$¡$
let b = "$$" + a + "$$";
$¡$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM¡™£¢∞§¶•ªº≠œ∑´®†¥¨ˆøπ“«åß∂ƒ©˙∆˚¬…æΩ≈ç√∫µ≤≥÷fifl‡°·—±ÅÍÎÏ˝ÓÔÒÚÆ¸˛Ç◊ı¯˘¿$
let b = "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM¡™£¢∞§¶•ªº≠œ∑´®†¥¨ˆøπ“«åß∂ƒ©˙∆˚¬…æΩ≈ç√∫µ≤≥÷fifl‡°·—±ÅÍÎÏ˝ÓÔÒÚÆ¸˛Ç◊ı¯˘¿$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = 3;
const $y$ = 4;
let b = $x + $y$ + a;
$$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
const x$$ = 3;
const $y$$z = 4;
let b = x$$ + $y$$z + a;
$code$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
$$
let b = a;
$$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE 'let b = a;' //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE let b = a //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC AS LANGUAGE JAVASCRIPT
"let b = a;" //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
$code$
let b = "$$" + a + "$$";
$code$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $
let b = a;
$ //
--echo # Test conflicting dollar quotes
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = "$$" + a + "$$";
$$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
let b = "$code$" + a + "$code$";
$code$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = a;
$code$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
let b = "$$" + a + "$$";
$$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$Code$
let b = "$$" + a + "$$";
$CODE$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$CodE$
let b = "$$" + a + "$$";
$code$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = 3;
const $y$ = 4;
let b = $x + $y$ + a;
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$code$
const x$$ = 3;
const $y$$z = 4;
let b = x$$ + $y$$z + a;
$
//
# Tag differs in last char
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM™∞•≠∑†π“∂ƒ˙∆˚…Ω≈√∫≤≥fifl‡—˝˛ı˘$
let b = "$$" + a + "$$";
$1234567890qwertyuiopasdfghjklzxcvbnm_QWERTYUIOPASDFGHJKLZXCVBNM™∞•≠∑†π“∂ƒ˙∆˚…Ω≈√∫≤≥fifl‡—˝˛ı˗$
//
--echo Check cases with invalid dollar tags
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $+a$
let b = a;
$+a$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a-$
let b = a;
$a-$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a(b$
let b = a;
$a(b$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a~b$
let b = a;
$a~b$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = a;
$$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $ $
let b = a;
$ $ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $I'm$
let b = a;
$I'm$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $'Hi'$
let b = a;
$'Hi'$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $a"b"$
let b = a;
$a"b"$ //
--echo # Test multi-byte characters in code (∂ is 3 bytes in utf8mb3)
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = "∂" + a + "$∂$";
$$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
let b = "∂" + a + "$∂$$";
$code$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
let b = "∂" + a + "$∂$$∂";
$code$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$∂
let b = "∂" + a + "$∂$";
$$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo Test multi-byte characters in quote tags
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $∂$
let b = "∂" + a + "∂$";
$∂$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $co∂e$
let b = "∂" + a + "$∂$$";
$co∂e$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
# The 4-byte utf8mb3 characters below may not be correctly displayed in an editor
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀$
let b = "😀$😔" + a + "😀$😔$";
$😀$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀😔$
let b = "😀$😔" + a + "😀$😔$";
$😀😔$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀$
let b = "$x😀😔" + a + "$x😀😔$";
$x😀$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀x$
let b = "$😀x😔$" + a + "$😀😔x$";
$😀x$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀y$
let b = "$x😀😔y$" + a + "$x😀y😔$";
$x😀y$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $x😀y😔$
let b = "😀😔$" + a + "😀$😔$";
$x😀y😔$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $😀😔$
let b = "😀$😔" + a + "😀$😔$";
$😔😀$
//
--echo # Escape sequences is not supported in dollar quoted strings
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
let b = "\$$" + a + "\$code$";
$$
//
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$
let b = "\$$" + a + "\$code$";
$code$
//
--echo # Check some variants that should give external parse error
--echo # if the language is supported
CREATE PROCEDURE bar(x INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$ let b := "$$" + x + "$foo$"; $code$ //
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
CREATE PROCEDURE bar(x INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$
const $x = x,
const $y = 1
let b = $x + $y;
$$
//
SHOW CREATE procedure bar//
--replace_column 6 <modified> 7 <created>
SHOW PROCEDURE STATUS WHERE Name = 'bar'//
SELECT routine_name, routine_type, data_type, routine_body,
external_name, external_language, parameter_style, routine_definition
FROM information_schema.routines
WHERE routine_schema = "test" //
--error ER_LANGUAGE_COMPONENT_NOT_AVAILABLE
CALL bar(2)//
DROP procedure bar//
--echo # Multiple occurrences of routine body is not allowed
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS 'let b = "$$" + a + "$foo$";'
AS $$ let b = a-1; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $code$ let b = "$$" + a + "$foo$"; $code$
AS $$ let b = a-1; $$ //
--echo # Both external code and SQL code is not allowed
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE JAVASCRIPT
AS $$ let b = a-1; $$
BEGIN RETURN a-1; END //
--error ER_PARSE_ERROR
CREATE PROCEDURE bar(a INTEGER)
DETERMINISTIC LANGUAGE SQL
AS $$ let b = a-1; $$
BEGIN RETURN a-1; END //
--echo # Parse error if no routine body
--error ER_PARSE_ERROR
CREATE PROCEDURE bar()
DETERMINISTIC LANGUAGE JAVASCRIPT//
--echo # Check that dollar quotes can not be used in other context
--error ER_PARSE_ERROR
CREATE FUNCTION $$foo(x INTEGER) INTEGER DETERMINISTIC
LANGUAGE JAVASCRIPT AS $$ let b = x-1; $$ //
--error ER_PARSE_ERROR
CREATE PROCEDURE $$bar(a INTEGER) DETERMINISTIC
LANGUAGE JAVASCRIPT AS $$ let b = a; $$ //
delimiter ;//
--error ER_PARSE_ERROR
SELECT $$Hello world!$$;
--error ER_PARSE_ERROR
SELECT $hi$Hello world!$hi$;
--echo # Check that dollars can still be used in identifiers
SELECT 1 AS $hi;
SELECT 1 AS h$i;
SELECT 1 AS h$$i;
SELECT 1 AS h$i$;
--echo # Identifiers matching dollar quotes can no longer be used
--error ER_PARSE_ERROR
SELECT 1 AS $$;
--error ER_PARSE_ERROR
SELECT 1 AS $hi$;
--error ER_PARSE_ERROR
SELECT 1 AS $h$i;
--echo # ... unless quoted
SELECT 1 AS `$$`;
SELECT 1 AS `$hi$`;
SELECT 1 AS `$h$i`;