23#ifndef PARSE_TREE_HELPERS_INCLUDED
24#define PARSE_TREE_HELPERS_INCLUDED
54template <
typename Element_type>
115 if (item->itemize(pc, &item))
return true;
128 if (item ==
nullptr)
return true;
129 value.push_back(item);
138 if (item ==
nullptr)
return true;
139 value.push_front(item);
164template <
typename Context,
typename Array>
166 for (
auto it : *array) {
167 if (pc->thd->lex->will_contextualize && it->contextualize(pc))
return true;
182template <
class To, Item_func::Functype Tag>
186 ?
static_cast<To *
>(from)
207template <
class Class, Item_func::Functype Tag>
210 if (left ==
nullptr || right ==
nullptr)
return nullptr;
211 Class *left_func = item_cond_cast<Class, Tag>(left);
212 Class *right_func = item_cond_cast<Class, Tag>(right);
216 right_func->add_at_head(left_func->argument_list());
220 left_func->add(right);
223 }
else if (right_func) {
225 right_func->add_at_head(left);
229 return new (
mem_root) Class(pos, left, right);
235 const char *query_start_ptr,
236 const char *
start,
const char *
end);
Definition: item_func.h:93
virtual enum Functype functype() const
Definition: item_func.h:310
Base class that is used to represent any kind of expression in a relational query.
Definition: item.h:850
Type
Definition: item.h:886
@ INVALID_ITEM
Definition: item.h:887
@ COND_ITEM
Definition: item.h:900
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:120
Item * operator[](uint index) const
Definition: parse_tree_helpers.h:150
mem_root_deque< Item * > value
Definition: parse_tree_helpers.h:110
Parse_tree_node super
Definition: parse_tree_helpers.h:105
Item * pop_front()
Definition: parse_tree_helpers.h:143
PT_item_list()
Definition: parse_tree_helpers.h:108
bool push_front(Item *item)
Definition: parse_tree_helpers.h:133
bool contextualize(Parse_context *pc) override
Definition: parse_tree_helpers.h:112
bool push_back(Item *item)
Definition: parse_tree_helpers.h:123
uint elements() const
Definition: parse_tree_helpers.h:121
Definition: parse_tree_nodes.h:724
Definition: parse_tree_nodes.h:1341
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:138
virtual bool contextualize(Context *pc)
Do all context-sensitive things and mark the node as contextualized.
Definition: parse_tree_node_base.h:186
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:33
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:93
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:109
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:176
A better implementation of the UNIX ctype(3) library.
MYSQL_PLUGIN_IMPORT CHARSET_INFO * system_charset_info
Definition: mysqld.cc:1536
#define my_strcasecmp(s, a, b)
Definition: m_ctype.h:711
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:1551
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1063
bool is_temp_table(const HA_CREATE_INFO &ci)
Definition: sql_table.cc:212
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:134
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:79
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:202
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:317
void sp_create_assignment_lex(THD *thd, const char *option_ptr)
Definition: parse_tree_helpers.cc:139
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:208
bool validate_vcpu_range(const resourcegroups::Range &range)
Definition: parse_tree_helpers.cc:373
bool check_resource_group_name_len(const LEX_CSTRING &name, Sql_condition::enum_severity_level severity)
Definition: parse_tree_helpers.cc:421
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:288
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:165
To * item_cond_cast(Item *const from)
Helper function to imitate dynamic_cast for Item_cond hierarchy.
Definition: parse_tree_helpers.h:183
bool validate_resource_group_priority(THD *thd, int *priority, const LEX_CSTRING &name, const resourcegroups::Type &type)
Definition: parse_tree_helpers.cc:384
bool check_resource_group_support()
Definition: parse_tree_helpers.cc:411
bool is_identifier(const char *str, const char *ident)
Definition: parse_tree_helpers.h:246
void move_cf_appliers(Parse_context *tddlpc, Column_parse_context *cpc)
Definition: parse_tree_helpers.cc:436
Set_operator
Definition: parser_yystype.h:330
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
Environment data for the contextualization phase.
Definition: parse_tree_node_base.h:120
Bison "location" class.
Definition: parse_location.h:42
handlerton is a singleton structure - one instance per storage engine - to provide access to storage ...
Definition: handler.h:2594
Definition: gen_lex_token.cc:151
Definition: resource_group_basic_types.h:33
unsigned int uint
Definition: uca-dump.cc:29