23#ifndef PARSE_TREE_HELPERS_INCLUDED
24#define PARSE_TREE_HELPERS_INCLUDED
54template <
typename Element_type>
117 if (item->itemize(pc, &item))
return true;
130 if (item ==
nullptr)
return true;
131 value.push_back(item);
140 if (item ==
nullptr)
return true;
141 value.push_front(item);
166template <
typename Context,
typename Array>
168 for (
auto it : *array) {
169 if (pc->thd->lex->will_contextualize && it->contextualize(pc))
return true;
184template <
class To, Item_func::Functype Tag>
188 ?
static_cast<To *
>(from)
209template <
class Class, Item_func::Functype Tag>
212 if (left ==
nullptr || right ==
nullptr)
return nullptr;
213 Class *left_func = item_cond_cast<Class, Tag>(left);
214 Class *right_func = item_cond_cast<Class, Tag>(right);
218 right_func->add_at_head(left_func->argument_list());
222 left_func->add(right);
225 }
else if (right_func) {
227 right_func->add_at_head(left);
231 return new (
mem_root) Class(pos, left, right);
237 const char *query_start_ptr,
238 const char *
start,
const char *
end);
Definition: item_func.h:100
virtual enum Functype functype() const
Definition: item_func.h:323
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:932
Type
Definition: item.h:967
@ INVALID_ITEM
Definition: item.h:968
@ COND_ITEM
Definition: item.h:981
virtual enum Type type() const =0
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:425
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:104
bool is_empty() const
Definition: parse_tree_helpers.h:122
Item * operator[](uint index) const
Definition: parse_tree_helpers.h:152
mem_root_deque< Item * > value
Definition: parse_tree_helpers.h:112
Parse_tree_node super
Definition: parse_tree_helpers.h:105
Item * pop_front()
Definition: parse_tree_helpers.h:145
PT_item_list(const POS &pos)
Definition: parse_tree_helpers.h:108
bool push_front(Item *item)
Definition: parse_tree_helpers.h:135
bool push_back(Item *item)
Definition: parse_tree_helpers.h:125
PT_item_list(const POS &start_pos, const POS &end_pos)
Definition: parse_tree_helpers.h:109
uint elements() const
Definition: parse_tree_helpers.h:123
bool do_contextualize(Parse_context *pc) override
Definition: parse_tree_helpers.h:114
Definition: parse_tree_nodes.h:796
Definition: parse_tree_nodes.h:1462
Base class for parse-time Item objects.
Definition: parse_tree_helpers.h:69
enum Type type() const override
Definition: parse_tree_helpers.h:73
Parse_tree_item(const POS &pos)
Definition: parse_tree_helpers.h:71
double val_real() override
Definition: parse_tree_helpers.h:74
my_decimal * val_decimal(my_decimal *) override
Definition: parse_tree_helpers.h:86
bool get_date(MYSQL_TIME *, uint) override
Definition: parse_tree_helpers.h:90
String * val_str(String *) override
Definition: parse_tree_helpers.h:82
bool get_time(MYSQL_TIME *) override
Definition: parse_tree_helpers.h:94
longlong val_int() override
Definition: parse_tree_helpers.h:78
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:229
virtual bool do_contextualize(Context *pc)
Do all context-sensitive things and mark the node as contextualized.
Definition: parse_tree_node_base.h:281
enum_severity_level
Enumeration value describing the severity of the condition.
Definition: sql_error.h:62
Using this class is fraught with peril, and you need to be very careful when doing so.
Definition: sql_string.h:166
For each client connection we create a separate thread with THD serving as a thread/connection descri...
Definition: sql_lexer_thd.h:35
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:109
my_decimal class limits 'decimal_t' type to what we need in MySQL.
Definition: my_decimal.h:94
This class represents a stored program variable or a parameter (also referenced as 'SP-variable').
Definition: sp_pcontext.h:48
static MEM_ROOT mem_root
Definition: client_plugin.cc:113
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
A better implementation of the UNIX ctype(3) library.
int my_strcasecmp(const CHARSET_INFO *cs, const char *s1, const char *s2)
Definition: m_ctype.h:655
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1558
Some integer typedefs for easier portability.
long long int longlong
Definition: my_inttypes.h:54
Time declarations shared between the server and client API: you should not add anything to this heade...
thread_local MEM_ROOT ** THR_MALLOC
Definition: mysqld.cc:1573
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1085
bool is_temp_table(const HA_CREATE_INFO &ci)
Definition: sql_table.cc:220
Type
Definition: resource_group_basic_types.h:32
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:191
LEX_CSTRING make_string(THD *thd, const char *start_ptr, const char *end_ptr)
Make a new string allocated on THD's mem-root.
Definition: parse_tree_helpers.cc:136
Item_splocal * create_item_for_sp_var(THD *thd, LEX_CSTRING name, class sp_variable *spv, const char *query_start_ptr, const char *start, const char *end)
Create an object to represent a SP variable in the Item-hierarchy.
Definition: parse_tree_helpers.cc:81
bool sp_create_assignment_instr(THD *thd, const char *expr_end_ptr)
Create a SP instruction for a SET assignment.
Definition: parse_tree_helpers.cc:204
bool apply_privileges(THD *thd, const Mem_root_array< class PT_role_or_privilege * > &privs)
This helper function is responsible for aggregating grants from parser tokens to containers and masks...
Definition: parse_tree_helpers.cc:319
void sp_create_assignment_lex(THD *thd, const char *option_ptr)
Definition: parse_tree_helpers.cc:141
Item * flatten_associative_operator(MEM_ROOT *mem_root, const POS &pos, Item *left, Item *right)
Flatten associative operators at parse time.
Definition: parse_tree_helpers.h:210
bool validate_vcpu_range(const resourcegroups::Range &range)
Definition: parse_tree_helpers.cc:375
bool check_resource_group_name_len(const LEX_CSTRING &name, Sql_condition::enum_severity_level severity)
Definition: parse_tree_helpers.cc:423
bool resolve_engine(THD *thd, const LEX_CSTRING &name, bool is_temp_table, bool strict, handlerton **ret)
Resolve engine by its name.
Definition: parse_tree_helpers.cc:290
bool contextualize_array(Context *pc, Array *array)
Contextualize a Mem_root_array of parse tree nodes of the type PTN.
Definition: parse_tree_helpers.h:167
To * item_cond_cast(Item *const from)
Helper function to imitate dynamic_cast for Item_cond hierarchy.
Definition: parse_tree_helpers.h:185
bool validate_resource_group_priority(THD *thd, int *priority, const LEX_CSTRING &name, const resourcegroups::Type &type)
Definition: parse_tree_helpers.cc:386
bool check_resource_group_support()
Definition: parse_tree_helpers.cc:413
bool is_identifier(const char *str, const char *ident)
Definition: parse_tree_helpers.h:248
void move_cf_appliers(Parse_context *tddlpc, Column_parse_context *cpc)
Definition: parse_tree_helpers.cc:438
Set_operator
Definition: parser_yystype.h:337
required uint32 priority
Definition: replication_group_member_actions.proto:34
required string type
Definition: replication_group_member_actions.proto:33
"public" interface to sys_var - server configuration variables.
case opt name
Definition: sslopt-case.h:32
Parse context for column type attribute specific parse tree nodes.
Definition: parse_tree_column_attrs.h:72
The MEM_ROOT is a simple arena, where allocations are carved out of larger blocks.
Definition: my_alloc.h:82
Definition: mysql_lex_string.h:39
Definition: mysql_lex_string.h:34
Definition: mysql_time.h:81
Bison "location" class.
Definition: parse_location.h:42
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:418
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2692
Definition: gen_lex_token.cc:148
Definition: resource_group_basic_types.h:33