1 /* Copyright (c) 2017, 2020, Oracle and/or its affiliates. All rights reserved.
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 also distributed 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 included with MySQL.
13 
14   This program is distributed in the hope that it will be useful,
15   but WITHOUT ANY WARRANTY; without even the implied warranty of
16   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17   GNU General Public License, version 2.0, for more details.
18 
19   You should have received a copy of the GNU General Public License
20   along with this program; if not, write to the Free Software
21   Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA */
22 
23 #ifndef RESOURCEGROUPS_RESOURCE_GROUP_SQL_CMD_H_
24 #define RESOURCEGROUPS_RESOURCE_GROUP_SQL_CMD_H_
25 
26 #include "lex_string.h"
27 #include "my_inttypes.h"
28 #include "my_sqlcommand.h"
29 #include "sql/mem_root_array.h"
30 #include "sql/parse_tree_node_base.h"
31 #include "sql/resourcegroups/resource_group_basic_types.h"  // Type, Range
32 #include "sql/sql_cmd.h"
33 
34 class PT_alter_resource_group;
35 class PT_create_resource_group;
36 class PT_drop_resource_group;
37 class PT_set_resource_group;
38 class THD;
39 
40 namespace resourcegroups {
41 
42 /**
43   Sql_cmd_create_resource_group represents CREATE RESOURCE GROUP statement.
44 */
45 
46 class Sql_cmd_create_resource_group : public Sql_cmd {
47   friend class ::PT_create_resource_group;
48 
49  public:
Sql_cmd_create_resource_group(const LEX_CSTRING & name,const Type type,const Mem_root_array<Range> * cpu_list,int priority,bool enabled)50   Sql_cmd_create_resource_group(const LEX_CSTRING &name, const Type type,
51                                 const Mem_root_array<Range> *cpu_list,
52                                 int priority, bool enabled)
53       : m_name(name),
54         m_type(type),
55         m_cpu_list(cpu_list),
56         m_priority(priority),
57         m_enabled(enabled) {}
58 
sql_command_code()59   enum_sql_command sql_command_code() const override {
60     return SQLCOM_CREATE_RESOURCE_GROUP;
61   }
62 
63   bool execute(THD *thd) override;
64 
65  private:
66   const LEX_CSTRING m_name;
67   const Type m_type;
68   const Mem_root_array<Range> *m_cpu_list;
69   int m_priority;
70   bool m_enabled;
71 };
72 
73 /**
74   Sql_cmd_alter_resource_group represents ALTER RESOURCE GROUP statement.
75 */
76 
77 class Sql_cmd_alter_resource_group : public Sql_cmd {
78   friend class ::PT_alter_resource_group;
79 
80  public:
Sql_cmd_alter_resource_group(const LEX_CSTRING & name,const Mem_root_array<Range> * cpu_list,int priority,bool enable,bool force,bool use_enable)81   Sql_cmd_alter_resource_group(const LEX_CSTRING &name,
82                                const Mem_root_array<Range> *cpu_list,
83                                int priority, bool enable, bool force,
84                                bool use_enable)
85       : m_name(name),
86         m_cpu_list(cpu_list),
87         m_priority(priority),
88         m_enable(enable),
89         m_force(force),
90         m_use_enable(use_enable) {}
91 
sql_command_code()92   enum_sql_command sql_command_code() const override {
93     return SQLCOM_ALTER_RESOURCE_GROUP;
94   }
95 
96   bool execute(THD *thd) override;
97 
98  private:
99   const LEX_CSTRING m_name;
100   const Mem_root_array<Range> *m_cpu_list;
101   int m_priority;
102   bool m_enable;
103   bool m_force;
104   bool m_use_enable;
105 };
106 
107 /**
108   Sql_cmd_drop_resource_group represents DROP RESOURCE GROUP statement.
109 */
110 
111 class Sql_cmd_drop_resource_group : public Sql_cmd {
112   friend class ::PT_drop_resource_group;
113 
114  public:
Sql_cmd_drop_resource_group(const LEX_CSTRING & name,bool force)115   Sql_cmd_drop_resource_group(const LEX_CSTRING &name, bool force)
116       : m_name(name), m_force(force) {}
117 
sql_command_code()118   enum_sql_command sql_command_code() const override {
119     return SQLCOM_DROP_RESOURCE_GROUP;
120   }
121 
122   bool execute(THD *thd) override;
123 
124  private:
125   const LEX_CSTRING m_name;
126   bool m_force;
127 };
128 
129 /**
130   Sql_cmd_set_resource_group represents SET RESOURCE GROUP statement.
131 */
132 
133 class Sql_cmd_set_resource_group final : public Sql_cmd {
134   friend class ::PT_set_resource_group;
135 
136  public:
Sql_cmd_set_resource_group(const LEX_CSTRING & name,Mem_root_array<ulonglong> * thread_id_list)137   Sql_cmd_set_resource_group(const LEX_CSTRING &name,
138                              Mem_root_array<ulonglong> *thread_id_list)
139       : m_name(name), m_thread_id_list(thread_id_list) {}
140 
sql_command_code()141   enum_sql_command sql_command_code() const override {
142     return SQLCOM_SET_RESOURCE_GROUP;
143   }
144 
145   bool execute(THD *thd) override;
146   bool prepare(THD *thd) override;
147 
148  private:
149   const LEX_CSTRING m_name;
150   Mem_root_array<ulonglong> *m_thread_id_list;
151 };
152 }  // namespace resourcegroups
153 #endif  // RESOURCEGROUPS_RESOURCE_GROUP_SQL_CMD_H_
154