MySQL 8.0.37
Source Code Documentation
parse_tree_hints.h
Go to the documentation of this file.
1/* Copyright (c) 2015, 2024, 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/*
25 Parse tree node classes for optimizer hint syntax
26*/
27
28#ifndef PARSE_TREE_HINTS_INCLUDED
29#define PARSE_TREE_HINTS_INCLUDED
30
31#include <sys/types.h>
32
33#include "lex_string.h"
34#include "my_compiler.h"
35#include "sql/mem_root_array.h"
36#include "sql/opt_hints.h"
38#include "sql/sql_show.h"
39#include "sql_string.h"
40
41class Item;
42class THD;
43struct MEM_ROOT;
44
48};
49
52
53/**
54 The class is a base class for representation of the
55 different types of the hints. For the complex hints
56 it is also used as a container for additional arguments.
57*/
58class PT_hint : public Parse_tree_node {
60 bool state; // true if hints is on, false otherwise
61 public:
62 PT_hint(opt_hints_enum hint_type_arg, bool switch_state_arg)
63 : hint_type(hint_type_arg), state(switch_state_arg) {}
64
65 opt_hints_enum type() const { return hint_type; }
66 bool switch_on() const { return state; }
67 /**
68 Print warning issuing in processing of the hint.
69
70 @param thd Pointer to THD object
71 @param err_code Error code
72 @param qb_name_arg QB name
73 @param table_name_arg table name
74 @param key_name_arg key name
75 @param hint Pointer to hint object
76 */
77 virtual void print_warn(THD *thd, uint err_code,
78 const LEX_CSTRING *qb_name_arg,
79 LEX_CSTRING *table_name_arg,
80 LEX_CSTRING *key_name_arg, PT_hint *hint) const;
81 /**
82 Append additional hint arguments.
83
84 @param thd Pointer to THD object
85 @param str Pointer to String object
86 */
87 virtual void append_args(const THD *thd [[maybe_unused]],
88 String *str [[maybe_unused]]) const {}
90 /*
91 Only index hints are supported to be used in views.
92 Other hints can be added separately.
93 */
94 return (type() >= INDEX_HINT_ENUM && type() <= ORDER_INDEX_HINT_ENUM);
95 }
96};
97
100
102
103 public:
105
106 /**
107 Function handles list of the hints we get after
108 parse procedure. It also creates query block hint
109 object(Opt_hints_qb) if it does not exists.
110
111 @param pc Pointer to Parse_context object
112
113 @return true in case of error,
114 false otherwise
115 */
116 bool contextualize(Parse_context *pc) override;
117
118 bool push_back(PT_hint *hint) { return hints.push_back(hint); }
119};
120
121/**
122 Parse tree hint object for query block level hints.
123*/
124class PT_qb_level_hint : public PT_hint {
125 /** Name of query block. */
127 /** Bit mask of arguments to hint. */
129 /** List of tables specified in join order hint */
131
132 typedef PT_hint super;
133
134 public:
135 PT_qb_level_hint(const LEX_CSTRING qb_name_arg, bool switch_state_arg,
136 enum opt_hints_enum hint_type_arg, uint arg)
137 : PT_hint(hint_type_arg, switch_state_arg),
138 qb_name(qb_name_arg),
139 args(arg) {}
140
141 PT_qb_level_hint(const LEX_CSTRING qb_name_arg, bool switch_state_arg,
142 enum opt_hints_enum hint_type_arg,
143 const Hint_param_table_list &table_list_arg)
144 : PT_hint(hint_type_arg, switch_state_arg),
145 qb_name(qb_name_arg),
146 args(0),
147 table_list(table_list_arg) {}
148
149 uint get_args() const { return args; }
150
151 /**
152 Function handles query block level hint. It also creates query block hint
153 object (Opt_hints_qb) if it does not exist.
154
155 @param pc Pointer to Parse_context object
156
157 @return true in case of error,
158 false otherwise
159 */
160 bool contextualize(Parse_context *pc) override;
161
162 /**
163 Append hint arguments to given string
164
165 @param thd Pointer to THD object
166 @param str Pointer to String object
167 */
168 void append_args(const THD *thd, String *str) const override;
170};
171
172/**
173 Parse tree hint object for table level hints.
174*/
175
179
180 typedef PT_hint super;
181
182 public:
184 const Hint_param_table_list &table_list_arg,
185 bool switch_state_arg, opt_hints_enum hint_type_arg)
186 : PT_hint(hint_type_arg, switch_state_arg),
187 qb_name(qb_name_arg),
188 table_list(table_list_arg) {}
189
190 /**
191 Function handles table level hint. It also creates
192 table hint object (Opt_hints_table) if it does not
193 exist.
194
195 @param pc Pointer to Parse_context object
196
197 @return true in case of error,
198 false otherwise
199 */
200 bool contextualize(Parse_context *pc) override;
201};
202
203/**
204 Parse tree hint object for key level hints.
205*/
206
210
211 typedef PT_hint super;
212
213 public:
215 const Hint_param_index_list &key_list_arg,
216 bool switch_state_arg, opt_hints_enum hint_type_arg)
217 : PT_hint(hint_type_arg, switch_state_arg),
218 table_name(table_name_arg),
219 key_list(key_list_arg) {}
220
221 /**
222 Function handles key level hint.
223 It also creates key hint object
224 (Opt_hints_key) if it does not
225 exist.
226
227 @param pc Pointer to Parse_context object
228
229 @return true in case of error,
230 false otherwise
231 */
232 bool contextualize(Parse_context *pc) override;
233 void append_args(const THD *thd, String *str) const override;
234};
235
236/**
237 Parse tree hint object for QB_NAME hint.
238*/
239
240class PT_hint_qb_name : public PT_hint {
242
243 typedef PT_hint super;
244
245 public:
246 PT_hint_qb_name(const LEX_CSTRING qb_name_arg)
247 : PT_hint(QB_NAME_HINT_ENUM, true), qb_name(qb_name_arg) {}
248
249 /**
250 Function sets query block name.
251
252 @param pc Pointer to Parse_context object
253
254 @return true in case of error,
255 false otherwise
256 */
257 bool contextualize(Parse_context *pc) override;
258 void append_args(const THD *thd, String *str) const override {
260 }
261};
262
263/**
264 Parse tree hint object for MAX_EXECUTION_TIME hint.
265*/
266
268 typedef PT_hint super;
269
270 public:
272
273 explicit PT_hint_max_execution_time(ulong milliseconds_arg)
275 milliseconds(milliseconds_arg) {}
276 /**
277 Function initializes MAX_EXECUTION_TIME hint
278
279 @param pc Pointer to Parse_context object
280
281 @return true in case of error,
282 false otherwise
283 */
284 bool contextualize(Parse_context *pc) override;
285 void append_args(const THD *, String *str) const override {
286 str->append_ulonglong(milliseconds);
287 }
288};
289
290class PT_hint_sys_var : public PT_hint {
293
294 typedef PT_hint super;
295
296 public:
297 explicit PT_hint_sys_var(const LEX_CSTRING sys_var_name_arg,
298 Item *sys_var_value_arg)
299 : PT_hint(MAX_HINT_ENUM, true),
300 sys_var_name(sys_var_name_arg),
301 sys_var_value(sys_var_value_arg) {}
302 /**
303 Function initializes SET_VAR hint.
304
305 @param pc Pointer to Parse_context object
306
307 @return true in case of error,
308 false otherwise
309 */
310 bool contextualize(Parse_context *pc) override;
311};
312
313/**
314 Parse tree hint object for RESOURCE_GROUP hint.
315*/
316
319
320 typedef PT_hint super;
321
322 public:
325
326 /**
327 Function initializes resource group name and checks for presence of
328 resource group. Also it checks for invocation of hint from stored
329 routines or sub query.
330
331 @param pc Pointer to Parse_context object
332
333 @return true in case of error,
334 false otherwise
335 */
336
337 bool contextualize(Parse_context *pc) override;
338
339 /**
340 Append hint arguments to given string.
341
342 @param thd Pointer to THD object.
343 @param str Pointer to String object.
344 */
345
346 void append_args(const THD *thd, String *str) const override {
349 }
350};
351
352#endif /* PARSE_TREE_HINTS_INCLUDED */
void append_identifier(String *packet, const char *name, size_t length)
Convert and quote the given identifier if needed and append it to the target string.
Definition: sql_show.cc:1463
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:851
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:426
Definition: parse_tree_hints.h:98
PT_hint_list(MEM_ROOT *mem_root)
Definition: parse_tree_hints.h:104
bool contextualize(Parse_context *pc) override
Function handles list of the hints we get after parse procedure.
Definition: parse_tree_hints.cc:338
Parse_tree_node super
Definition: parse_tree_hints.h:99
bool push_back(PT_hint *hint)
Definition: parse_tree_hints.h:118
Mem_root_array< PT_hint * > hints
Definition: parse_tree_hints.h:101
Parse tree hint object for MAX_EXECUTION_TIME hint.
Definition: parse_tree_hints.h:267
PT_hint_max_execution_time(ulong milliseconds_arg)
Definition: parse_tree_hints.h:273
PT_hint super
Definition: parse_tree_hints.h:268
void append_args(const THD *, String *str) const override
Append additional hint arguments.
Definition: parse_tree_hints.h:285
bool contextualize(Parse_context *pc) override
Function initializes MAX_EXECUTION_TIME hint.
Definition: parse_tree_hints.cc:497
ulong milliseconds
Definition: parse_tree_hints.h:271
Parse tree hint object for QB_NAME hint.
Definition: parse_tree_hints.h:240
const LEX_CSTRING qb_name
Definition: parse_tree_hints.h:241
void append_args(const THD *thd, String *str) const override
Append additional hint arguments.
Definition: parse_tree_hints.h:258
bool contextualize(Parse_context *pc) override
Function sets query block name.
Definition: parse_tree_hints.cc:478
PT_hint super
Definition: parse_tree_hints.h:243
PT_hint_qb_name(const LEX_CSTRING qb_name_arg)
Definition: parse_tree_hints.h:246
Parse tree hint object for RESOURCE_GROUP hint.
Definition: parse_tree_hints.h:317
bool contextualize(Parse_context *pc) override
Function initializes resource group name and checks for presence of resource group.
Definition: parse_tree_hints.cc:566
void append_args(const THD *thd, String *str) const override
Append hint arguments to given string.
Definition: parse_tree_hints.h:346
PT_hint super
Definition: parse_tree_hints.h:320
PT_hint_resource_group(const LEX_CSTRING &name)
Definition: parse_tree_hints.h:323
const LEX_CSTRING m_resource_group_name
Definition: parse_tree_hints.h:318
Definition: parse_tree_hints.h:290
PT_hint_sys_var(const LEX_CSTRING sys_var_name_arg, Item *sys_var_value_arg)
Definition: parse_tree_hints.h:297
Item * sys_var_value
Definition: parse_tree_hints.h:292
const LEX_CSTRING sys_var_name
Definition: parse_tree_hints.h:291
bool contextualize(Parse_context *pc) override
Function initializes SET_VAR hint.
Definition: parse_tree_hints.cc:524
PT_hint super
Definition: parse_tree_hints.h:294
The class is a base class for representation of the different types of the hints.
Definition: parse_tree_hints.h:58
PT_hint(opt_hints_enum hint_type_arg, bool switch_state_arg)
Definition: parse_tree_hints.h:62
virtual void print_warn(THD *thd, uint err_code, const LEX_CSTRING *qb_name_arg, LEX_CSTRING *table_name_arg, LEX_CSTRING *key_name_arg, PT_hint *hint) const
Print warning issuing in processing of the hint.
Definition: parse_tree_hints.cc:173
bool state
Definition: parse_tree_hints.h:60
opt_hints_enum hint_type
Definition: parse_tree_hints.h:59
bool switch_on() const
Definition: parse_tree_hints.h:66
virtual void append_args(const THD *thd, String *str) const
Append additional hint arguments.
Definition: parse_tree_hints.h:87
bool supports_view()
Definition: parse_tree_hints.h:89
opt_hints_enum type() const
Definition: parse_tree_hints.h:65
Parse tree hint object for key level hints.
Definition: parse_tree_hints.h:207
void append_args(const THD *thd, String *str) const override
Append additional hint arguments.
Definition: parse_tree_hints.cc:393
Hint_param_table table_name
Definition: parse_tree_hints.h:208
PT_key_level_hint(Hint_param_table &table_name_arg, const Hint_param_index_list &key_list_arg, bool switch_state_arg, opt_hints_enum hint_type_arg)
Definition: parse_tree_hints.h:214
bool contextualize(Parse_context *pc) override
Function handles key level hint.
Definition: parse_tree_hints.cc:406
Hint_param_index_list key_list
Definition: parse_tree_hints.h:209
PT_hint super
Definition: parse_tree_hints.h:211
Parse tree hint object for query block level hints.
Definition: parse_tree_hints.h:124
PT_qb_level_hint(const LEX_CSTRING qb_name_arg, bool switch_state_arg, enum opt_hints_enum hint_type_arg, uint arg)
Definition: parse_tree_hints.h:135
void append_args(const THD *thd, String *str) const override
Append hint arguments to given string.
Definition: parse_tree_hints.cc:287
Hint_param_table_list table_list
List of tables specified in join order hint.
Definition: parse_tree_hints.h:130
const LEX_CSTRING qb_name
Name of query block.
Definition: parse_tree_hints.h:126
PT_hint super
Definition: parse_tree_hints.h:132
uint get_args() const
Definition: parse_tree_hints.h:149
virtual Hint_param_table_list * get_table_list()
Definition: parse_tree_hints.h:169
PT_qb_level_hint(const LEX_CSTRING qb_name_arg, bool switch_state_arg, enum opt_hints_enum hint_type_arg, const Hint_param_table_list &table_list_arg)
Definition: parse_tree_hints.h:141
uint args
Bit mask of arguments to hint.
Definition: parse_tree_hints.h:128
bool contextualize(Parse_context *pc) override
Function handles query block level hint.
Definition: parse_tree_hints.cc:225
Parse tree hint object for table level hints.
Definition: parse_tree_hints.h:176
PT_table_level_hint(const LEX_CSTRING qb_name_arg, const Hint_param_table_list &table_list_arg, bool switch_state_arg, opt_hints_enum hint_type_arg)
Definition: parse_tree_hints.h:183
bool contextualize(Parse_context *pc) override
Function handles table level hint.
Definition: parse_tree_hints.cc:354
Hint_param_table_list table_list
Definition: parse_tree_hints.h:178
const LEX_CSTRING qb_name
Definition: parse_tree_hints.h:177
PT_hint super
Definition: parse_tree_hints.h:180
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:139
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:168
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:34
static MEM_ROOT mem_root
Definition: client_plugin.cc:110
Header for compiler-dependent features.
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1044
opt_hints_enum
Hint types, MAX_HINT_ENUM should be always last.
Definition: opt_hints.h:64
@ MAX_HINT_ENUM
Definition: opt_hints.h:88
@ ORDER_INDEX_HINT_ENUM
Definition: opt_hints.h:86
@ RESOURCE_GROUP_HINT_ENUM
Definition: opt_hints.h:80
@ QB_NAME_HINT_ENUM
Definition: opt_hints.h:71
@ MAX_EXEC_TIME_HINT_ENUM
Definition: opt_hints.h:70
@ INDEX_HINT_ENUM
Definition: opt_hints.h:83
Mem_root_array_YY< LEX_CSTRING > Hint_param_index_list
Definition: parse_tree_hints.h:50
Mem_root_array_YY< Hint_param_table > Hint_param_table_list
Definition: parse_tree_hints.h:51
Our own string classes, used pervasively throughout the executor.
case opt name
Definition: sslopt-case.h:33
Definition: parse_tree_hints.h:45
LEX_CSTRING table
Definition: parse_tree_hints.h:46
LEX_CSTRING opt_query_block
Definition: parse_tree_hints.h:47
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:83
Definition: mysql_lex_string.h:40
const char * str
Definition: mysql_lex_string.h:41
size_t length
Definition: mysql_lex_string.h:42
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:121
unsigned int uint
Definition: uca9-dump.cc:75