PL/SQL parser (MDEV-10142)

[MDEV-12089] sql_mode=ORACLE: Understand optional routine name after the END keyword Created: 2017-02-20  Updated: 2020-08-27  Resolved: 2017-02-20

Status: Closed
Project: MariaDB Server
Component/s: Parser, Stored routines
Affects Version/s: None
Fix Version/s: 10.3.0

Type: Technical task Priority: Major
Reporter: Alexander Barkov Assignee: Alexander Barkov
Resolution: Fixed Votes: 0
Labels: Compatibility

Sprint: 10.2.2-3, 10.2.2-1, 10.2.2-2, 10.2.2-4, 10.1.18

 Description   

When running with sql_mode=ORACLE, MariaDB (the bb-10.2-compatibility branch) does not understand the optional function or procedure name after the END keyword which ends the entire routine definition. We'll extend the parser to understand the optional name, so this script is parsed without syntax errors:

SET sql_mode=ORACLE;
DROP PROCEDURE p1;
DELIMITER /
CREATE PROCEDURE p1 AS
BEGIN
END p1; -- Notice p1
/
DELIMITER ;

In case of stand-alone routines we'll also allow qualified names: END test.p1;

Originally this task included changes for package routines, but it does not any more:

Optional routine names are also possible inside a package body definition:

DELIMITER $$
CREATE PACKAGE BODY test2 AS
  FUNCTION f1 RETURN INT AS
  BEGIN
    RETURN 10;
  END f1;
  PROCEDURE p1 AS
  BEGIN
    NULL;
  END p1;
END test2;
$$
DELIMITER ;
DROP PACKAGE test2;

In case of package routines the name specified in END cannot be qualified.

If the name specified in CREATE does not match the name specified in END, an error will be reported.

Under terms of this patch we'll only fix traditional (stand-alone) stored functions and procedures.
Handling the name after the END for package routines will be done in package related tasks (e.g. MDEV-10591 or MDEV-11952)



 Comments   
Comment by Alexander Barkov [ 2017-02-20 ]

Pushed to bb-10.2-compatibility

Generated at Thu Feb 08 07:55:01 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.