MySQL 9.7.0
Source Code Documentation
sql_cmd_ddl.h
Go to the documentation of this file.
1/* Copyright (c) 2017, 2026, Oracle and/or its affiliates.
2
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License, version 2.0,
5 as published by the Free Software Foundation.
6
7 This program is designed to work with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the program and your derivative works with the
12 separately licensed software that they have either included with
13 the program or referenced in the documentation.
14
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License, version 2.0, for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
23
24#ifndef SQL_CMD_DDL_INCLUDED
25#define SQL_CMD_DDL_INCLUDED
26
27#include <cassert>
28
29#include "lex_string.h"
30#include "my_sqlcommand.h"
31#include "sql/sql_cmd.h"
32
33class THD;
34
35class Sql_cmd_ddl : public Sql_cmd {
36 public:
37 enum enum_sql_cmd_type sql_cmd_type() const override {
38 /*
39 Somewhat unsurprisingly, anything sub-classed to Sql_cmd_ddl
40 identifies as DDL by default.
41 */
42 return SQL_CMD_DDL;
43 }
44};
45
46/**
47 This is a dummy class for old-style commands whose code is in sql_parse.cc,
48 not in the execute() function. This Sql_cmd sub-class presently exists
49 solely to provide a correct sql_cmd_type() for the command; it does nothing
50 else.
51*/
52class Sql_cmd_ddl_dummy final : public Sql_cmd_ddl {
53 private:
55
56 public:
58 assert(my_sql_command == SQLCOM_END); // ensure value was not set up yet
59 my_sql_command = scc;
60 }
61
63 assert(my_sql_command != SQLCOM_END); // ensure value was set up
64 return my_sql_command;
65 }
66
67 // Error: we should never get here! (see explanation above)
68 bool execute(THD *thd [[maybe_unused]]) override {
69 assert(false);
70 return false;
71 }
72};
73
74class sp_name;
75
76class Sql_cmd_create_library final : public Sql_cmd_ddl {
77 public:
78 Sql_cmd_create_library(THD *thd, bool if_not_exists, sp_name *name,
80 LEX_STRING source_code, bool is_binary);
81
84 }
85
86 bool execute(THD *thd) override;
87
88 private:
92 // In order to support prepare of routines that contain CREATE LIBRARY
93 // statements, we need to keep a copy of the source code and the comment.
97};
98
99class Sql_cmd_alter_library final : public Sql_cmd_ddl {
100 public:
102
105 }
106
107 bool execute(THD *thd) override;
108
109 private:
111 // In order to support prepare of routines that contain CREATE and ALTER
112 // LIBRARY statements, we need to keep a copy of the comment.
114};
115
116class Sql_cmd_drop_library final : public Sql_cmd_ddl {
117 public:
118 Sql_cmd_drop_library(bool if_exists, sp_name *lib_name)
119 : m_if_exists(if_exists), m_name(lib_name) {}
120
122 return SQLCOM_DROP_LIBRARY;
123 }
124
125 bool execute(THD *thd) override;
126
127 private:
130};
131
133 public:
134 Sql_cmd_create_masking_policy(bool if_not_exists, LEX_CSTRING policy_name,
135 LEX_CSTRING arg_name, Item *expr)
136 : m_if_not_exists{if_not_exists},
137 m_policy_name{policy_name},
138 m_argument_name{arg_name},
139 m_masking_expr{expr} {}
140
143 }
144
145 bool execute(THD *thd) override;
146
147 private:
152};
153
155 public:
156 Sql_cmd_drop_masking_policy(bool if_exists, LEX_CSTRING policy_name)
157 : m_if_exists{if_exists}, m_policy_name{policy_name} {}
158
161 }
162
163 bool execute(THD *thd) override;
164
165 private:
168};
169
170#endif // SQL_CMD_DDL_INCLUDED
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:929
Definition: sql_cmd_ddl.h:99
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:103
sp_name * m_name
Definition: sql_cmd_ddl.h:110
LEX_STRING m_comment
Definition: sql_cmd_ddl.h:113
Sql_cmd_alter_library(THD *thd, sp_name *name, LEX_STRING comment)
Definition: sql_cmd_ddl.cc:188
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.cc:193
Definition: sql_cmd_ddl.h:76
LEX_CSTRING m_comment
Definition: sql_cmd_ddl.h:95
LEX_CSTRING m_source
Definition: sql_cmd_ddl.h:94
bool m_is_binary
Definition: sql_cmd_ddl.h:96
LEX_CSTRING m_language
Definition: sql_cmd_ddl.h:91
Sql_cmd_create_library(THD *thd, bool if_not_exists, sp_name *name, LEX_CSTRING language, LEX_CSTRING comment, LEX_STRING source_code, bool is_binary)
Definition: sql_cmd_ddl.cc:77
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:82
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.cc:88
sp_name * m_name
Definition: sql_cmd_ddl.h:90
bool m_if_not_exists
Definition: sql_cmd_ddl.h:89
Definition: sql_cmd_ddl.h:132
bool m_if_not_exists
Definition: sql_cmd_ddl.h:148
LEX_CSTRING m_argument_name
Definition: sql_cmd_ddl.h:150
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:141
LEX_CSTRING m_policy_name
Definition: sql_cmd_ddl.h:149
Sql_cmd_create_masking_policy(bool if_not_exists, LEX_CSTRING policy_name, LEX_CSTRING arg_name, Item *expr)
Definition: sql_cmd_ddl.h:134
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.cc:251
Item * m_masking_expr
Definition: sql_cmd_ddl.h:151
This is a dummy class for old-style commands whose code is in sql_parse.cc, not in the execute() func...
Definition: sql_cmd_ddl.h:52
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.h:68
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:62
enum_sql_command my_sql_command
Definition: sql_cmd_ddl.h:54
void set_sql_command_code(enum_sql_command scc)
Definition: sql_cmd_ddl.h:57
Definition: sql_cmd_ddl.h:35
enum enum_sql_cmd_type sql_cmd_type() const override
Definition: sql_cmd_ddl.h:37
Definition: sql_cmd_ddl.h:116
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.cc:209
bool m_if_exists
Definition: sql_cmd_ddl.h:128
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:121
sp_name * m_name
Definition: sql_cmd_ddl.h:129
Sql_cmd_drop_library(bool if_exists, sp_name *lib_name)
Definition: sql_cmd_ddl.h:118
Definition: sql_cmd_ddl.h:154
enum_sql_command sql_command_code() const override
Return the command code for this statement.
Definition: sql_cmd_ddl.h:159
Sql_cmd_drop_masking_policy(bool if_exists, LEX_CSTRING policy_name)
Definition: sql_cmd_ddl.h:156
bool execute(THD *thd) override
Execute this SQL statement.
Definition: sql_cmd_ddl.cc:272
LEX_CSTRING m_policy_name
Definition: sql_cmd_ddl.h:167
bool m_if_exists
Definition: sql_cmd_ddl.h:166
Representation of an SQL command.
Definition: sql_cmd.h:83
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:36
Definition: sp_head.h:124
#define comment
Definition: lexyy.cc:959
enum_sql_command
Definition: my_sqlcommand.h:46
@ SQLCOM_CREATE_MASKING_POLICY
Definition: my_sqlcommand.h:212
@ SQLCOM_ALTER_LIBRARY
Definition: my_sqlcommand.h:210
@ SQLCOM_CREATE_LIBRARY
Definition: my_sqlcommand.h:207
@ SQLCOM_END
Definition: my_sqlcommand.h:216
@ SQLCOM_DROP_LIBRARY
Definition: my_sqlcommand.h:208
@ SQLCOM_DROP_MASKING_POLICY
Definition: my_sqlcommand.h:213
Representation of an SQL command.
enum_sql_cmd_type
What type of Sql_cmd we're dealing with (DML, DDL, ...).
Definition: sql_cmd.h:53
@ SQL_CMD_DDL
Definition: sql_cmd.h:55
case opt name
Definition: sslopt-case.h:29
Definition: mysql_lex_string.h:40
Definition: mysql_lex_string.h:35