Skip to content

Commit 0505086

Browse files
committed
A clean-up for MDEV-10654 add support IN, OUT, INOUT parameter qualifiers for stored functions
Changes: 1. Enabling IN/OUT/INOUT mode for sql_mode=DEFAULT, adding tests for sql_mode=DEFAULT based by mostly translating compat/oracle.sp-inout.test to SQL/PSM with minor changes (e.g. testing trigger OLD.column and NEW.column as IN/OUT parameters). 2. Removing duplicate grammar: sp_pdparam and sp_fdparam implemented exactly the same syntax after - the first patch for MDEV-10654 (for sql_mode=ORACLE) - the change #1 from this patch (for sql_mode=DEFAULT) Removing separate rules and adding a single "sp_param" rule instead, which now covers both PRDEDURE and FUNCTION parameters (and CURSOR parameters as well!). 3. Adding a helper rule sp_param_name_and_mode, which is a combination of the parameter name and the IN/OUT/INOUT mode. It allows to simplify the grammer a bit. 4. The first patch unintentionally allowed IN/OUT/INOUT mode to be specified in CURSOR parameters. This is good for the IN keyword - it is allowed in PL/SQL CURSORs. This is not good the the OUT/INOUT keywords - they should not be allowed. Adding a additional symantic post-check.
1 parent 4572dc2 commit 0505086

File tree

8 files changed

+4254
-81
lines changed

8 files changed

+4254
-81
lines changed

mysql-test/main/sp-cursor.result

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,3 +737,43 @@ rec.en1
737737
c
738738
DROP PROCEDURE p1;
739739
DROP TABLE t1;
740+
#
741+
# Start of 10.8 tests
742+
#
743+
#
744+
# MDEV-10654 IN, OUT, INOUT parameters in CREATE FUNCTION
745+
#
746+
BEGIN NOT ATOMIC
747+
DECLARE va INT;
748+
DECLARE cur CURSOR (IN a INT) FOR SELECT a FROM dual;
749+
OPEN cur(1);
750+
FETCH cur INTO va;
751+
CLOSE cur;
752+
SELECT va;
753+
END;
754+
$$
755+
va
756+
1
757+
BEGIN NOT ATOMIC
758+
DECLARE va INT;
759+
DECLARE cur CURSOR (OUT a INT) FOR SELECT a FROM dual;
760+
OPEN cur(1);
761+
FETCH cur INTO va;
762+
CLOSE cur;
763+
SELECT va;
764+
END;
765+
$$
766+
ERROR 42000: This version of MariaDB doesn't yet support 'OUT/INOUT cursor parameter'
767+
BEGIN NOT ATOMIC
768+
DECLARE va INT;
769+
DECLARE cur CURSOR (INOUT a INT) FOR SELECT a FROM dual;
770+
OPEN cur(1);
771+
FETCH cur INTO va;
772+
CLOSE cur;
773+
SELECT va;
774+
END;
775+
$$
776+
ERROR 42000: This version of MariaDB doesn't yet support 'OUT/INOUT cursor parameter'
777+
#
778+
# End of 10.8 tests
779+
#

mysql-test/main/sp-cursor.test

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,3 +744,54 @@ DELIMITER ;$$
744744
CALL p1();
745745
DROP PROCEDURE p1;
746746
DROP TABLE t1;
747+
748+
749+
--echo #
750+
--echo # Start of 10.8 tests
751+
--echo #
752+
753+
--echo #
754+
--echo # MDEV-10654 IN, OUT, INOUT parameters in CREATE FUNCTION
755+
--echo #
756+
757+
DELIMITER $$;
758+
BEGIN NOT ATOMIC
759+
DECLARE va INT;
760+
DECLARE cur CURSOR (IN a INT) FOR SELECT a FROM dual;
761+
OPEN cur(1);
762+
FETCH cur INTO va;
763+
CLOSE cur;
764+
SELECT va;
765+
END;
766+
$$
767+
DELIMITER ;$$
768+
769+
DELIMITER $$;
770+
--error ER_NOT_SUPPORTED_YET
771+
BEGIN NOT ATOMIC
772+
DECLARE va INT;
773+
DECLARE cur CURSOR (OUT a INT) FOR SELECT a FROM dual;
774+
OPEN cur(1);
775+
FETCH cur INTO va;
776+
CLOSE cur;
777+
SELECT va;
778+
END;
779+
$$
780+
DELIMITER ;$$
781+
782+
DELIMITER $$;
783+
--error ER_NOT_SUPPORTED_YET
784+
BEGIN NOT ATOMIC
785+
DECLARE va INT;
786+
DECLARE cur CURSOR (INOUT a INT) FOR SELECT a FROM dual;
787+
OPEN cur(1);
788+
FETCH cur INTO va;
789+
CLOSE cur;
790+
SELECT va;
791+
END;
792+
$$
793+
DELIMITER ;$$
794+
795+
--echo #
796+
--echo # End of 10.8 tests
797+
--echo #

0 commit comments

Comments
 (0)