24#ifndef PARSE_TREE_HELPERS_INCLUDED
25#define PARSE_TREE_HELPERS_INCLUDED
55template <
typename Element_type>
116 if (item->itemize(pc, &item))
return true;
129 if (item ==
nullptr)
return true;
130 value.push_back(item);
139 if (item ==
nullptr)
return true;
140 value.push_front(item);
165template <
typename Context,
typename Array>
167 for (
auto it : *array) {
168 if (pc->thd->lex->will_contextualize && it->contextualize(pc))
return true;
183template <
class To, Item_func::Functype Tag>
187 ?
static_cast<To *
>(from)
208template <
class Class, Item_func::Functype Tag>
211 if (left ==
nullptr || right ==
nullptr)
return nullptr;
212 Class *left_func = item_cond_cast<Class, Tag>(left);
213 Class *right_func = item_cond_cast<Class, Tag>(right);
217 right_func->add_at_head(left_func->argument_list());
221 left_func->add(right);
224 }
else if (right_func) {
226 right_func->add_at_head(left);
230 return new (
mem_root) Class(pos, left, right);
236 const char *query_start_ptr,
237 const char *
start,
const char *
end);
Definition: item_func.h:102
virtual enum Functype functype() const
Definition: item_func.h:317
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:853
Type
Definition: item.h:889
@ INVALID_ITEM
Definition: item.h:890
@ COND_ITEM
Definition: item.h:903
virtual enum Type type() const =0
A typesafe replacement for DYNAMIC_ARRAY.
Definition: mem_root_array.h:426
Wrapper class for an Item list head, used to allocate Item lists in the parser in a context-independe...
Definition: parse_tree_helpers.h:105
bool is_empty() const
Definition: parse_tree_helpers.h:121
Item * operator[](uint index) const
Definition: parse_tree_helpers.h:151
mem_root_deque< Item * > value
Definition: parse_tree_helpers.h:111
Parse_tree_node super
Definition: parse_tree_helpers.h:106
Item * pop_front()
Definition: parse_tree_helpers.h:144
PT_item_list()
Definition: parse_tree_helpers.h:109
bool push_front(Item *item)
Definition: parse_tree_helpers.h:134
bool contextualize(Parse_context *pc) override
Definition: parse_tree_helpers.h:113
bool push_back(Item *item)
Definition: parse_tree_helpers.h:124
uint elements() const
Definition: parse_tree_helpers.h:122
Definition: parse_tree_nodes.h:725
Definition: parse_tree_nodes.h:1342
Base class for parse-time Item objects.
Definition: parse_tree_helpers.h:70
enum Type type() const override
Definition: parse_tree_helpers.h:74
Parse_tree_item(const POS &pos)
Definition: parse_tree_helpers.h:72
double val_real() override
Definition: parse_tree_helpers.h:75
my_decimal * val_decimal(my_decimal *) override
Definition: parse_tree_helpers.h:87
bool get_date(MYSQL_TIME *, uint) override
Definition: parse_tree_helpers.h:91
String * val_str(String *) override
Definition: parse_tree_helpers.h:83
bool get_time(MYSQL_TIME *) override
Definition: parse_tree_helpers.h:95
longlong val_int() override
Definition: parse_tree_helpers.h:79
Base class for parse tree nodes (excluding the Parse_tree_root hierarchy)
Definition: parse_tree_node_base.h:139
virtual bool contextualize(Context *pc)
Do all context-sensitive things and mark the node as contextualized.
Definition: parse_tree_node_base.h:187
enum_severity_level
Enumeration value describing the severity of the condition.
Definition: sql_error.h:63
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
A (partial) implementation of std::deque allocating its blocks on a MEM_ROOT.
Definition: mem_root_deque.h:110
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:49
static MEM_ROOT mem_root
Definition: client_plugin.cc:110
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:177
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1545
#define my_strcasecmp(s, a, b)
Definition: m_ctype.h:718
Some integer typedefs for easier portability.
long long int longlong
Definition: my_inttypes.h:55
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:1560
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1052
bool is_temp_table(const HA_CREATE_INFO &ci)
Definition: sql_table.cc:212
Type
Definition: resource_group_basic_types.h:33
Cursor end()
A past-the-end Cursor.
Definition: rules_table_service.cc:192
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:135
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:80
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:203
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:318
void sp_create_assignment_lex(THD *thd, const char *option_ptr)
Definition: parse_tree_helpers.cc:140
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:209
bool validate_vcpu_range(const resourcegroups::Range &range)
Definition: parse_tree_helpers.cc:374
bool check_resource_group_name_len(const LEX_CSTRING &name, Sql_condition::enum_severity_level severity)
Definition: parse_tree_helpers.cc:422
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:289
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:166
To * item_cond_cast(Item *const from)
Helper function to imitate dynamic_cast for Item_cond hierarchy.
Definition: parse_tree_helpers.h:184
bool validate_resource_group_priority(THD *thd, int *priority, const LEX_CSTRING &name, const resourcegroups::Type &type)
Definition: parse_tree_helpers.cc:385
bool check_resource_group_support()
Definition: parse_tree_helpers.cc:412
bool is_identifier(const char *str, const char *ident)
Definition: parse_tree_helpers.h:247
void move_cf_appliers(Parse_context *tddlpc, Column_parse_context *cpc)
Definition: parse_tree_helpers.cc:437
Set_operator
Definition: parser_yystype.h:338
required uint32 priority
Definition: replication_group_member_actions.proto:35
required string type
Definition: replication_group_member_actions.proto:34
"public" interface to sys_var - server configuration variables.
case opt name
Definition: sslopt-case.h:33
Parse context for column type attribute specific parse tree nodes.
Definition: parse_tree_column_attrs.h:73
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
Definition: mysql_lex_string.h:35
Definition: mysql_time.h:82
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:121
Bison "location" class.
Definition: parse_location.h:43
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2622
Definition: gen_lex_token.cc:149
Definition: resource_group_basic_types.h:34
unsigned int uint
Definition: uca9-dump.cc:75