diff options
Diffstat (limited to 'community/percona-server/mysql56-bison3.patch')
-rw-r--r-- | community/percona-server/mysql56-bison3.patch | 3893 |
1 files changed, 3893 insertions, 0 deletions
diff --git a/community/percona-server/mysql56-bison3.patch b/community/percona-server/mysql56-bison3.patch new file mode 100644 index 000000000..79c6b5c28 --- /dev/null +++ b/community/percona-server/mysql56-bison3.patch @@ -0,0 +1,3893 @@ +diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc +index 1bb7747..009780f 100644 +--- a/sql/sql_lex.cc ++++ b/sql/sql_lex.cc +@@ -34,7 +34,7 @@ + #include "sql_optimizer.h" // JOIN + #include <mysql/psi/mysql_statement.h> + +-static int lex_one_token(void *arg, void *yythd); ++static int lex_one_token(void *arg, THD *thd); + + /* + We are using pointer to this variable for distinguishing between assignment +@@ -905,9 +905,8 @@ bool consume_comment(Lex_input_stream *lip, int remaining_recursions_permitted) + (which can't be followed by a signed number) + */ + +-int MYSQLlex(void *arg, void *yythd) ++int MYSQLlex(void *arg, THD *thd) + { +- THD *thd= (THD *)yythd; + Lex_input_stream *lip= & thd->m_parser_state->m_lip; + YYSTYPE *yylval=(YYSTYPE*) arg; + int token; +@@ -926,7 +925,7 @@ int MYSQLlex(void *arg, void *yythd) + return token; + } + +- token= lex_one_token(arg, yythd); ++ token= lex_one_token(arg, thd); + + switch(token) { + case WITH: +@@ -937,7 +936,7 @@ int MYSQLlex(void *arg, void *yythd) + to transform the grammar into a LALR(1) grammar, + which sql_yacc.yy can process. + */ +- token= lex_one_token(arg, yythd); ++ token= lex_one_token(arg, thd); + switch(token) { + case CUBE_SYM: + lip->m_digest_psi= MYSQL_ADD_TOKEN(lip->m_digest_psi, WITH_CUBE_SYM, +@@ -966,14 +965,13 @@ int MYSQLlex(void *arg, void *yythd) + return token; + } + +-int lex_one_token(void *arg, void *yythd) ++int lex_one_token(void *arg, THD *thd) + { + reg1 uchar c= 0; + bool comment_closed; + int tokval, result_state; + uint length; + enum my_lex_states state; +- THD *thd= (THD *)yythd; + Lex_input_stream *lip= & thd->m_parser_state->m_lip; + LEX *lex= thd->lex; + YYSTYPE *yylval=(YYSTYPE*) arg; +diff --git a/sql/sql_lex.h b/sql/sql_lex.h +index b7030e4..e2d3a60 100644 +--- a/sql/sql_lex.h ++++ b/sql/sql_lex.h +@@ -2845,7 +2845,7 @@ extern void lex_init(void); + extern void lex_free(void); + extern void lex_start(THD *thd); + extern void lex_end(LEX *lex); +-extern int MYSQLlex(void *arg, void *yythd); ++extern int MYSQLlex(void *arg, THD *thd); + + extern void trim_whitespace(const CHARSET_INFO *cs, LEX_STRING *str); + +diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc +index bcf5be1..d58838b 100644 +--- a/sql/sql_parse.cc ++++ b/sql/sql_parse.cc +@@ -8497,7 +8497,7 @@ bool check_host_name(LEX_STRING *str) + } + + +-extern int MYSQLparse(void *thd); // from sql_yacc.cc ++extern int MYSQLparse(THD *thd); // from sql_yacc.cc + + + /** +diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy +index 0c9e81d..765e389 100644 +--- a/sql/sql_yacc.yy ++++ b/sql/sql_yacc.yy +@@ -22,21 +22,14 @@ + */ + + %{ +-/* thd is passed as an argument to yyparse(), and subsequently to yylex(). +-** The type will be void*, so it must be cast to (THD*) when used. +-** Use the YYTHD macro for this. +-*/ +-#define YYPARSE_PARAM yythd +-#define YYLEX_PARAM yythd +-#define YYTHD ((THD *)yythd) +-#define YYLIP (& YYTHD->m_parser_state->m_lip) +-#define YYPS (& YYTHD->m_parser_state->m_yacc) +-#define YYCSCL YYTHD->variables.character_set_client ++#define YYLIP (& thd->m_parser_state->m_lip) ++#define YYPS (& thd->m_parser_state->m_yacc) ++#define YYCSCL thd->variables.character_set_client + + #define MYSQL_YACC + #define YYINITDEPTH 100 + #define YYMAXDEPTH 3200 /* Because of 64K stack */ +-#define Lex (YYTHD->lex) ++#define Lex (thd->lex) + #define Select Lex->current_select + #include "sql_priv.h" + #include "unireg.h" // REQUIRED: for other includes +@@ -85,7 +78,7 @@ int yylex(void *yylval, void *yythd); + ulong val= *(F); \ + if (my_yyoverflow((B), (D), &val)) \ + { \ +- yyerror((char*) (A)); \ ++ yyerror(current_thd, (char*) (A)); \ + return 2; \ + } \ + else \ +@@ -97,7 +90,7 @@ int yylex(void *yylval, void *yythd); + #define MYSQL_YYABORT \ + do \ + { \ +- LEX::cleanup_lex_after_parse_error(YYTHD);\ ++ LEX::cleanup_lex_after_parse_error(thd); \ + YYABORT; \ + } while (0) + +@@ -183,10 +176,8 @@ void my_parse_error(const char *s) + to abort from the parser. + */ + +-void MYSQLerror(const char *s) ++void MYSQLerror(THD *thd, const char *s) + { +- THD *thd= current_thd; +- + /* + Restore the original LEX if it was replaced when parsing + a stored procedure. We must ensure that a parsing error +@@ -1024,7 +1015,10 @@ bool match_authorized_user(Security_context *ctx, LEX_USER *user) + bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); + %} + +-%pure_parser /* We have threads */ ++/* We have threads */ ++%define api.pure ++%parse-param { THD *thd } ++%lex-param { THD *thd } + /* + Currently there are 161 shift/reduce conflicts. + We should not introduce new conflicts any more. +@@ -1971,7 +1965,6 @@ rule: <-- starts at col 1 + query: + END_OF_INPUT + { +- THD *thd= YYTHD; + if (!thd->bootstrap && + (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT))) + { +@@ -1985,7 +1978,7 @@ query: + { + Lex_input_stream *lip = YYLIP; + +- if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) && ++ if ((thd->client_capabilities & CLIENT_MULTI_QUERIES) && + lip->multi_statements && + ! lip->eof()) + { +@@ -2082,7 +2075,6 @@ statement: + deallocate: + deallocate_or_drop PREPARE_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_DEALLOCATE_PREPARE; + lex->prepared_stmt_name= $3; +@@ -2097,7 +2089,6 @@ deallocate_or_drop: + prepare: + PREPARE_SYM ident FROM prepare_src + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_PREPARE; + lex->prepared_stmt_name= $2; +@@ -2107,14 +2098,12 @@ prepare: + prepare_src: + TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $1; + lex->prepared_stmt_code_is_varref= FALSE; + } + | '@' ident_or_text + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->prepared_stmt_code= $2; + lex->prepared_stmt_code_is_varref= TRUE; +@@ -2124,7 +2113,6 @@ prepare_src: + execute: + EXECUTE_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_EXECUTE; + lex->prepared_stmt_name= $2; +@@ -2291,7 +2279,7 @@ master_def: + } + if (Lex->mi.heartbeat_period > slave_net_timeout) + { +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX, + ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX)); + } +@@ -2299,7 +2287,7 @@ master_def: + { + if (Lex->mi.heartbeat_period != 0.0) + { +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN, + ER(ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN)); + Lex->mi.heartbeat_period= 0.0; +@@ -2382,7 +2370,6 @@ master_file_def: + create: + CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_TABLE; + if (!lex->select_lex.add_table_to_list(thd, $5, NULL, +@@ -2408,7 +2395,6 @@ create: + } + create2 + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->current_select= &lex->select_lex; + if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) && +@@ -2417,7 +2403,7 @@ create: + lex->create_info.db_type= + lex->create_info.options & HA_LEX_CREATE_TMP_TABLE ? + ha_default_temp_handlerton(thd) : ha_default_handlerton(thd); +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_WARN_USING_OTHER_HANDLER, + ER(ER_WARN_USING_OTHER_HANDLER), + ha_resolve_storage_engine_name(lex->create_info.db_type), +@@ -2551,7 +2537,6 @@ server_option: + event_tail: + remember_name EVENT_SYM opt_if_not_exists sp_name + { +- THD *thd= YYTHD; + LEX *lex=Lex; + + lex->stmt_definition_begin= $1; +@@ -2618,7 +2603,7 @@ opt_ev_status: + ev_starts: + /* empty */ + { +- Item *item= new (YYTHD->mem_root) Item_func_now_local(0); ++ Item *item= new (thd->mem_root) Item_func_now_local(0); + if (item == NULL) + MYSQL_YYABORT; + Lex->event_parse_data->item_starts= item; +@@ -2668,7 +2653,6 @@ opt_ev_comment: + + ev_sql_stmt: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -2711,7 +2695,6 @@ ev_sql_stmt: + } + ev_sql_stmt_inner + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + sp_finish_parsing(thd); +@@ -2765,11 +2748,10 @@ sp_name: + $$= new sp_name($1, $3, true); + if ($$ == NULL) + MYSQL_YYABORT; +- $$->init_qname(YYTHD); ++ $$->init_qname(thd); + } + | ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_STRING db; + if (sp_check_name(&$1)) +@@ -2839,7 +2821,7 @@ call: + lex->sql_command= SQLCOM_CALL; + lex->spname= $2; + lex->value_list.empty(); +- sp_add_used_routine(lex, YYTHD, $2, SP_TYPE_PROCEDURE); ++ sp_add_used_routine(lex, thd, $2, SP_TYPE_PROCEDURE); + } + opt_sp_cparam_list {} + ; +@@ -2900,7 +2882,6 @@ sp_init_param: + sp_fdparam: + ident sp_init_param type_with_opt_collate + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -2941,7 +2922,6 @@ sp_pdparams: + sp_pdparam: + sp_opt_inout sp_init_param ident type_with_opt_collate + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3017,7 +2997,6 @@ sp_decls: + sp_decl: + DECLARE_SYM sp_decl_idents + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3028,7 +3007,6 @@ sp_decl: + type_with_opt_collate + sp_opt_default + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3101,7 +3079,6 @@ sp_decl: + } + | DECLARE_SYM ident CONDITION_SYM FOR_SYM sp_cond + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); + +@@ -3117,7 +3094,6 @@ sp_decl: + } + | DECLARE_SYM sp_handler_type HANDLER_SYM FOR_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -3157,7 +3133,6 @@ sp_decl: + } + sp_hcond_list sp_proc_stmt + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3191,7 +3166,6 @@ sp_decl: + } + | DECLARE_SYM ident CURSOR_SYM FOR_SYM + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + +@@ -3200,7 +3174,6 @@ sp_decl: + } + select + { +- THD *thd= YYTHD; + LEX *cursor_lex= Lex; + sp_head *sp= cursor_lex->sphead; + +@@ -3305,7 +3278,7 @@ sp_cond: + my_error(ER_WRONG_VALUE, MYF(0), "CONDITION", "0"); + MYSQL_YYABORT; + } +- $$= new (YYTHD->mem_root) sp_condition_value($1); ++ $$= new (thd->mem_root) sp_condition_value($1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3328,7 +3301,7 @@ sqlstate: + my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str); + MYSQL_YYABORT; + } +- $$= new (YYTHD->mem_root) sp_condition_value($3.str); ++ $$= new (thd->mem_root) sp_condition_value($3.str); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3359,19 +3332,19 @@ sp_hcond: + } + | SQLWARNING_SYM /* SQLSTATEs 01??? */ + { +- $$= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::WARNING); ++ $$= new (thd->mem_root) sp_condition_value(sp_condition_value::WARNING); + if ($$ == NULL) + MYSQL_YYABORT; + } + | not FOUND_SYM /* SQLSTATEs 02??? */ + { +- $$= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::NOT_FOUND); ++ $$= new (thd->mem_root) sp_condition_value(sp_condition_value::NOT_FOUND); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SQLEXCEPTION_SYM /* All other SQLSTATEs */ + { +- $$= new (YYTHD->mem_root) sp_condition_value(sp_condition_value::EXCEPTION); ++ $$= new (thd->mem_root) sp_condition_value(sp_condition_value::EXCEPTION); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3380,7 +3353,6 @@ sp_hcond: + signal_stmt: + SIGNAL_SYM signal_value opt_set_signal_information + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Yacc_state *state= & thd->m_parser_state->m_yacc; + +@@ -3433,7 +3405,7 @@ opt_signal_value: + opt_set_signal_information: + /* empty */ + { +- YYTHD->m_parser_state->m_yacc.m_set_signal_info.clear(); ++ thd->m_parser_state->m_yacc.m_set_signal_info.clear(); + } + | SET signal_information_item_list + ; +@@ -3442,7 +3414,7 @@ signal_information_item_list: + signal_condition_information_item_name EQ signal_allowed_expr + { + Set_signal_information *info; +- info= & YYTHD->m_parser_state->m_yacc.m_set_signal_info; ++ info= &thd->m_parser_state->m_yacc.m_set_signal_info; + int index= (int) $1; + info->clear(); + info->m_item[index]= $3; +@@ -3451,7 +3423,7 @@ signal_information_item_list: + signal_condition_information_item_name EQ signal_allowed_expr + { + Set_signal_information *info; +- info= & YYTHD->m_parser_state->m_yacc.m_set_signal_info; ++ info= &thd->m_parser_state->m_yacc.m_set_signal_info; + int index= (int) $3; + if (info->m_item[index] != NULL) + { +@@ -3522,7 +3494,6 @@ signal_condition_information_item_name: + resignal_stmt: + RESIGNAL_SYM opt_signal_value opt_set_signal_information + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Yacc_state *state= & thd->m_parser_state->m_yacc; + +@@ -3543,7 +3514,7 @@ get_diagnostics: + info->set_which_da($2); + + Lex->sql_command= SQLCOM_GET_DIAGNOSTICS; +- Lex->m_sql_cmd= new (YYTHD->mem_root) Sql_cmd_get_diagnostics(info); ++ Lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_get_diagnostics(info); + + if (Lex->m_sql_cmd == NULL) + MYSQL_YYABORT; +@@ -3560,13 +3531,13 @@ which_area: + diagnostics_information: + statement_information + { +- $$= new (YYTHD->mem_root) Statement_information($1); ++ $$= new (thd->mem_root) Statement_information($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CONDITION_SYM condition_number condition_information + { +- $$= new (YYTHD->mem_root) Condition_information($2, $3); ++ $$= new (thd->mem_root) Condition_information($2, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3575,7 +3546,7 @@ diagnostics_information: + statement_information: + statement_information_item + { +- $$= new (YYTHD->mem_root) List<Statement_information_item>; ++ $$= new (thd->mem_root) List<Statement_information_item>; + if ($$ == NULL || $$->push_back($1)) + MYSQL_YYABORT; + } +@@ -3590,7 +3561,7 @@ statement_information: + statement_information_item: + simple_target_specification EQ statement_information_item_name + { +- $$= new (YYTHD->mem_root) Statement_information_item($3, $1); ++ $$= new (thd->mem_root) Statement_information_item($3, $1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3598,7 +3569,6 @@ statement_information_item: + simple_target_specification: + ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp= lex->sphead; +@@ -3627,7 +3597,7 @@ simple_target_specification: + } + | '@' ident_or_text + { +- $$= new (YYTHD->mem_root) Item_func_get_user_var($2); ++ $$= new (thd->mem_root) Item_func_get_user_var($2); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3652,7 +3622,7 @@ condition_number: + condition_information: + condition_information_item + { +- $$= new (YYTHD->mem_root) List<Condition_information_item>; ++ $$= new (thd->mem_root) List<Condition_information_item>; + if ($$ == NULL || $$->push_back($1)) + MYSQL_YYABORT; + } +@@ -3667,7 +3637,7 @@ condition_information: + condition_information_item: + simple_target_specification EQ condition_information_item_name + { +- $$= new (YYTHD->mem_root) Condition_information_item($3, $1); ++ $$= new (thd->mem_root) Condition_information_item($3, $1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -3706,7 +3676,6 @@ sp_decl_idents: + { + /* NOTE: field definition is filled in sp_decl section. */ + +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); + +@@ -3726,7 +3695,6 @@ sp_decl_idents: + { + /* NOTE: field definition is filled in sp_decl section. */ + +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); + +@@ -3782,7 +3750,6 @@ sp_proc_stmt_if: + + sp_proc_stmt_statement: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp= lex->sphead; +@@ -3792,7 +3759,6 @@ sp_proc_stmt_statement: + } + statement + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -3839,7 +3805,6 @@ sp_proc_stmt_statement: + sp_proc_stmt_return: + RETURN_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -3849,7 +3814,6 @@ sp_proc_stmt_return: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -3895,7 +3859,6 @@ sp_proc_stmt_return: + + sp_proc_stmt_unlabeled: + { /* Unlabeled controls get a secret label. */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3918,7 +3881,6 @@ sp_proc_stmt_unlabeled: + sp_proc_stmt_leave: + LEAVE_SYM label_ident + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp = lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -3977,7 +3939,6 @@ sp_proc_stmt_leave: + sp_proc_stmt_iterate: + ITERATE_SYM label_ident + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4027,7 +3988,6 @@ sp_proc_stmt_iterate: + sp_proc_stmt_open: + OPEN_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4051,7 +4011,6 @@ sp_proc_stmt_open: + sp_proc_stmt_fetch: + FETCH_SYM sp_opt_fetch_noise ident INTO + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4077,7 +4036,6 @@ sp_proc_stmt_fetch: + sp_proc_stmt_close: + CLOSE_SYM ident + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4145,7 +4103,6 @@ sp_fetch_list: + + sp_if: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4154,7 +4111,6 @@ sp_if: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4190,7 +4146,6 @@ sp_if: + } + THEN_SYM sp_proc_stmts1 + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4232,7 +4187,6 @@ case_stmt_specification: + simple_case_stmt: + CASE_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4243,7 +4197,6 @@ simple_case_stmt: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + +@@ -4294,7 +4247,7 @@ simple_case_stmt: + searched_case_stmt: + CASE_SYM + { +- case_stmt_action_case(YYTHD); ++ case_stmt_action_case(thd); + } + searched_when_clause_list + else_clause_opt +@@ -4318,7 +4271,6 @@ searched_when_clause_list: + simple_when_clause: + WHEN_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4329,7 +4281,6 @@ simple_when_clause: + { + /* Simple case: <caseval> = <whenval> */ + +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4368,7 +4319,7 @@ simple_when_clause: + THEN_SYM + sp_proc_stmts1 + { +- if (case_stmt_action_then(YYTHD, Lex)) ++ if (case_stmt_action_then(thd, Lex)) + MYSQL_YYABORT; + } + ; +@@ -4376,7 +4327,6 @@ simple_when_clause: + searched_when_clause: + WHEN_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4385,7 +4335,6 @@ searched_when_clause: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4421,7 +4370,7 @@ searched_when_clause: + THEN_SYM + sp_proc_stmts1 + { +- if (case_stmt_action_then(YYTHD, Lex)) ++ if (case_stmt_action_then(thd, Lex)) + MYSQL_YYABORT; + } + ; +@@ -4429,7 +4378,6 @@ searched_when_clause: + else_clause_opt: + /* empty */ + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4459,7 +4407,7 @@ sp_labeled_control: + } + else + { +- lab= pctx->push_label(YYTHD, $1, sp->instructions()); ++ lab= pctx->push_label(thd, $1, sp->instructions()); + lab->type= sp_label::ITERATION; + } + } +@@ -4501,7 +4449,7 @@ sp_labeled_block: + MYSQL_YYABORT; + } + +- lab= pctx->push_label(YYTHD, $1, sp->instructions()); ++ lab= pctx->push_label(thd, $1, sp->instructions()); + lab->type= sp_label::BEGIN; + } + sp_block_content sp_opt_label +@@ -4528,7 +4476,7 @@ sp_unlabeled_block: + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); + + sp_label *lab= +- pctx->push_label(YYTHD, EMPTY_STR, sp->instructions()); ++ pctx->push_label(thd, EMPTY_STR, sp->instructions()); + + lab->type= sp_label::BEGIN; + } +@@ -4544,7 +4492,6 @@ sp_block_content: + { /* QQ This is just a dummy for grouping declarations and statements + together. No [[NOT] ATOMIC] yet, and we need to figure out how + make it coexist with the existing BEGIN COMMIT/ROLLBACK. */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *parent_pctx= lex->get_sp_current_parsing_ctx(); + +@@ -4557,7 +4504,6 @@ sp_block_content: + sp_proc_stmts + END + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4593,7 +4539,6 @@ sp_unlabeled_control: + LOOP_SYM + sp_proc_stmts1 END LOOP_SYM + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4608,7 +4553,6 @@ sp_unlabeled_control: + } + | WHILE_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4617,7 +4561,6 @@ sp_unlabeled_control: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4655,7 +4598,6 @@ sp_unlabeled_control: + sp_proc_stmts1 + END WHILE_SYM + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -4671,7 +4613,6 @@ sp_unlabeled_control: + } + | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -4680,7 +4621,6 @@ sp_unlabeled_control: + } + expr + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -5133,7 +5073,6 @@ create2: + create3 {} + | LIKE table_ident + { +- THD *thd= YYTHD; + TABLE_LIST *src_table; + LEX *lex= thd->lex; + +@@ -5148,7 +5087,6 @@ create2: + } + | '(' LIKE table_ident ')' + { +- THD *thd= YYTHD; + TABLE_LIST *src_table; + LEX *lex= thd->lex; + +@@ -5749,7 +5687,7 @@ part_value_expr_item: + my_parse_error(ER(ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR)); + MYSQL_YYABORT; + } +- if (part_info->add_column_list_value(YYTHD, part_expr)) ++ if (part_info->add_column_list_value(thd, part_expr)) + { + MYSQL_YYABORT; + } +@@ -6207,7 +6145,6 @@ default_collation: + storage_engines: + ident_or_text + { +- THD *thd= YYTHD; + plugin_ref plugin= + ha_resolve_by_name(thd, &$1, + thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE); +@@ -6233,7 +6170,6 @@ storage_engines: + known_storage_engines: + ident_or_text + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + plugin_ref plugin= + ha_resolve_by_name(thd, &$1, +@@ -6469,7 +6405,7 @@ type: + { + /* Reset unsupported positive column width to default value */ + Lex->length= NULL; +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_INVALID_YEAR_COLUMN_LENGTH, + ER(ER_INVALID_YEAR_COLUMN_LENGTH), + length); +@@ -6483,7 +6419,7 @@ type: + { $$= MYSQL_TYPE_TIME2; } + | TIMESTAMP type_datetime_precision + { +- if (YYTHD->variables.sql_mode & MODE_MAXDB) ++ if (thd->variables.sql_mode & MODE_MAXDB) + $$=MYSQL_TYPE_DATETIME2; + else + { +@@ -6491,7 +6427,7 @@ type: + Unlike other types TIMESTAMP fields are NOT NULL by default. + This behavior is deprecated now. + */ +- if (!YYTHD->variables.explicit_defaults_for_timestamp) ++ if (!thd->variables.explicit_defaults_for_timestamp) + Lex->type|= NOT_NULL_FLAG; + + $$=MYSQL_TYPE_TIMESTAMP2; +@@ -6618,7 +6554,7 @@ int_type: + real_type: + REAL + { +- $$= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ? ++ $$= thd->variables.sql_mode & MODE_REAL_AS_FLOAT ? + MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE; + } + | DOUBLE_SYM +@@ -6807,7 +6743,7 @@ type_with_opt_collate: + now: + NOW_SYM func_datetime_precision + { +- $$= new (YYTHD->mem_root) Item_func_now_local($2); ++ $$= new (thd->mem_root) Item_func_now_local($2); + if ($$ == NULL) + MYSQL_YYABORT; + }; +@@ -7287,7 +7223,6 @@ string_list: + alter: + ALTER opt_ignore TABLE_SYM table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->name.str= 0; + lex->name.length= 0; +@@ -7313,7 +7248,6 @@ alter: + } + alter_commands + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + if (!lex->m_sql_cmd) + { +@@ -7426,7 +7360,7 @@ alter: + Event_parse_data. + */ + +- if (!(Lex->event_parse_data= Event_parse_data::new_instance(YYTHD))) ++ if (!(Lex->event_parse_data= Event_parse_data::new_instance(thd))) + MYSQL_YYABORT; + Lex->event_parse_data->identifier= $4; + +@@ -7529,7 +7463,7 @@ alter_commands: + /* empty */ + | DISCARD TABLESPACE + { +- Lex->m_sql_cmd= new (YYTHD->mem_root) ++ Lex->m_sql_cmd= new (thd->mem_root) + Sql_cmd_discard_import_tablespace( + Sql_cmd_discard_import_tablespace::DISCARD_TABLESPACE); + if (Lex->m_sql_cmd == NULL) +@@ -7537,7 +7471,7 @@ alter_commands: + } + | IMPORT TABLESPACE + { +- Lex->m_sql_cmd= new (YYTHD->mem_root) ++ Lex->m_sql_cmd= new (thd->mem_root) + Sql_cmd_discard_import_tablespace( + Sql_cmd_discard_import_tablespace::IMPORT_TABLESPACE); + if (Lex->m_sql_cmd == NULL) +@@ -7571,7 +7505,6 @@ alter_commands: + | OPTIMIZE PARTITION_SYM opt_no_write_to_binlog + all_or_alt_part_name_list + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->no_write_to_binlog= $3; + lex->check_opt.init(); +@@ -7585,7 +7518,6 @@ alter_commands: + | ANALYZE_SYM PARTITION_SYM opt_no_write_to_binlog + all_or_alt_part_name_list + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->no_write_to_binlog= $3; + lex->check_opt.init(); +@@ -7597,7 +7529,6 @@ alter_commands: + } + | CHECK_SYM PARTITION_SYM all_or_alt_part_name_list + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->check_opt.init(); + DBUG_ASSERT(!lex->m_sql_cmd); +@@ -7610,7 +7541,6 @@ alter_commands: + | REPAIR PARTITION_SYM opt_no_write_to_binlog + all_or_alt_part_name_list + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->no_write_to_binlog= $3; + lex->check_opt.init(); +@@ -7630,7 +7560,6 @@ alter_commands: + } + | TRUNCATE_SYM PARTITION_SYM all_or_alt_part_name_list + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->check_opt.init(); + DBUG_ASSERT(!lex->m_sql_cmd); +@@ -7643,7 +7572,6 @@ alter_commands: + | EXCHANGE_SYM PARTITION_SYM alt_part_name_item + WITH TABLE_SYM table_ident have_partitioning + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + size_t dummy; + lex->select_lex.db=$6->db.str; +@@ -7925,7 +7853,6 @@ alter_list_item: + { + if (!$4) + { +- THD *thd= YYTHD; + $4= thd->variables.collation_database; + } + $5= $5 ? $5 : $4; +@@ -8287,7 +8214,6 @@ repair: + } + table_list opt_mi_repair_type + { +- THD *thd= YYTHD; + LEX* lex= thd->lex; + DBUG_ASSERT(!lex->m_sql_cmd); + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_repair_table(); +@@ -8325,7 +8251,6 @@ analyze: + } + table_list + { +- THD *thd= YYTHD; + LEX* lex= thd->lex; + DBUG_ASSERT(!lex->m_sql_cmd); + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_analyze_table(); +@@ -8360,7 +8285,6 @@ check: + } + table_list opt_mi_check_type + { +- THD *thd= YYTHD; + LEX* lex= thd->lex; + DBUG_ASSERT(!lex->m_sql_cmd); + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_check_table(); +@@ -8401,7 +8325,6 @@ optimize: + } + table_list + { +- THD *thd= YYTHD; + LEX* lex= thd->lex; + DBUG_ASSERT(!lex->m_sql_cmd); + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_optimize_table(); +@@ -8486,7 +8409,7 @@ keycache_list: + assign_to_keycache: + table_ident cache_keys_spec + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, 0, TL_READ, + MDL_SHARED_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; +@@ -8496,7 +8419,7 @@ assign_to_keycache: + assign_to_keycache_parts: + table_ident adm_partition cache_keys_spec + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, 0, TL_READ, + MDL_SHARED_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; +@@ -8532,7 +8455,7 @@ preload_list: + preload_keys: + table_ident cache_keys_spec opt_ignore_leaves + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, $3, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, $3, TL_READ, + MDL_SHARED_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; +@@ -8542,7 +8465,7 @@ preload_keys: + preload_keys_parts: + table_ident adm_partition cache_keys_spec opt_ignore_leaves + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, $4, TL_READ, ++ if (!Select->add_table_to_list(thd, $1, NULL, $4, TL_READ, + MDL_SHARED_READ, + Select->pop_index_hints())) + MYSQL_YYABORT; +@@ -8559,7 +8482,7 @@ adm_partition: + + cache_keys_spec: + { +- Lex->select_lex.alloc_index_hints(YYTHD); ++ Lex->select_lex.alloc_index_hints(thd); + Select->set_index_hint_type(INDEX_HINT_USE, + old_mode ? + INDEX_HINT_MASK_JOIN : +@@ -8774,7 +8697,6 @@ select_item_list: + | select_item + | '*' + { +- THD *thd= YYTHD; + Item *item= new (thd->mem_root) + Item_field(&thd->lex->current_select->context, + NULL, NULL, "*"); +@@ -8789,14 +8711,11 @@ select_item_list: + select_item: + remember_name table_wild remember_end + { +- THD *thd= YYTHD; +- + if (add_item_to_list(thd, $2)) + MYSQL_YYABORT; + } + | remember_name expr remember_end select_alias + { +- THD *thd= YYTHD; + DBUG_ASSERT($1 < $3); + + if (add_item_to_list(thd, $2)) +@@ -8891,7 +8810,7 @@ expr: + else + { + /* X OR Y */ +- $$ = new (YYTHD->mem_root) Item_cond_or($1, $3); ++ $$ = new (thd->mem_root) Item_cond_or($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8899,7 +8818,7 @@ expr: + | expr XOR expr %prec XOR + { + /* XOR is a proprietary extension */ +- $$ = new (YYTHD->mem_root) Item_func_xor($1, $3); ++ $$ = new (thd->mem_root) Item_func_xor($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8941,50 +8860,50 @@ expr: + else + { + /* X AND Y */ +- $$ = new (YYTHD->mem_root) Item_cond_and($1, $3); ++ $$ = new (thd->mem_root) Item_cond_and($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + } + | NOT_SYM expr %prec NOT_SYM + { +- $$= negate_expression(YYTHD, $2); ++ $$= negate_expression(thd, $2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS TRUE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_istrue($1); ++ $$= new (thd->mem_root) Item_func_istrue($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not TRUE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnottrue($1); ++ $$= new (thd->mem_root) Item_func_isnottrue($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS FALSE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isfalse($1); ++ $$= new (thd->mem_root) Item_func_isfalse($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not FALSE_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotfalse($1); ++ $$= new (thd->mem_root) Item_func_isnotfalse($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS UNKNOWN_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnull($1); ++ $$= new (thd->mem_root) Item_func_isnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not UNKNOWN_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotnull($1); ++ $$= new (thd->mem_root) Item_func_isnotnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -8994,19 +8913,19 @@ expr: + bool_pri: + bool_pri IS NULL_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnull($1); ++ $$= new (thd->mem_root) Item_func_isnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri IS not NULL_SYM %prec IS + { +- $$= new (YYTHD->mem_root) Item_func_isnotnull($1); ++ $$= new (thd->mem_root) Item_func_isnotnull($1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bool_pri EQUAL_SYM predicate %prec EQUAL_SYM + { +- $$= new (YYTHD->mem_root) Item_func_equal($1,$3); ++ $$= new (thd->mem_root) Item_func_equal($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9028,13 +8947,12 @@ bool_pri: + predicate: + bit_expr IN_SYM '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_in_subselect($1, $4); ++ $$= new (thd->mem_root) Item_in_subselect($1, $4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not IN_SYM '(' subselect ')' + { +- THD *thd= YYTHD; + Item *item= new (thd->mem_root) Item_in_subselect($1, $5); + if (item == NULL) + MYSQL_YYABORT; +@@ -9044,7 +8962,7 @@ predicate: + } + | bit_expr IN_SYM '(' expr ')' + { +- $$= handle_sql2003_note184_exception(YYTHD, $1, true, $4); ++ $$= handle_sql2003_note184_exception(thd, $1, true, $4); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9052,13 +8970,13 @@ predicate: + { + $6->push_front($4); + $6->push_front($1); +- $$= new (YYTHD->mem_root) Item_func_in(*$6); ++ $$= new (thd->mem_root) Item_func_in(*$6); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not IN_SYM '(' expr ')' + { +- $$= handle_sql2003_note184_exception(YYTHD, $1, false, $5); ++ $$= handle_sql2003_note184_exception(thd, $1, false, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9066,7 +8984,7 @@ predicate: + { + $7->push_front($5); + $7->push_front($1); +- Item_func_in *item = new (YYTHD->mem_root) Item_func_in(*$7); ++ Item_func_in *item = new (thd->mem_root) Item_func_in(*$7); + if (item == NULL) + MYSQL_YYABORT; + item->negate(); +@@ -9074,14 +8992,14 @@ predicate: + } + | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate + { +- $$= new (YYTHD->mem_root) Item_func_between($1,$3,$5); ++ $$= new (thd->mem_root) Item_func_between($1,$3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate + { + Item_func_between *item; +- item= new (YYTHD->mem_root) Item_func_between($1,$4,$6); ++ item= new (thd->mem_root) Item_func_between($1,$4,$6); + if (item == NULL) + MYSQL_YYABORT; + item->negate(); +@@ -9089,42 +9007,42 @@ predicate: + } + | bit_expr SOUNDS_SYM LIKE bit_expr + { +- Item *item1= new (YYTHD->mem_root) Item_func_soundex($1); +- Item *item4= new (YYTHD->mem_root) Item_func_soundex($4); ++ Item *item1= new (thd->mem_root) Item_func_soundex($1); ++ Item *item4= new (thd->mem_root) Item_func_soundex($4); + if ((item1 == NULL) || (item4 == NULL)) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_func_eq(item1, item4); ++ $$= new (thd->mem_root) Item_func_eq(item1, item4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr LIKE simple_expr opt_escape + { +- $$= new (YYTHD->mem_root) Item_func_like($1,$3,$4,Lex->escape_used); ++ $$= new (thd->mem_root) Item_func_like($1,$3,$4,Lex->escape_used); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not LIKE simple_expr opt_escape + { +- Item *item= new (YYTHD->mem_root) Item_func_like($1,$4,$5, ++ Item *item= new (thd->mem_root) Item_func_like($1,$4,$5, + Lex->escape_used); + if (item == NULL) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_func_not(item); ++ $$= new (thd->mem_root) Item_func_not(item); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr REGEXP bit_expr + { +- $$= new (YYTHD->mem_root) Item_func_regex($1,$3); ++ $$= new (thd->mem_root) Item_func_regex($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr not REGEXP bit_expr + { +- Item *item= new (YYTHD->mem_root) Item_func_regex($1,$4); ++ Item *item= new (thd->mem_root) Item_func_regex($1,$4); + if (item == NULL) + MYSQL_YYABORT; +- $$= negate_expression(YYTHD, item); ++ $$= negate_expression(thd, item); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9134,85 +9052,85 @@ predicate: + bit_expr: + bit_expr '|' bit_expr %prec '|' + { +- $$= new (YYTHD->mem_root) Item_func_bit_or($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_or($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '&' bit_expr %prec '&' + { +- $$= new (YYTHD->mem_root) Item_func_bit_and($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_and($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT + { +- $$= new (YYTHD->mem_root) Item_func_shift_left($1,$3); ++ $$= new (thd->mem_root) Item_func_shift_left($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT + { +- $$= new (YYTHD->mem_root) Item_func_shift_right($1,$3); ++ $$= new (thd->mem_root) Item_func_shift_right($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '+' bit_expr %prec '+' + { +- $$= new (YYTHD->mem_root) Item_func_plus($1,$3); ++ $$= new (thd->mem_root) Item_func_plus($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '-' bit_expr %prec '-' + { +- $$= new (YYTHD->mem_root) Item_func_minus($1,$3); ++ $$= new (thd->mem_root) Item_func_minus($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '+' INTERVAL_SYM expr interval %prec '+' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,0); ++ $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '-' INTERVAL_SYM expr interval %prec '-' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,1); ++ $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '*' bit_expr %prec '*' + { +- $$= new (YYTHD->mem_root) Item_func_mul($1,$3); ++ $$= new (thd->mem_root) Item_func_mul($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '/' bit_expr %prec '/' + { +- $$= new (YYTHD->mem_root) Item_func_div($1,$3); ++ $$= new (thd->mem_root) Item_func_div($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '%' bit_expr %prec '%' + { +- $$= new (YYTHD->mem_root) Item_func_mod($1,$3); ++ $$= new (thd->mem_root) Item_func_mod($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr DIV_SYM bit_expr %prec DIV_SYM + { +- $$= new (YYTHD->mem_root) Item_func_int_div($1,$3); ++ $$= new (thd->mem_root) Item_func_int_div($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr MOD_SYM bit_expr %prec MOD_SYM + { +- $$= new (YYTHD->mem_root) Item_func_mod($1,$3); ++ $$= new (thd->mem_root) Item_func_mod($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | bit_expr '^' bit_expr + { +- $$= new (YYTHD->mem_root) Item_func_bit_xor($1,$3); ++ $$= new (thd->mem_root) Item_func_bit_xor($1,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9261,7 +9179,6 @@ simple_expr: + | function_call_conflict + | simple_expr COLLATE_SYM ident_or_text %prec NEG + { +- THD *thd= YYTHD; + Item *i1= new (thd->mem_root) Item_string($3.str, + $3.length, + thd->charset()); +@@ -9277,7 +9194,7 @@ simple_expr: + | sum_expr + | simple_expr OR_OR_SYM simple_expr + { +- $$= new (YYTHD->mem_root) Item_func_concat($1, $3); ++ $$= new (thd->mem_root) Item_func_concat($1, $3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9287,25 +9204,25 @@ simple_expr: + } + | '-' simple_expr %prec NEG + { +- $$= new (YYTHD->mem_root) Item_func_neg($2); ++ $$= new (thd->mem_root) Item_func_neg($2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | '~' simple_expr %prec NEG + { +- $$= new (YYTHD->mem_root) Item_func_bit_neg($2); ++ $$= new (thd->mem_root) Item_func_bit_neg($2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | not2 simple_expr %prec NEG + { +- $$= negate_expression(YYTHD, $2); ++ $$= negate_expression(thd, $2); + if ($$ == NULL) + MYSQL_YYABORT; + } + | '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_singlerow_subselect($2); ++ $$= new (thd->mem_root) Item_singlerow_subselect($2); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9314,20 +9231,20 @@ simple_expr: + | '(' expr ',' expr_list ')' + { + $4->push_front($2); +- $$= new (YYTHD->mem_root) Item_row(*$4); ++ $$= new (thd->mem_root) Item_row(*$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ROW_SYM '(' expr ',' expr_list ')' + { + $5->push_front($3); +- $$= new (YYTHD->mem_root) Item_row(*$5); ++ $$= new (thd->mem_root) Item_row(*$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | EXISTS '(' subselect ')' + { +- $$= new (YYTHD->mem_root) Item_exists_subselect($3); ++ $$= new (thd->mem_root) Item_exists_subselect($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9364,7 +9281,7 @@ simple_expr: + type= MYSQL_TYPE_DATETIME; + } + if (type != MYSQL_TYPE_STRING) +- $$= create_temporal_literal(YYTHD, ++ $$= create_temporal_literal(thd, + str.ptr(), str.length(), + system_charset_info, + type, false); +@@ -9375,7 +9292,7 @@ simple_expr: + | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')' + { + $2->push_front($5); +- Item_func_match *i1= new (YYTHD->mem_root) Item_func_match(*$2, $6); ++ Item_func_match *i1= new (thd->mem_root) Item_func_match(*$2, $6); + if (i1 == NULL) + MYSQL_YYABORT; + Select->add_ftfunc_to_list(i1); +@@ -9383,7 +9300,7 @@ simple_expr: + } + | BINARY simple_expr %prec NEG + { +- $$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR, NULL, NULL, ++ $$= create_func_cast(thd, $2, ITEM_CAST_CHAR, NULL, NULL, + &my_charset_bin); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -9391,27 +9308,27 @@ simple_expr: + | CAST_SYM '(' expr AS cast_type ')' + { + LEX *lex= Lex; +- $$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec, ++ $$= create_func_cast(thd, $3, $5, lex->length, lex->dec, + lex->charset); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CASE_SYM opt_expr when_list opt_else END + { +- $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 ); ++ $$= new (thd->mem_root) Item_func_case(* $3, $2, $4 ); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CONVERT_SYM '(' expr ',' cast_type ')' + { +- $$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec, ++ $$= create_func_cast(thd, $3, $5, Lex->length, Lex->dec, + Lex->charset); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CONVERT_SYM '(' expr USING charset_name ')' + { +- $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5); ++ $$= new (thd->mem_root) Item_func_conv_charset($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9424,14 +9341,14 @@ simple_expr: + my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->m_name.ptr()); + MYSQL_YYABORT; + } +- $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(), ++ $$= new (thd->mem_root) Item_default_value(Lex->current_context(), + $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VALUES '(' simple_ident_nospvar ')' + { +- $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(), ++ $$= new (thd->mem_root) Item_insert_value(Lex->current_context(), + $3); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -9439,7 +9356,7 @@ simple_expr: + | INTERVAL_SYM expr interval '+' expr %prec INTERVAL_SYM + /* we cannot put interval before - */ + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($5,$2,$3,0); ++ $$= new (thd->mem_root) Item_date_add_interval($5,$2,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9454,19 +9371,19 @@ simple_expr: + function_call_keyword: + CHAR_SYM '(' expr_list ')' + { +- $$= new (YYTHD->mem_root) Item_func_char(*$3); ++ $$= new (thd->mem_root) Item_func_char(*$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CHAR_SYM '(' expr_list USING charset_name ')' + { +- $$= new (YYTHD->mem_root) Item_func_char(*$3, $5); ++ $$= new (thd->mem_root) Item_func_char(*$3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CURRENT_USER optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context()); ++ $$= new (thd->mem_root) Item_func_current_user(Lex->current_context()); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); +@@ -9474,31 +9391,30 @@ function_call_keyword: + } + | DATE_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_typecast($3); ++ $$= new (thd->mem_root) Item_date_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DAY_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_dayofmonth($3); ++ $$= new (thd->mem_root) Item_func_dayofmonth($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HOUR_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_hour($3); ++ $$= new (thd->mem_root) Item_func_hour($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | INSERT '(' expr ',' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9); ++ $$= new (thd->mem_root) Item_func_insert($3,$5,$7,$9); + if ($$ == NULL) + MYSQL_YYABORT; + } + | INTERVAL_SYM '(' expr ',' expr ')' %prec INTERVAL_SYM + { +- THD *thd= YYTHD; + List<Item> *list= new (thd->mem_root) List<Item>; + if (list == NULL) + MYSQL_YYABORT; +@@ -9513,7 +9429,6 @@ function_call_keyword: + } + | INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' %prec INTERVAL_SYM + { +- THD *thd= YYTHD; + $7->push_front($5); + $7->push_front($3); + Item_row *item= new (thd->mem_root) Item_row(*$7); +@@ -9525,103 +9440,103 @@ function_call_keyword: + } + | LEFT '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_left($3,$5); ++ $$= new (thd->mem_root) Item_func_left($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MINUTE_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_minute($3); ++ $$= new (thd->mem_root) Item_func_minute($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MONTH_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_month($3); ++ $$= new (thd->mem_root) Item_func_month($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | RIGHT '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_right($3,$5); ++ $$= new (thd->mem_root) Item_func_right($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SECOND_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_second($3); ++ $$= new (thd->mem_root) Item_func_second($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIME_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_time_typecast($3); ++ $$= new (thd->mem_root) Item_time_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_datetime_typecast($3); ++ $$= new (thd->mem_root) Item_datetime_typecast($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0); ++ $$= new (thd->mem_root) Item_func_add_time($3, $5, 1, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($3); ++ $$= new (thd->mem_root) Item_func_trim($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' LEADING expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4); ++ $$= new (thd->mem_root) Item_func_ltrim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' TRAILING expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4); ++ $$= new (thd->mem_root) Item_func_rtrim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' BOTH expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($6,$4); ++ $$= new (thd->mem_root) Item_func_trim($6,$4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' LEADING FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ltrim($5); ++ $$= new (thd->mem_root) Item_func_ltrim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' TRAILING FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_rtrim($5); ++ $$= new (thd->mem_root) Item_func_rtrim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' BOTH FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($5); ++ $$= new (thd->mem_root) Item_func_trim($5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRIM '(' expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_trim($5,$3); ++ $$= new (thd->mem_root) Item_func_trim($5,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | USER '(' ')' + { +- $$= new (YYTHD->mem_root) Item_func_user(); ++ $$= new (thd->mem_root) Item_func_user(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); +@@ -9629,7 +9544,7 @@ function_call_keyword: + } + | YEAR_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_year($3); ++ $$= new (thd->mem_root) Item_func_year($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9650,27 +9565,27 @@ function_call_keyword: + function_call_nonkeyword: + ADDDATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, ++ $$= new (thd->mem_root) Item_date_add_interval($3, $5, + INTERVAL_DAY, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0); ++ $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CURDATE optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curdate_local(); ++ $$= new (thd->mem_root) Item_func_curdate_local(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | CURTIME func_datetime_precision + { +- $$= new (YYTHD->mem_root) Item_func_curtime_local($2); ++ $$= new (thd->mem_root) Item_func_curtime_local($2); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; +@@ -9678,26 +9593,26 @@ function_call_nonkeyword: + | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' + %prec INTERVAL_SYM + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,0); ++ $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')' + %prec INTERVAL_SYM + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,1); ++ $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | EXTRACT_SYM '(' interval FROM expr ')' + { +- $$=new (YYTHD->mem_root) Item_extract( $3, $5); ++ $$=new (thd->mem_root) Item_extract( $3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | GET_FORMAT '(' date_time_type ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_get_format($3, $5); ++ $$= new (thd->mem_root) Item_func_get_format($3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9708,44 +9623,44 @@ function_call_nonkeyword: + } + | POSITION_SYM '(' bit_expr IN_SYM expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_locate($5,$3); ++ $$ = new (thd->mem_root) Item_func_locate($5,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBDATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5, ++ $$= new (thd->mem_root) Item_date_add_interval($3, $5, + INTERVAL_DAY, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1); ++ $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_substr($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5); ++ $$= new (thd->mem_root) Item_func_substr($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr FROM expr FOR_SYM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_substr($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUBSTRING '(' expr FROM expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_substr($3,$5); ++ $$= new (thd->mem_root) Item_func_substr($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9760,42 +9675,42 @@ function_call_nonkeyword: + */ + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); + if (global_system_variables.sysdate_is_now == 0) +- $$= new (YYTHD->mem_root) Item_func_sysdate_local($2); ++ $$= new (thd->mem_root) Item_func_sysdate_local($2); + else +- $$= new (YYTHD->mem_root) Item_func_now_local($2); ++ $$= new (thd->mem_root) Item_func_now_local($2); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0); ++ $$= new (thd->mem_root) Item_date_add_interval($7,$5,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3); ++ $$= new (thd->mem_root) Item_func_timestamp_diff($5,$7,$3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | UTC_DATE_SYM optional_braces + { +- $$= new (YYTHD->mem_root) Item_func_curdate_utc(); ++ $$= new (thd->mem_root) Item_func_curdate_utc(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | UTC_TIME_SYM func_datetime_precision + { +- $$= new (YYTHD->mem_root) Item_func_curtime_utc($2); ++ $$= new (thd->mem_root) Item_func_curtime_utc($2); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | UTC_TIMESTAMP_SYM func_datetime_precision + { +- $$= new (YYTHD->mem_root) Item_func_now_utc($2); ++ $$= new (thd->mem_root) Item_func_now_utc($2); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; +@@ -9810,75 +9725,74 @@ function_call_nonkeyword: + function_call_conflict: + ASCII_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_ascii($3); ++ $$= new (thd->mem_root) Item_func_ascii($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | CHARSET '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_charset($3); ++ $$= new (thd->mem_root) Item_func_charset($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COALESCE '(' expr_list ')' + { +- $$= new (YYTHD->mem_root) Item_func_coalesce(* $3); ++ $$= new (thd->mem_root) Item_func_coalesce(* $3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COLLATION_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_collation($3); ++ $$= new (thd->mem_root) Item_func_collation($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DATABASE '(' ')' + { +- $$= new (YYTHD->mem_root) Item_func_database(); ++ $$= new (thd->mem_root) Item_func_database(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->safe_to_cache_query=0; + } + | IF '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_if($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | FORMAT_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_format($3, $5); ++ $$= new (thd->mem_root) Item_func_format($3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | FORMAT_SYM '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_format($3, $5, $7); ++ $$= new (thd->mem_root) Item_func_format($3, $5, $7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MICROSECOND_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_microsecond($3); ++ $$= new (thd->mem_root) Item_func_microsecond($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MOD_SYM '(' expr ',' expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_mod($3, $5); ++ $$ = new (thd->mem_root) Item_func_mod($3, $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | OLD_PASSWORD '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_old_password($3); ++ $$= new (thd->mem_root) Item_func_old_password($3); + Lex->contains_plaintext_password= true; + if ($$ == NULL) + MYSQL_YYABORT; + } + | PASSWORD '(' expr ')' + { +- THD *thd= YYTHD; + Item* i1; + Lex->contains_plaintext_password= true; + if (thd->variables.old_passwords == 1) +@@ -9891,31 +9805,31 @@ function_call_conflict: + } + | QUARTER_SYM '(' expr ')' + { +- $$ = new (YYTHD->mem_root) Item_func_quarter($3); ++ $$ = new (thd->mem_root) Item_func_quarter($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | REPEAT_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_repeat($3,$5); ++ $$= new (thd->mem_root) Item_func_repeat($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | REPLACE '(' expr ',' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7); ++ $$= new (thd->mem_root) Item_func_replace($3,$5,$7); + if ($$ == NULL) + MYSQL_YYABORT; + } + | REVERSE_SYM '(' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_reverse($3); ++ $$= new (thd->mem_root) Item_func_reverse($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ROW_COUNT_SYM '(' ')' + { +- $$= new (YYTHD->mem_root) Item_func_row_count(); ++ $$= new (thd->mem_root) Item_func_row_count(); + if ($$ == NULL) + MYSQL_YYABORT; + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); +@@ -9923,13 +9837,12 @@ function_call_conflict: + } + | TRUNCATE_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_round($3,$5,1); ++ $$= new (thd->mem_root) Item_func_round($3,$5,1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | WEEK_SYM '(' expr ')' + { +- THD *thd= YYTHD; + Item *i1= new (thd->mem_root) Item_int(NAME_STRING("0"), + thd->variables.default_week_format, + 1); +@@ -9941,19 +9854,19 @@ function_call_conflict: + } + | WEEK_SYM '(' expr ',' expr ')' + { +- $$= new (YYTHD->mem_root) Item_func_week($3,$5); ++ $$= new (thd->mem_root) Item_func_week($3,$5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | WEIGHT_STRING_SYM '(' expr opt_ws_levels ')' + { +- $$= new (YYTHD->mem_root) Item_func_weight_string($3, 0, 0, $4); ++ $$= new (thd->mem_root) Item_func_weight_string($3, 0, 0, $4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | WEIGHT_STRING_SYM '(' expr AS CHAR_SYM ws_nweights opt_ws_levels ')' + { +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_func_weight_string($3, 0, $6, + $7 | MY_STRXFRM_PAD_WITH_SPACE); + if ($$ == NULL) +@@ -9961,17 +9874,17 @@ function_call_conflict: + } + | WEIGHT_STRING_SYM '(' expr AS BINARY ws_nweights ')' + { +- Item *item= new (YYTHD->mem_root) Item_char_typecast($3, $6, &my_charset_bin); ++ Item *item= new (thd->mem_root) Item_char_typecast($3, $6, &my_charset_bin); + if (item == NULL) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_func_weight_string(item, 0, $6, MY_STRXFRM_PAD_WITH_SPACE); + if ($$ == NULL) + MYSQL_YYABORT; + } + | WEIGHT_STRING_SYM '(' expr ',' ulong_num ',' ulong_num ',' ulong_num ')' + { +- $$= new (YYTHD->mem_root) Item_func_weight_string($3, $5, $7, $9); ++ $$= new (thd->mem_root) Item_func_weight_string($3, $5, $7, $9); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -9993,52 +9906,52 @@ function_call_conflict: + geometry_function: + CONTAINS_SYM '(' expr ',' expr ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_mbr_rel($3, $5, + Item_func::SP_CONTAINS_FUNC)); + } + | GEOMETRYCOLLECTION '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_geometrycollection, + Geometry::wkb_point)); + } + | LINESTRING '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_linestring, + Geometry::wkb_point)); + } + | MULTILINESTRING '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multilinestring, + Geometry::wkb_linestring)); + } + | MULTIPOINT '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multipoint, + Geometry::wkb_point)); + } + | MULTIPOLYGON '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_multipolygon, + Geometry::wkb_polygon)); + } + | POINT_SYM '(' expr ',' expr ')' + { +- $$= GEOM_NEW(YYTHD, Item_func_point($3,$5)); ++ $$= GEOM_NEW(thd, Item_func_point($3,$5)); + } + | POLYGON '(' expr_list ')' + { +- $$= GEOM_NEW(YYTHD, ++ $$= GEOM_NEW(thd, + Item_func_spatial_collection(* $3, + Geometry::wkb_polygon, + Geometry::wkb_linestring)); +@@ -10076,7 +9989,6 @@ function_call_generic: + } + opt_udf_expr_list ')' + { +- THD *thd= YYTHD; + Create_func *builder; + Item *item= NULL; + +@@ -10130,7 +10042,6 @@ function_call_generic: + } + | ident '.' ident '(' opt_expr_list ')' + { +- THD *thd= YYTHD; + Create_qfunc *builder; + Item *item= NULL; + +@@ -10192,7 +10103,7 @@ opt_udf_expr_list: + udf_expr_list: + udf_expr + { +- $$= new (YYTHD->mem_root) List<Item>; ++ $$= new (thd->mem_root) List<Item>; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -10225,7 +10136,7 @@ udf_expr: + */ + else if ($2->type() != Item::FIELD_ITEM && + $2->type() != Item::REF_ITEM /* For HAVING */ ) +- $2->item_name.copy($1, (uint) ($3 - $1), YYTHD->charset()); ++ $2->item_name.copy($1, (uint) ($3 - $1), thd->charset()); + $$= $2; + } + ; +@@ -10233,46 +10144,46 @@ udf_expr: + sum_expr: + AVG_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_avg($3, FALSE); ++ $$= new (thd->mem_root) Item_sum_avg($3, FALSE); + if ($$ == NULL) + MYSQL_YYABORT; + } + | AVG_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_avg($4, TRUE); ++ $$= new (thd->mem_root) Item_sum_avg($4, TRUE); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_AND '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_and($3); ++ $$= new (thd->mem_root) Item_sum_and($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_OR '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_or($3); ++ $$= new (thd->mem_root) Item_sum_or($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIT_XOR '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_xor($3); ++ $$= new (thd->mem_root) Item_sum_xor($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COUNT_SYM '(' opt_all '*' ')' + { +- Item *item= new (YYTHD->mem_root) Item_int((int32) 0L,1); ++ Item *item= new (thd->mem_root) Item_int((int32) 0L,1); + if (item == NULL) + MYSQL_YYABORT; +- $$= new (YYTHD->mem_root) Item_sum_count(item); ++ $$= new (thd->mem_root) Item_sum_count(item); + if ($$ == NULL) + MYSQL_YYABORT; + } + | COUNT_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_count($3); ++ $$= new (thd->mem_root) Item_sum_count($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -10282,13 +10193,13 @@ sum_expr: + { Select->in_sum_expr--; } + ')' + { +- $$= new (YYTHD->mem_root) Item_sum_count(* $5); ++ $$= new (thd->mem_root) Item_sum_count(* $5); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MIN_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_min($3); ++ $$= new (thd->mem_root) Item_sum_min($3); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -10299,55 +10210,55 @@ sum_expr: + */ + | MIN_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_min($4); ++ $$= new (thd->mem_root) Item_sum_min($4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MAX_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_max($3); ++ $$= new (thd->mem_root) Item_sum_max($3); + if ($$ == NULL) + MYSQL_YYABORT; + } + | MAX_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_max($4); ++ $$= new (thd->mem_root) Item_sum_max($4); + if ($$ == NULL) + MYSQL_YYABORT; + } + | STD_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_std($3, 0); ++ $$= new (thd->mem_root) Item_sum_std($3, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VARIANCE_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_variance($3, 0); ++ $$= new (thd->mem_root) Item_sum_variance($3, 0); + if ($$ == NULL) + MYSQL_YYABORT; + } + | STDDEV_SAMP_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_std($3, 1); ++ $$= new (thd->mem_root) Item_sum_std($3, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | VAR_SAMP_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_variance($3, 1); ++ $$= new (thd->mem_root) Item_sum_variance($3, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUM_SYM '(' in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_sum($3, FALSE); ++ $$= new (thd->mem_root) Item_sum_sum($3, FALSE); + if ($$ == NULL) + MYSQL_YYABORT; + } + | SUM_SYM '(' DISTINCT in_sum_expr ')' + { +- $$= new (YYTHD->mem_root) Item_sum_sum($4, TRUE); ++ $$= new (thd->mem_root) Item_sum_sum($4, TRUE); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -10359,7 +10270,7 @@ sum_expr: + { + SELECT_LEX *sel= Select; + sel->in_sum_expr--; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_func_group_concat(Lex->current_context(), $3, $5, + sel->gorder_list, $7); + if ($$ == NULL) +@@ -10389,7 +10300,7 @@ variable_aux: + { + Item_func_set_user_var *item; + $$= item= +- new (YYTHD->mem_root) Item_func_set_user_var($1, $3, false); ++ new (thd->mem_root) Item_func_set_user_var($1, $3, false); + if ($$ == NULL) + MYSQL_YYABORT; + LEX *lex= Lex; +@@ -10398,7 +10309,7 @@ variable_aux: + } + | ident_or_text + { +- $$= new (YYTHD->mem_root) Item_func_get_user_var($1); ++ $$= new (thd->mem_root) Item_func_get_user_var($1); + if ($$ == NULL) + MYSQL_YYABORT; + LEX *lex= Lex; +@@ -10412,7 +10323,7 @@ variable_aux: + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } +- if (!($$= get_system_var(YYTHD, $2, $3, $4))) ++ if (!($$= get_system_var(thd, $2, $3, $4))) + MYSQL_YYABORT; + if (!((Item_func_get_system_var*) $$)->is_written_to_binlog()) + Lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_VARIABLE); +@@ -10427,7 +10338,7 @@ opt_distinct: + opt_gconcat_separator: + /* empty */ + { +- $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1); ++ $$= new (thd->mem_root) String(",", 1, &my_charset_latin1); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -10454,9 +10365,9 @@ opt_gorder_clause: + + gorder_list: + gorder_list ',' order_ident order_dir +- { if (add_gorder_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_gorder_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_gorder_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_gorder_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + in_sum_expr: +@@ -10509,7 +10420,7 @@ opt_expr_list: + expr_list: + expr + { +- $$= new (YYTHD->mem_root) List<Item>; ++ $$= new (thd->mem_root) List<Item>; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -10529,7 +10440,7 @@ ident_list_arg: + ident_list: + simple_ident + { +- $$= new (YYTHD->mem_root) List<Item>; ++ $$= new (thd->mem_root) List<Item>; + if ($$ == NULL) + MYSQL_YYABORT; + $$->push_back($1); +@@ -10629,7 +10540,7 @@ join_table: + { + MYSQL_YYABORT_UNLESS($1 && $3); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $3)) ++ if (push_new_name_resolution_context(thd, $1, $3)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -10644,7 +10555,7 @@ join_table: + { + MYSQL_YYABORT_UNLESS($1 && $3); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $3)) ++ if (push_new_name_resolution_context(thd, $1, $3)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -10674,7 +10585,7 @@ join_table: + { + MYSQL_YYABORT_UNLESS($1 && $5); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $5)) ++ if (push_new_name_resolution_context(thd, $1, $5)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -10710,7 +10621,7 @@ join_table: + { + MYSQL_YYABORT_UNLESS($1 && $5); + /* Change the current name resolution context to a local context. */ +- if (push_new_name_resolution_context(YYTHD, $1, $5)) ++ if (push_new_name_resolution_context(thd, $1, $5)) + MYSQL_YYABORT; + Select->parsing_place= IN_ON; + } +@@ -10781,7 +10692,7 @@ table_factor: + } + table_ident opt_use_partition opt_table_alias opt_key_definition + { +- if (!($$= Select->add_table_to_list(YYTHD, $2, $4, ++ if (!($$= Select->add_table_to_list(thd, $2, $4, + Select->get_table_join_options(), + YYPS->m_lock_type, + YYPS->m_mdl_type, +@@ -11090,7 +11001,7 @@ index_hints_list: + + opt_index_hints_list: + /* empty */ +- | { Select->alloc_index_hints(YYTHD); } index_hints_list ++ | { Select->alloc_index_hints(thd); } index_hints_list + ; + + opt_key_definition: +@@ -11099,15 +11010,15 @@ opt_key_definition: + ; + + opt_key_usage_list: +- /* empty */ { Select->add_index_hint(YYTHD, NULL, 0); } ++ /* empty */ { Select->add_index_hint(thd, NULL, 0); } + | key_usage_list {} + ; + + key_usage_element: + ident +- { Select->add_index_hint(YYTHD, $1.str, $1.length); } ++ { Select->add_index_hint(thd, $1.str, $1.length); } + | PRIMARY_SYM +- { Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); } ++ { Select->add_index_hint(thd, (char *)"PRIMARY", 7); } + ; + + key_usage_list: +@@ -11120,7 +11031,7 @@ using_list: + { + if (!($$= new List<String>)) + MYSQL_YYABORT; +- String *s= new (YYTHD->mem_root) String((const char *) $1.str, ++ String *s= new (thd->mem_root) String((const char *) $1.str, + $1.length, + system_charset_info); + if (s == NULL) +@@ -11129,7 +11040,7 @@ using_list: + } + | using_list ',' ident + { +- String *s= new (YYTHD->mem_root) String((const char *) $3.str, ++ String *s= new (thd->mem_root) String((const char *) $3.str, + $3.length, + system_charset_info); + if (s == NULL) +@@ -11234,7 +11145,6 @@ opt_escape: + } + | /* empty */ + { +- THD *thd= YYTHD; + Lex->escape_used= FALSE; + $$= ((thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ? + new (thd->mem_root) Item_string("", 0, &my_charset_latin1) : +@@ -11255,9 +11165,9 @@ group_clause: + + group_list: + group_list ',' order_ident order_dir +- { if (add_group_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_group_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_group_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_group_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + olap_opt: +@@ -11324,7 +11234,6 @@ alter_order_list: + alter_order_item: + simple_ident_nospvar order_dir + { +- THD *thd= YYTHD; + bool ascending= ($2 == 1) ? true : false; + if (add_order_to_list(thd, $1, ascending)) + MYSQL_YYABORT; +@@ -11377,9 +11286,9 @@ order_clause: + + order_list: + order_list ',' order_ident order_dir +- { if (add_order_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; } ++ { if (add_order_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; } + | order_ident order_dir +- { if (add_order_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; } ++ { if (add_order_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; } + ; + + order_dir: +@@ -11442,7 +11351,6 @@ limit_options: + limit_option: + ident + { +- THD *thd= YYTHD; + LEX *lex= Lex; + Lex_input_stream *lip= YYLIP; + sp_head *sp= lex->sphead; +@@ -11473,19 +11381,19 @@ limit_option: + } + | ULONGLONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | LONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -11787,7 +11695,6 @@ drop: + } + | DROP FUNCTION_SYM if_exists ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_name *spname; + if ($4.str && +@@ -11808,7 +11715,6 @@ drop: + } + | DROP FUNCTION_SYM if_exists ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + LEX_STRING db= {0, 0}; + sp_name *spname; +@@ -11893,7 +11799,7 @@ table_list: + table_name: + table_ident + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, ++ if (!Select->add_table_to_list(thd, $1, NULL, + TL_OPTION_UPDATING, + YYPS->m_lock_type, + YYPS->m_mdl_type)) +@@ -11904,7 +11810,7 @@ table_name: + table_name_with_opt_use_partition: + table_ident opt_use_partition + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, ++ if (!Select->add_table_to_list(thd, $1, NULL, + TL_OPTION_UPDATING, + YYPS->m_lock_type, + YYPS->m_mdl_type, +@@ -11922,7 +11828,7 @@ table_alias_ref_list: + table_alias_ref: + table_ident_opt_wild + { +- if (!Select->add_table_to_list(YYTHD, $1, NULL, ++ if (!Select->add_table_to_list(thd, $1, NULL, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, + YYPS->m_lock_type, + YYPS->m_mdl_type)) +@@ -12011,12 +11917,12 @@ insert_lock_option: + | DELAYED_SYM + { + Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - +- YYTHD->query()); ++ thd->query()); + Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset + + YYLIP->yyLength() + 1; + $$= TL_WRITE_DELAYED; + +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + "INSERT DELAYED", "INSERT"); +@@ -12029,12 +11935,12 @@ replace_lock_option: + | DELAYED_SYM + { + Lex->keyword_delayed_begin_offset= (uint)(YYLIP->get_tok_start() - +- YYTHD->query()); ++ thd->query()); + Lex->keyword_delayed_end_offset= Lex->keyword_delayed_begin_offset + + YYLIP->yyLength() + 1; + $$= TL_WRITE_DELAYED; + +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + "REPLACE DELAYED", "REPLACE"); +@@ -12151,7 +12057,7 @@ expr_or_default: + expr { $$= $1;} + | DEFAULT + { +- $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context()); ++ $$= new (thd->mem_root) Item_default_value(Lex->current_context()); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -12204,7 +12110,7 @@ update_list: + update_elem: + simple_ident_nospvar equal expr_or_default + { +- if (add_item_to_list(YYTHD, $1) || add_value_to_list(YYTHD, $3)) ++ if (add_item_to_list(thd, $1) || add_value_to_list(thd, $3)) + MYSQL_YYABORT; + } + ; +@@ -12249,7 +12155,7 @@ delete: + single_multi: + FROM table_ident opt_use_partition + { +- if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING, ++ if (!Select->add_table_to_list(thd, $2, NULL, TL_OPTION_UPDATING, + YYPS->m_lock_type, + YYPS->m_mdl_type, + NULL, +@@ -12295,7 +12201,7 @@ table_wild_one: + Table_ident *ti= new Table_ident($1); + if (ti == NULL) + MYSQL_YYABORT; +- if (!Select->add_table_to_list(YYTHD, ++ if (!Select->add_table_to_list(thd, + ti, + NULL, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, +@@ -12305,10 +12211,10 @@ table_wild_one: + } + | ident '.' ident opt_wild + { +- Table_ident *ti= new Table_ident(YYTHD, $1, $3, 0); ++ Table_ident *ti= new Table_ident(thd, $1, $3, 0); + if (ti == NULL) + MYSQL_YYABORT; +- if (!Select->add_table_to_list(YYTHD, ++ if (!Select->add_table_to_list(thd, + ti, + NULL, + TL_OPTION_UPDATING | TL_OPTION_ALIAS, +@@ -12348,7 +12254,6 @@ truncate: + } + table_name + { +- THD *thd= YYTHD; + LEX* lex= thd->lex; + DBUG_ASSERT(!lex->m_sql_cmd); + lex->m_sql_cmd= new (thd->mem_root) Sql_cmd_truncate_table(); +@@ -12442,7 +12347,7 @@ show_param: + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_DATABASES; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_SCHEMATA)) ++ if (prepare_schema_table(thd, lex, 0, SCH_SCHEMATA)) + MYSQL_YYABORT; + } + | opt_full TABLES opt_db wild_and_where +@@ -12450,7 +12355,7 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TABLES; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_NAMES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TABLE_NAMES)) + MYSQL_YYABORT; + } + | opt_full TRIGGERS_SYM opt_db wild_and_where +@@ -12458,7 +12363,7 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TRIGGERS; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TRIGGERS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TRIGGERS)) + MYSQL_YYABORT; + } + | EVENTS_SYM opt_db wild_and_where +@@ -12466,7 +12371,7 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_EVENTS; + lex->select_lex.db= $2; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_EVENTS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_EVENTS)) + MYSQL_YYABORT; + } + | TABLE_SYM STATUS_SYM opt_db wild_and_where +@@ -12474,7 +12379,7 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_TABLE_STATUS; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TABLES)) + MYSQL_YYABORT; + } + | OPEN_SYM TABLES opt_db wild_and_where +@@ -12482,14 +12387,14 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_OPEN_TABLES; + lex->select_lex.db= $3; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_OPEN_TABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_OPEN_TABLES)) + MYSQL_YYABORT; + } + | PLUGINS_SYM + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_PLUGINS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS)) + MYSQL_YYABORT; + } + | ENGINE_SYM known_storage_engines show_engine_param +@@ -12502,7 +12407,7 @@ show_param: + lex->sql_command= SQLCOM_SHOW_FIELDS; + if ($5) + $4->change_db($5); +- if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS)) ++ if (prepare_schema_table(thd, lex, $4, SCH_COLUMNS)) + MYSQL_YYABORT; + } + | master_or_binary LOGS_SYM +@@ -12529,14 +12434,14 @@ show_param: + lex->sql_command= SQLCOM_SHOW_KEYS; + if ($4) + $3->change_db($4); +- if (prepare_schema_table(YYTHD, lex, $3, SCH_STATISTICS)) ++ if (prepare_schema_table(thd, lex, $3, SCH_STATISTICS)) + MYSQL_YYABORT; + } + | opt_storage ENGINES_SYM + { + LEX *lex=Lex; + lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_ENGINES)) + MYSQL_YYABORT; + } + | PRIVILEGES +@@ -12554,7 +12459,7 @@ show_param: + { Lex->sql_command = SQLCOM_SHOW_ERRORS;} + | PROFILES_SYM + { +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + "SHOW PROFILES", "Performance Schema"); +@@ -12562,13 +12467,13 @@ show_param: + } + | PROFILE_SYM opt_profile_defs opt_profile_args opt_limit_clause_init + { +- push_warning_printf(YYTHD, Sql_condition::WARN_LEVEL_WARN, ++ push_warning_printf(thd, Sql_condition::WARN_LEVEL_WARN, + ER_WARN_DEPRECATED_SYNTAX, + ER(ER_WARN_DEPRECATED_SYNTAX), + "SHOW PROFILE", "Performance Schema"); + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_PROFILE; +- if (prepare_schema_table(YYTHD, lex, NULL, SCH_PROFILES) != 0) ++ if (prepare_schema_table(thd, lex, NULL, SCH_PROFILES) != 0) + YYABORT; + } + | opt_var_type STATUS_SYM wild_and_where +@@ -12576,7 +12481,7 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS; + lex->option_type= $1; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_STATUS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_STATUS)) + MYSQL_YYABORT; + } + | opt_full PROCESSLIST_SYM +@@ -12586,21 +12491,21 @@ show_param: + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_VARIABLES; + lex->option_type= $1; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_VARIABLES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_VARIABLES)) + MYSQL_YYABORT; + } + | charset wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_CHARSETS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_CHARSETS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_CHARSETS)) + MYSQL_YYABORT; + } + | COLLATION_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_COLLATIONS; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_COLLATIONS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_COLLATIONS)) + MYSQL_YYABORT; + } + | GRANTS +@@ -12630,7 +12535,7 @@ show_param: + { + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_CREATE; +- if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL,0)) ++ if (!lex->select_lex.add_table_to_list(thd, $3, NULL,0)) + MYSQL_YYABORT; + lex->only_view= 0; + lex->create_info.storage_media= HA_SM_DEFAULT; +@@ -12639,7 +12544,7 @@ show_param: + { + LEX *lex= Lex; + lex->sql_command = SQLCOM_SHOW_CREATE; +- if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL, 0)) ++ if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0)) + MYSQL_YYABORT; + lex->only_view= 1; + } +@@ -12660,35 +12565,35 @@ show_param: + { + LEX *lex= Lex; + Lex->sql_command= SQLCOM_SELECT; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_CLIENT_STATS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_CLIENT_STATS)) + MYSQL_YYABORT; + } + | USER_STATS_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SELECT; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_USER_STATS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_USER_STATS)) + MYSQL_YYABORT; + } + | THREAD_STATS_SYM wild_and_where + { + LEX *lex= Lex; + Lex->sql_command= SQLCOM_SELECT; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_THREAD_STATS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_THREAD_STATS)) + MYSQL_YYABORT; + } + | TABLE_STATS_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SELECT; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_STATS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_TABLE_STATS)) + MYSQL_YYABORT; + } + | INDEX_STATS_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SELECT; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_INDEX_STATS)) ++ if (prepare_schema_table(thd, lex, 0, SCH_INDEX_STATS)) + MYSQL_YYABORT; + } + | CREATE PROCEDURE_SYM sp_name +@@ -12715,14 +12620,14 @@ show_param: + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS_PROC; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) + MYSQL_YYABORT; + } + | FUNCTION_SYM STATUS_SYM wild_and_where + { + LEX *lex= Lex; + lex->sql_command= SQLCOM_SHOW_STATUS_FUNC; +- if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES)) ++ if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES)) + MYSQL_YYABORT; + } + | PROCEDURE_SYM CODE_SYM sp_name +@@ -12790,7 +12695,7 @@ wild_and_where: + /* empty */ + | LIKE TEXT_STRING_sys + { +- Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length, ++ Lex->wild= new (thd->mem_root) String($2.str, $2.length, + system_charset_info); + if (Lex->wild == NULL) + MYSQL_YYABORT; +@@ -12813,7 +12718,7 @@ describe: + lex->sql_command= SQLCOM_SHOW_FIELDS; + lex->select_lex.db= 0; + lex->verbose= 0; +- if (prepare_schema_table(YYTHD, lex, $2, SCH_COLUMNS)) ++ if (prepare_schema_table(thd, lex, $2, SCH_COLUMNS)) + MYSQL_YYABORT; + } + opt_describe_column +@@ -12883,7 +12788,7 @@ opt_describe_column: + | text_string { Lex->wild= $1; } + | ident + { +- Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str, ++ Lex->wild= new (thd->mem_root) String((const char*) $1.str, + $1.length, + system_charset_info); + if (Lex->wild == NULL) +@@ -13123,7 +13028,6 @@ use: + load: + LOAD data_or_xml + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + if (lex->sphead) +@@ -13146,7 +13050,7 @@ load: + opt_duplicate INTO TABLE_SYM table_ident opt_use_partition + { + LEX *lex=Lex; +- if (!Select->add_table_to_list(YYTHD, $12, NULL, TL_OPTION_UPDATING, ++ if (!Select->add_table_to_list(thd, $12, NULL, TL_OPTION_UPDATING, + $4, MDL_SHARED_WRITE, NULL, $13)) + MYSQL_YYABORT; + lex->field_list.empty(); +@@ -13289,7 +13193,7 @@ field_or_var: + simple_ident_nospvar {$$= $1;} + | '@' ident_or_text + { +- $$= new (YYTHD->mem_root) Item_user_var_as_out_param($2); ++ $$= new (thd->mem_root) Item_user_var_as_out_param($2); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -13310,16 +13214,16 @@ load_data_set_elem: + { + LEX *lex= Lex; + uint length= (uint) ($5 - $3); +- String *val= new (YYTHD->mem_root) String($3, ++ String *val= new (thd->mem_root) String($3, + length, +- YYTHD->charset()); ++ thd->charset()); + if (val == NULL) + MYSQL_YYABORT; + if (lex->update_list.push_back($1) || + lex->value_list.push_back($4) || + lex->load_set_str_list.push_back(val)) + MYSQL_YYABORT; +- $4->item_name.copy_no_truncate($3, length, YYTHD->charset()); ++ $4->item_name.copy_no_truncate($3, length, thd->charset()); + } + ; + +@@ -13329,7 +13233,6 @@ text_literal: + TEXT_STRING + { + LEX_STRING tmp; +- THD *thd= YYTHD; + const CHARSET_INFO *cs_con= thd->variables.collation_connection; + const CHARSET_INFO *cs_cli= thd->variables.character_set_client; + uint repertoire= thd->lex->text_string_is_7bit && +@@ -13355,7 +13258,7 @@ text_literal: + uint repertoire= Lex->text_string_is_7bit ? + MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30; + DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info)); +- $$= new (YYTHD->mem_root) Item_string($1.str, $1.length, ++ $$= new (thd->mem_root) Item_string($1.str, $1.length, + national_charset_info, + DERIVATION_COERCIBLE, + repertoire); +@@ -13364,7 +13267,7 @@ text_literal: + } + | UNDERSCORE_CHARSET TEXT_STRING + { +- Item_string *str= new (YYTHD->mem_root) Item_string($2.str, ++ Item_string *str= new (thd->mem_root) Item_string($2.str, + $2.length, $1); + if (str == NULL) + MYSQL_YYABORT; +@@ -13383,7 +13286,7 @@ text_literal: + If the string has been pure ASCII so far, + check the new part. + */ +- const CHARSET_INFO *cs= YYTHD->variables.collation_connection; ++ const CHARSET_INFO *cs= thd->variables.collation_connection; + item->collation.repertoire|= my_string_repertoire(cs, + $2.str, + $2.length); +@@ -13394,15 +13297,15 @@ text_literal: + text_string: + TEXT_STRING_literal + { +- $$= new (YYTHD->mem_root) String($1.str, ++ $$= new (thd->mem_root) String($1.str, + $1.length, +- YYTHD->variables.collation_connection); ++ thd->variables.collation_connection); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HEX_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_hex_string($1.str, $1.length); ++ Item *tmp= new (thd->mem_root) Item_hex_string($1.str, $1.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -13414,7 +13317,7 @@ text_string: + } + | BIN_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length); ++ Item *tmp= new (thd->mem_root) Item_bin_string($1.str, $1.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -13429,7 +13332,6 @@ text_string: + param_marker: + PARAM_MARKER + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + Item_param *item; +@@ -13464,38 +13366,38 @@ literal: + | temporal_literal { $$= $1; } + | NULL_SYM + { +- $$ = new (YYTHD->mem_root) Item_null(); ++ $$ = new (thd->mem_root) Item_null(); + if ($$ == NULL) + MYSQL_YYABORT; + YYLIP->next_state= MY_LEX_OPERATOR_OR_IDENT; + } + | FALSE_SYM + { +- $$= new (YYTHD->mem_root) Item_int(NAME_STRING("FALSE"), 0, 1); ++ $$= new (thd->mem_root) Item_int(NAME_STRING("FALSE"), 0, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | TRUE_SYM + { +- $$= new (YYTHD->mem_root) Item_int(NAME_STRING("TRUE"), 1, 1); ++ $$= new (thd->mem_root) Item_int(NAME_STRING("TRUE"), 1, 1); + if ($$ == NULL) + MYSQL_YYABORT; + } + | HEX_NUM + { +- $$ = new (YYTHD->mem_root) Item_hex_string($1.str, $1.length); ++ $$ = new (thd->mem_root) Item_hex_string($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BIN_NUM + { +- $$= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length); ++ $$= new (thd->mem_root) Item_bin_string($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | UNDERSCORE_CHARSET HEX_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_hex_string($2.str, $2.length); ++ Item *tmp= new (thd->mem_root) Item_hex_string($2.str, $2.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -13506,7 +13408,7 @@ literal: + String *str= tmp->val_str((String*) 0); + + Item_string *item_str; +- item_str= new (YYTHD->mem_root) ++ item_str= new (thd->mem_root) + Item_string(null_name_string, /* name will be set in select_item */ + str ? str->ptr() : "", + str ? str->length() : 0, +@@ -13524,7 +13426,7 @@ literal: + } + | UNDERSCORE_CHARSET BIN_NUM + { +- Item *tmp= new (YYTHD->mem_root) Item_bin_string($2.str, $2.length); ++ Item *tmp= new (thd->mem_root) Item_bin_string($2.str, $2.length); + if (tmp == NULL) + MYSQL_YYABORT; + /* +@@ -13535,7 +13437,7 @@ literal: + String *str= tmp->val_str((String*) 0); + + Item_string *item_str; +- item_str= new (YYTHD->mem_root) ++ item_str= new (thd->mem_root) + Item_string(null_name_string, /* name will be set in select_item */ + str ? str->ptr() : "", + str ? str->length() : 0, +@@ -13556,7 +13458,7 @@ NUM_literal: + NUM + { + int error; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_int($1, + (longlong) my_strtoll10($1.str, NULL, &error), + $1.length); +@@ -13566,7 +13468,7 @@ NUM_literal: + | LONG_NUM + { + int error; +- $$= new (YYTHD->mem_root) ++ $$= new (thd->mem_root) + Item_int($1, + (longlong) my_strtoll10($1.str, NULL, &error), + $1.length); +@@ -13575,23 +13477,23 @@ NUM_literal: + } + | ULONGLONG_NUM + { +- $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length); ++ $$= new (thd->mem_root) Item_uint($1.str, $1.length); + if ($$ == NULL) + MYSQL_YYABORT; + } + | DECIMAL_NUM + { +- $$= new (YYTHD->mem_root) Item_decimal($1.str, $1.length, +- YYTHD->charset()); +- if (($$ == NULL) || (YYTHD->is_error())) ++ $$= new (thd->mem_root) Item_decimal($1.str, $1.length, ++ thd->charset()); ++ if (($$ == NULL) || (thd->is_error())) + { + MYSQL_YYABORT; + } + } + | FLOAT_NUM + { +- $$= new (YYTHD->mem_root) Item_float($1.str, $1.length); +- if (($$ == NULL) || (YYTHD->is_error())) ++ $$= new (thd->mem_root) Item_float($1.str, $1.length); ++ if (($$ == NULL) || (thd->is_error())) + { + MYSQL_YYABORT; + } +@@ -13602,19 +13504,19 @@ NUM_literal: + temporal_literal: + DATE_SYM TEXT_STRING + { +- if (!($$= create_temporal_literal(YYTHD, $2.str, $2.length, YYCSCL, ++ if (!($$= create_temporal_literal(thd, $2.str, $2.length, YYCSCL, + MYSQL_TYPE_DATE, true))) + MYSQL_YYABORT; + } + | TIME_SYM TEXT_STRING + { +- if (!($$= create_temporal_literal(YYTHD, $2.str, $2.length, YYCSCL, ++ if (!($$= create_temporal_literal(thd, $2.str, $2.length, YYCSCL, + MYSQL_TYPE_TIME, true))) + MYSQL_YYABORT; + } + | TIMESTAMP TEXT_STRING + { +- if (!($$= create_temporal_literal(YYTHD, $2.str, $2.length, YYCSCL, ++ if (!($$= create_temporal_literal(thd, $2.str, $2.length, YYCSCL, + MYSQL_TYPE_DATETIME, true))) + MYSQL_YYABORT; + } +@@ -13636,7 +13538,7 @@ table_wild: + ident '.' '*' + { + SELECT_LEX *sel= Select; +- $$= new (YYTHD->mem_root) Item_field(Lex->current_context(), ++ $$= new (thd->mem_root) Item_field(Lex->current_context(), + NullS, $1.str, "*"); + if ($$ == NULL) + MYSQL_YYABORT; +@@ -13644,7 +13546,6 @@ table_wild: + } + | ident '.' ident '.' '*' + { +- THD *thd= YYTHD; + SELECT_LEX *sel= Select; + const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ? + NullS : $1.str; +@@ -13664,7 +13565,6 @@ order_ident: + simple_ident: + ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *pctx = lex->get_sp_current_parsing_ctx(); + sp_variable *spv; +@@ -13719,7 +13619,6 @@ simple_ident: + simple_ident_nospvar: + ident + { +- THD *thd= YYTHD; + SELECT_LEX *sel=Select; + if ((sel->parsing_place != IN_HAVING) || + (sel->get_in_sum_expr() > 0)) +@@ -13741,7 +13640,6 @@ simple_ident_nospvar: + simple_ident_q: + ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -13821,7 +13719,6 @@ simple_ident_q: + } + | '.' ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + if (sel->no_table_names_allowed) +@@ -13846,7 +13743,6 @@ simple_ident_q: + } + | ident '.' ident '.' ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + SELECT_LEX *sel= lex->current_select; + const char* schema= (thd->client_capabilities & CLIENT_NO_SCHEMA ? +@@ -13914,7 +13810,7 @@ table_ident: + } + | ident '.' ident + { +- $$= new Table_ident(YYTHD, $1,$3,0); ++ $$= new Table_ident(thd, $1,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -13936,7 +13832,7 @@ table_ident_opt_wild: + } + | ident '.' ident opt_wild + { +- $$= new Table_ident(YYTHD, $1,$3,0); ++ $$= new Table_ident(thd, $1,$3,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -13946,7 +13842,7 @@ table_ident_nodb: + ident + { + LEX_STRING db={(char*) any_db,3}; +- $$= new Table_ident(YYTHD, db,$1,0); ++ $$= new Table_ident(thd, db,$1,0); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -13956,8 +13852,6 @@ IDENT_sys: + IDENT { $$= $1; } + | IDENT_QUOTED + { +- THD *thd= YYTHD; +- + if (thd->charset_is_system_charset) + { + const CHARSET_INFO *cs= system_charset_info; +@@ -13999,8 +13893,6 @@ TEXT_STRING_sys_nonewline: + TEXT_STRING_sys: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_system_charset) + $$= $1; + else +@@ -14015,8 +13907,6 @@ TEXT_STRING_sys: + TEXT_STRING_literal: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_collation_connection) + $$= $1; + else +@@ -14031,8 +13921,6 @@ TEXT_STRING_literal: + TEXT_STRING_filesystem: + TEXT_STRING + { +- THD *thd= YYTHD; +- + if (thd->charset_is_character_set_filesystem) + $$= $1; + else +@@ -14049,7 +13937,6 @@ ident: + IDENT_sys { $$=$1; } + | keyword + { +- THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + if ($$.str == NULL) + MYSQL_YYABORT; +@@ -14061,7 +13948,6 @@ label_ident: + IDENT_sys { $$=$1; } + | keyword_sp + { +- THD *thd= YYTHD; + $$.str= thd->strmake($1.str, $1.length); + if ($$.str == NULL) + MYSQL_YYABORT; +@@ -14078,7 +13964,6 @@ ident_or_text: + user: + ident_or_text + { +- THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user= $1; +@@ -14105,7 +13990,6 @@ user: + } + | ident_or_text '@' ident_or_text + { +- THD *thd= YYTHD; + if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + $$->user= $1; +@@ -14138,7 +14022,7 @@ user: + } + | CURRENT_USER optional_braces + { +- if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user)))) ++ if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user)))) + MYSQL_YYABORT; + /* + empty LEX_USER means current_user and +@@ -14542,7 +14426,7 @@ set: + lex->one_shot_set= 0; + lex->autocommit= 0; + +- sp_create_assignment_lex(YYTHD, YY_TOKEN_END); ++ sp_create_assignment_lex(thd, YY_TOKEN_END); + } + start_option_value_list + {} +@@ -14553,7 +14437,7 @@ set: + start_option_value_list: + option_value_no_option_type + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + option_value_list_continued +@@ -14563,7 +14447,7 @@ start_option_value_list: + } + transaction_characteristics + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + | option_type +@@ -14578,13 +14462,13 @@ start_option_value_list: + start_option_value_list_following_option_type: + option_value_following_option_type + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + option_value_list_continued + | TRANSACTION_SYM transaction_characteristics + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + ; +@@ -14598,20 +14482,20 @@ option_value_list_continued: + // Repeating list of option values after first option value. + option_value_list: + { +- sp_create_assignment_lex(YYTHD, YY_TOKEN_START); ++ sp_create_assignment_lex(thd, YY_TOKEN_START); + } + option_value + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + | option_value_list ',' + { +- sp_create_assignment_lex(YYTHD, YY_TOKEN_START); ++ sp_create_assignment_lex(thd, YY_TOKEN_START); + } + option_value + { +- if (sp_create_assignment_instr(YYTHD, YY_TOKEN_END)) ++ if (sp_create_assignment_instr(thd, YY_TOKEN_END)) + MYSQL_YYABORT; + } + ; +@@ -14650,7 +14534,6 @@ opt_var_ident_type: + option_value_following_option_type: + internal_variable_name equal set_expr_or_default + { +- THD *thd= YYTHD; + LEX *lex= Lex; + + if ($1.var && $1.var != trg_new_row_fake_var) +@@ -14682,7 +14565,6 @@ option_value_no_option_type: + } + set_expr_or_default + { +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + const char *expr_start_ptr= NULL; +@@ -14776,7 +14658,7 @@ option_value_no_option_type: + | '@' ident_or_text equal expr + { + Item_func_set_user_var *item; +- item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4, false); ++ item= new (thd->mem_root) Item_func_set_user_var($2, $4, false); + if (item == NULL) + MYSQL_YYABORT; + set_var_user *var= new set_var_user(item); +@@ -14786,7 +14668,6 @@ option_value_no_option_type: + } + | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default + { +- THD *thd= YYTHD; + struct sys_var_with_base tmp= $4; + /* Lookup if necessary: must be a system variable. */ + if (tmp.var == NULL) +@@ -14799,7 +14680,6 @@ option_value_no_option_type: + } + | charset old_or_new_charset_name_or_default + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + int flags= $2 ? 0 : set_var_collation_client::SET_CS_DEFAULT; + const CHARSET_INFO *cs2; +@@ -14850,7 +14730,6 @@ option_value_no_option_type: + } + | PASSWORD equal text_or_password + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); +@@ -14927,7 +14806,6 @@ option_value_no_option_type: + internal_variable_name: + ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_pcontext *pctx= lex->get_sp_current_parsing_ctx(); + sp_variable *spv; +@@ -14990,7 +14868,7 @@ internal_variable_name: + } + else + { +- sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); ++ sys_var *tmp=find_sys_var(thd, $3.str, $3.length); + if (!tmp) + MYSQL_YYABORT; + if (!tmp->is_struct()) +@@ -15001,7 +14879,7 @@ internal_variable_name: + } + | DEFAULT '.' ident + { +- sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length); ++ sys_var *tmp=find_sys_var(thd, $3.str, $3.length); + if (!tmp) + MYSQL_YYABORT; + if (!tmp->is_struct()) +@@ -15022,7 +14900,6 @@ transaction_characteristics: + transaction_access_mode: + transaction_access_mode_types + { +- THD *thd= YYTHD; + LEX *lex=Lex; + Item *item= new (thd->mem_root) Item_int((int32) $1); + if (item == NULL) +@@ -15040,7 +14917,6 @@ transaction_access_mode: + isolation_level: + ISOLATION LEVEL_SYM isolation_types + { +- THD *thd= YYTHD; + LEX *lex=Lex; + Item *item= new (thd->mem_root) Item_int((int32) $3); + if (item == NULL) +@@ -15074,13 +14950,13 @@ text_or_password: + if ($3.length == 0) + $$= $3.str; + else +- switch (YYTHD->variables.old_passwords) { ++ switch (thd->variables.old_passwords) { + case 1: $$= Item_func_old_password:: +- alloc(YYTHD, $3.str, $3.length); ++ alloc(thd, $3.str, $3.length); + break; + case 0: + case 2: $$= Item_func_password:: +- create_password_hash_buffer(YYTHD, $3.str, $3.length); ++ create_password_hash_buffer(thd, $3.str, $3.length); + break; + } + if ($$ == NULL) +@@ -15090,7 +14966,7 @@ text_or_password: + | OLD_PASSWORD '(' TEXT_STRING ')' + { + $$= $3.length ? Item_func_old_password:: +- alloc(YYTHD, $3.str, $3.length) : ++ alloc(thd, $3.str, $3.length) : + $3.str; + if ($$ == NULL) + MYSQL_YYABORT; +@@ -15104,19 +14980,19 @@ set_expr_or_default: + | DEFAULT { $$=0; } + | ON + { +- $$=new (YYTHD->mem_root) Item_string("ON", 2, system_charset_info); ++ $$=new (thd->mem_root) Item_string("ON", 2, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } + | ALL + { +- $$=new (YYTHD->mem_root) Item_string("ALL", 3, system_charset_info); ++ $$=new (thd->mem_root) Item_string("ALL", 3, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } + | BINARY + { +- $$=new (YYTHD->mem_root) Item_string("binary", 6, system_charset_info); ++ $$=new (thd->mem_root) Item_string("binary", 6, system_charset_info); + if ($$ == NULL) + MYSQL_YYABORT; + } +@@ -15155,7 +15031,7 @@ table_lock: + { + thr_lock_type lock_type= (thr_lock_type) $3; + bool lock_for_write= (lock_type >= TL_WRITE_ALLOW_WRITE); +- if (!Select->add_table_to_list(YYTHD, $1, $2, 0, lock_type, ++ if (!Select->add_table_to_list(thd, $1, $2, 0, lock_type, + (lock_for_write ? + MDL_SHARED_NO_READ_WRITE : + MDL_SHARED_READ))) +@@ -15169,7 +15045,7 @@ lock_option: + | LOW_PRIORITY WRITE_SYM + { + $$= TL_WRITE_LOW_PRIORITY; +- WARN_DEPRECATED(YYTHD, "LOW_PRIORITY WRITE", "WRITE"); ++ WARN_DEPRECATED(thd, "LOW_PRIORITY WRITE", "WRITE"); + } + | READ_SYM LOCAL_SYM { $$= TL_READ; } + ; +@@ -15197,7 +15073,6 @@ unlock: + handler: + HANDLER_SYM table_ident OPEN_SYM opt_table_alias + { +- THD *thd= YYTHD; + LEX *lex= Lex; + if (lex->sphead) + { +@@ -15213,7 +15088,6 @@ handler: + } + | HANDLER_SYM table_ident_nodb CLOSE_SYM + { +- THD *thd= YYTHD; + LEX *lex= Lex; + if (lex->sphead) + { +@@ -15237,7 +15111,7 @@ handler: + } + lex->expr_allows_subselect= FALSE; + lex->sql_command = SQLCOM_HA_READ; +- Item *one= new (YYTHD->mem_root) Item_int((int32) 1); ++ Item *one= new (thd->mem_root) Item_int((int32) 1); + if (one == NULL) + MYSQL_YYABORT; + lex->current_select->select_limit= one; +@@ -15247,7 +15121,6 @@ handler: + } + handler_read_or_scan where_clause opt_limit_clause + { +- THD *thd= YYTHD; + LEX *lex= Lex; + Lex->expr_allows_subselect= TRUE; + /* Stored functions are not supported for HANDLER READ. */ +@@ -15282,7 +15155,7 @@ handler_rkey_function: + | LAST_SYM { $$= RLAST; } + | handler_rkey_mode + { +- YYTHD->m_parser_state->m_yacc.m_ha_rkey_mode= $1; ++ thd->m_parser_state->m_yacc.m_ha_rkey_mode= $1; + Lex->insert_list= new List_item; + if (! Lex->insert_list) + MYSQL_YYABORT; +@@ -15590,8 +15463,8 @@ grant_user: + my_parse_error(ER(ER_SYNTAX_ERROR)); + MYSQL_YYABORT; + } +- String *password = new (YYTHD->mem_root) String((const char*)$4.str, +- YYTHD->variables.character_set_client); ++ String *password = new (thd->mem_root) String((const char*)$4.str, ++ thd->variables.character_set_client); + check_password_policy(password); + /* + 1. Plugin must be resolved +@@ -15611,8 +15484,8 @@ grant_user: + $1->password= $5; + if (!strcmp($5.str, "")) + { +- String *password= new (YYTHD->mem_root) String ((const char *)"", +- YYTHD->variables.character_set_client); ++ String *password= new (thd->mem_root) String ((const char *)"", ++ thd->variables.character_set_client); + check_password_policy(password); + } + /* +@@ -15670,7 +15543,7 @@ column_list: + column_list_id: + ident + { +- String *new_str = new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info); ++ String *new_str = new (thd->mem_root) String((const char*) $1.str,$1.length,system_charset_info); + if (new_str == NULL) + MYSQL_YYABORT; + List_iterator <LEX_COLUMN> iter(Lex->columns); +@@ -15880,7 +15753,6 @@ opt_union_order_or_limit: + + union_order_or_limit: + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE); + SELECT_LEX *sel= lex->current_select; +@@ -15896,7 +15768,6 @@ union_order_or_limit: + } + order_or_limit + { +- THD *thd= YYTHD; + thd->lex->current_select->no_table_names_allowed= 0; + thd->where= ""; + } +@@ -16078,14 +15949,14 @@ no_definer: + from older master servers (i.e. to create non-suid trigger in this + case). + */ +- YYTHD->lex->definer= 0; ++ thd->lex->definer= 0; + } + ; + + definer: + DEFINER_SYM EQ user + { +- YYTHD->lex->definer= get_current_user(YYTHD, $3); ++ thd->lex->definer= get_current_user(thd, $3); + } + ; + +@@ -16130,7 +16001,6 @@ view_suid: + view_tail: + view_suid VIEW_SYM table_ident + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + lex->sql_command= SQLCOM_CREATE_VIEW; + /* first table in list is target VIEW name */ +@@ -16174,7 +16044,6 @@ view_select: + } + view_select_aux view_check_option + { +- THD *thd= YYTHD; + LEX *lex= Lex; + uint len= YYLIP->get_cpp_ptr() - lex->create_view_select.str; + void *create_view_select= thd->memdup(lex->create_view_select.str, len); +@@ -16266,7 +16135,6 @@ trigger_tail: + EACH_SYM /* $13 */ + ROW_SYM /* $14 */ + { /* $15 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + Lex_input_stream *lip= YYLIP; + +@@ -16296,7 +16164,6 @@ trigger_tail: + } + sp_proc_stmt /* $16 */ + { /* $17 */ +- THD *thd= YYTHD; + LEX *lex= Lex; + sp_head *sp= lex->sphead; + +@@ -16331,7 +16198,6 @@ udf_tail: + AGGREGATE_SYM remember_name FUNCTION_SYM ident + RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + if (is_native_function(thd, & $4)) + { +@@ -16349,7 +16215,6 @@ udf_tail: + | remember_name FUNCTION_SYM ident + RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + if (is_native_function(thd, & $3)) + { +@@ -16372,7 +16237,6 @@ sf_tail: + sp_name /* $3 */ + '(' /* $4 */ + { /* $5 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + lex->stmt_definition_begin= $1; +@@ -16431,7 +16295,7 @@ sf_tail: + MYSQL_YYABORT; + } + +- if (fill_field_definition(YYTHD, sp, ++ if (fill_field_definition(thd, sp, + (enum enum_field_types) $11, + &sp->m_return_field_def)) + MYSQL_YYABORT; +@@ -16440,7 +16304,6 @@ sf_tail: + } + sp_c_chistics /* $13 */ + { /* $14 */ +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + lex->sphead->m_chistics= &lex->sp_chistics; +@@ -16448,7 +16311,6 @@ sf_tail: + } + sp_proc_stmt /* $15 */ + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + sp_head *sp= lex->sphead; + +@@ -16506,7 +16368,6 @@ sf_tail: + sp_tail: + PROCEDURE_SYM remember_name sp_name + { +- THD *thd= YYTHD; + LEX *lex= Lex; + + if (lex->sphead) +@@ -16539,7 +16400,6 @@ sp_tail: + sp_pdparam_list + ')' + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + Lex->sphead->m_parser_data.set_parameter_end_ptr( +@@ -16549,7 +16409,6 @@ sp_tail: + } + sp_c_chistics + { +- THD *thd= YYTHD; + LEX *lex= thd->lex; + + lex->sphead->m_chistics= &lex->sp_chistics; +@@ -16557,7 +16416,6 @@ sp_tail: + } + sp_proc_stmt + { +- THD *thd= YYTHD; + LEX *lex= Lex; + + sp_finish_parsing(thd); +@@ -16599,21 +16457,21 @@ xid: + text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), 0, 0); + } + | text_string ',' text_string + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set(1L, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } + | text_string ',' text_string ',' ulong_num + { + MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE); +- if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID)))) ++ if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID)))) + MYSQL_YYABORT; + Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length()); + } +diff --git a/storage/perfschema/gen_pfs_lex_token.cc b/storage/perfschema/gen_pfs_lex_token.cc +index 7581255..2eee5d1 100644 +--- a/storage/perfschema/gen_pfs_lex_token.cc ++++ b/storage/perfschema/gen_pfs_lex_token.cc +@@ -21,6 +21,7 @@ + + /* We only need the tokens here */ + #define YYSTYPE_IS_DECLARED ++class THD; + #include <../sql/sql_yacc.h> + #include <lex.h> + |