1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-08 11:22:35 +03:00

MDEV-32101 CREATE PACKAGE [BODY] for sql_mode=DEFAULT

This patch adds PACKAGE support with SQL/PSM dialect for sql_mode=DEFAULT:

- CREATE PACKAGE
- DROP PACKAGE
- CREATE PACKAGE BODY
- DROP PACKAGE BODY
- Package function and procedure invocation from outside of the package:
    -- using two step identifiers
    SELECT pkg.f1();
    CALL pkg.p1()

    -- using three step identifiers
    SELECT db.pkg.f1();
    CALL db.pkg.p1();

This is a non-standard MariaDB extension.

However, later this code can be used to implement
the SQL Standard and DB2 dialects of CREATE MODULE.
This commit is contained in:
Alexander Barkov
2023-09-04 15:28:50 +04:00
parent 9bd95e914f
commit aed9c656a9
21 changed files with 4866 additions and 3547 deletions

View File

@@ -157,6 +157,7 @@ public:
}
virtual enum_sp_type type() const= 0;
virtual LEX_CSTRING type_lex_cstring() const= 0;
virtual enum_sql_command sqlcom_create() const= 0;
virtual enum_sql_command sqlcom_drop() const= 0;
virtual LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const
{
@@ -257,6 +258,7 @@ public:
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("PROCEDURE")};
return m_type_str;
}
enum_sql_command sqlcom_create() const { return SQLCOM_CREATE_PROCEDURE; }
enum_sql_command sqlcom_drop() const { return SQLCOM_DROP_PROCEDURE; }
LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const;
const char *show_create_routine_col1_caption() const
@@ -308,6 +310,7 @@ public:
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("FUNCTION")};
return m_type_str;
}
enum_sql_command sqlcom_create() const { return SQLCOM_CREATE_FUNCTION; }
enum_sql_command sqlcom_drop() const { return SQLCOM_DROP_FUNCTION; }
LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const;
const char *show_create_routine_col1_caption() const
@@ -378,6 +381,7 @@ public:
static LEX_CSTRING m_type_str= {STRING_WITH_LEN("PACKAGE")};
return m_type_str;
}
enum_sql_command sqlcom_create() const { return SQLCOM_CREATE_PACKAGE; }
enum_sql_command sqlcom_drop() const { return SQLCOM_DROP_PACKAGE; }
LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const
{
@@ -412,6 +416,7 @@ public:
static LEX_CSTRING m_type_str= {STRING_WITH_LEN("PACKAGE BODY")};
return m_type_str;
}
enum_sql_command sqlcom_create() const { return SQLCOM_CREATE_PACKAGE_BODY; }
enum_sql_command sqlcom_drop() const { return SQLCOM_DROP_PACKAGE_BODY; }
LEX_CSTRING empty_body_lex_cstring(sql_mode_t mode) const
{
@@ -446,6 +451,7 @@ public:
static LEX_CSTRING m_type_str= { STRING_WITH_LEN("TRIGGER")};
return m_type_str;
}
enum_sql_command sqlcom_create() const { return SQLCOM_CREATE_TRIGGER; }
enum_sql_command sqlcom_drop() const { return SQLCOM_DROP_TRIGGER; }
MDL_key::enum_mdl_namespace get_mdl_type() const
{