All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] [PATCH 1/2] mysql: add option to build the server
@ 2014-02-12 22:39 Marcelo Gutiérrez
  2014-02-12 22:39 ` [Buildroot] [PATCH 2/2] package/mysql: fix debugging options Marcelo Gutiérrez
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Marcelo Gutiérrez @ 2014-02-12 22:39 UTC (permalink / raw)
  To: buildroot

From: Marcelo Gutierrez <kuyurix@gmail.com>


Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
---
 package/mysql/Config.in                            |    9 +
 .../mysql-0003-ac_stack_direction-is-unset.patch   |   15 +
 .../mysql-0004-Fix-gen_lex_hash-execution.patch    |   32 +
 ...ql-0005-bison_3_breaks_mysql_server_build.patch | 3310 ++++++++++++++++++++
 package/mysql/mysql.mk                             |   46 +-
 5 files changed, 3411 insertions(+), 1 deletion(-)
 create mode 100644 package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
 create mode 100644 package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
 create mode 100644 package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch

diff --git a/package/mysql/Config.in b/package/mysql/Config.in
index 0def957..7133892 100644
--- a/package/mysql/Config.in
+++ b/package/mysql/Config.in
@@ -10,6 +10,15 @@ config BR2_PACKAGE_MYSQL
 
 	  http://www.mysql.com/
 
+if BR2_PACKAGE_MYSQL
+
+config BR2_PACKAGE_MYSQL_SERVER
+	bool "MySQL server"
+	help
+	  Install the MySQL server on the target.
+
+endif
+
 comment "MySQL needs a toolchain w/ C++, threads"
 	depends on BR2_USE_MMU
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
new file mode 100644
index 0000000..6fef0a9
--- /dev/null
+++ b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
@@ -0,0 +1,15 @@
+misc.m4: ac_cv_c_stack_direction is unset.
+
+Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
+
+--- mysql-5.1.70.orig/config/ac-macros/misc.m4
++++ mysql-5.1.70/config/ac-macros/misc.m4
+@@ -477,7 +477,7 @@
+     exit(ptr_f(&a) < 0);
+   }
+   ], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1,
+-   ac_cv_c_stack_direction=)])
++   ac_cv_c_stack_direction=0)])
+  AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+ ])dnl
+ 
diff --git a/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
new file mode 100644
index 0000000..b91ed4f
--- /dev/null
+++ b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
@@ -0,0 +1,32 @@
+Makefile: fix cross-compiling the server
+
+MySQL Makefile believes it can run code it just compiled, to
+generate a header. This does not work for cross-compilation.
+
+Instead, use a pre-installed host-version of the required tool.
+
+Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
+
+--- mysql-5.1.70/sql/Makefile.am
++++ mysql-5.1.70.patch/sql/Makefile.am
+@@ -177,7 +177,7 @@
+ # this avoid the rebuild of the built files in a source dist
+ lex_hash.h:	gen_lex_hash.cc lex.h
+ 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
+-		./gen_lex_hash$(EXEEXT) > $@-t
++		gen_lex_hash$(EXEEXT) > $@-t
+ 		$(MV) $@-t $@
+ 
+ # For testing of udf_example.so
+
+--- mysql-5.1.70/sql/Makefile.in
++++ mysql-5.1.70.patch/sql/Makefile.in
+@@ -1310,7 +1310,7 @@
+ # this avoid the rebuild of the built files in a source dist
+ lex_hash.h:	gen_lex_hash.cc lex.h
+ 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
+-		./gen_lex_hash$(EXEEXT) > $@-t
++		gen_lex_hash$(EXEEXT) > $@-t
+ 		$(MV) $@-t $@
+ 
+ # We might have some stuff not built in this build, but that we want to install
diff --git a/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
new file mode 100644
index 0000000..918fe24
--- /dev/null
+++ b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
@@ -0,0 +1,3310 @@
+fix the yacc code in mysql
+
+Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
+---
+diff -uNr mysql-5.1.73.orig/sql/sql_lex.cc mysql-5.1.73/sql/sql_lex.cc
+--- mysql-5.1.73.orig/sql/sql_lex.cc	2013-11-04 18:52:27.000000000 +0000
++++ mysql-5.1.73/sql/sql_lex.cc	2014-02-12 14:12:04.244111625 +0000
+@@ -775,14 +775,13 @@
+ 				(which can't be followed by a signed number)
+ */
+ 
+-int MYSQLlex(void *arg, void *yythd)
++int MYSQLlex(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 -uNr mysql-5.1.73.orig/sql/sql_lex.h mysql-5.1.73/sql/sql_lex.h
+--- mysql-5.1.73.orig/sql/sql_lex.h	2013-11-04 18:52:27.000000000 +0000
++++ mysql-5.1.73/sql/sql_lex.h	2014-02-12 14:17:19.424106423 +0000
+@@ -2072,7 +2072,7 @@
+ 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(CHARSET_INFO *cs, LEX_STRING *str);
+ 
+diff -uNr mysql-5.1.73.orig/sql/sql_parse.cc mysql-5.1.73/sql/sql_parse.cc
+--- mysql-5.1.73.orig/sql/sql_parse.cc	2013-11-04 18:52:27.000000000 +0000
++++ mysql-5.1.73/sql/sql_parse.cc	2014-02-12 14:19:20.424104427 +0000
+@@ -8012,7 +8012,7 @@
+ }
+ 
+ 
+-extern int MYSQLparse(void *thd); // from sql_yacc.cc
++extern int MYSQLparse(THD *thd); // from sql_yacc.cc
+ 
+ 
+ /**
+diff -uNr mysql-5.1.73.orig/sql/sql_yacc.yy mysql-5.1.73/sql/sql_yacc.yy
+--- mysql-5.1.73.orig/sql/sql_yacc.yy	2013-11-04 18:52:27.000000000 +0000
++++ mysql-5.1.73/sql/sql_yacc.yy	2014-02-12 20:17:06.707750140 +0000
+@@ -23,19 +23,13 @@
+ */
+ 
+ %{
+-/* 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 YYLIP (& thd->m_parser_state->m_lip)
+ 
+ #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 "mysql_priv.h"
+ #include "slave.h"
+@@ -55,7 +49,7 @@
+ #pragma warning (disable : 4065)
+ #endif
+ 
+-int yylex(void *yylval, void *yythd);
++int yylex(void *yylval, THD *thd);
+ 
+ const LEX_STRING null_lex_str= {0,0};
+ 
+@@ -64,7 +58,7 @@
+     ulong val= *(F);                          \
+     if (my_yyoverflow((B), (D), &val))        \
+     {                                         \
+-      yyerror((char*) (A));                   \
++      yyerror(current_thd, (char*) (A));      \
+       return 2;                               \
+     }                                         \
+     else                                      \
+@@ -76,7 +70,7 @@
+ #define MYSQL_YYABORT                         \
+   do                                          \
+   {                                           \
+-    LEX::cleanup_lex_after_parse_error(YYTHD);\
++    LEX::cleanup_lex_after_parse_error(thd);\
+     YYABORT;                                  \
+   } while (0)
+ 
+@@ -159,9 +153,8 @@
+   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
+@@ -675,7 +668,10 @@
+ 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 169 shift/reduce conflicts.
+   We should not introduce new conflicts any more.
+@@ -1516,7 +1512,6 @@
+ query:
+           END_OF_INPUT
+           {
+-            THD *thd= YYTHD;
+             if (!thd->bootstrap &&
+               (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT)))
+             {
+@@ -1530,7 +1525,7 @@
+           {
+             Lex_input_stream *lip = YYLIP;
+ 
+-            if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) &&
++            if ((thd->client_capabilities & CLIENT_MULTI_QUERIES) &&
+                 ! lip->stmt_prepare_mode &&
+                 ! lip->eof())
+             {
+@@ -1626,7 +1621,6 @@
+ 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;
+@@ -1641,7 +1635,6 @@
+ prepare:
+           PREPARE_SYM ident FROM prepare_src
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             lex->sql_command= SQLCOM_PREPARE;
+             lex->prepared_stmt_name= $2;
+@@ -1651,14 +1644,12 @@
+ 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;
+@@ -1668,7 +1659,6 @@
+ execute:
+           EXECUTE_SYM ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             lex->sql_command= SQLCOM_EXECUTE;
+             lex->prepared_stmt_name= $2;
+@@ -1826,7 +1816,6 @@
+ 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,
+@@ -1844,13 +1833,13 @@
+           }
+           create2
+           {
+-            LEX *lex= YYTHD->lex;
++            LEX *lex= thd->lex;
+             lex->current_select= &lex->select_lex; 
+             if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
+                 !lex->create_info.db_type)
+             {
+-              lex->create_info.db_type= ha_default_handlerton(YYTHD);
+-              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
++              lex->create_info.db_type= ha_default_handlerton(thd);
++              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                                   ER_WARN_USING_OTHER_HANDLER,
+                                   ER(ER_WARN_USING_OTHER_HANDLER),
+                                   ha_resolve_storage_engine_name(lex->create_info.db_type),
+@@ -1979,7 +1968,7 @@
+ event_tail:
+           remember_name EVENT_SYM opt_if_not_exists sp_name
+           {
+-            THD *thd= YYTHD;
++            THD *thd= thd;
+             LEX *lex=Lex;
+ 
+             lex->stmt_definition_begin= $1;
+@@ -2046,7 +2035,7 @@
+ ev_starts:
+           /* empty */
+           {
+-            Item *item= new (YYTHD->mem_root) Item_func_now_local();
++            Item *item= new (thd->mem_root) Item_func_now_local();
+             if (item == NULL)
+               MYSQL_YYABORT;
+             Lex->event_parse_data->item_starts= item;
+@@ -2096,7 +2085,6 @@
+ 
+ ev_sql_stmt:
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+ 
+@@ -2139,7 +2127,6 @@
+           }
+           ev_sql_stmt_inner
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+ 
+             /* return back to the original memory root ASAP */
+@@ -2198,11 +2185,10 @@
+             $$= 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 (check_routine_name(&$1))
+@@ -2272,7 +2258,7 @@
+             lex->sql_command= SQLCOM_CALL;
+             lex->spname= $2;
+             lex->value_list.empty();
+-            sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE);
++            sp_add_used_routine(lex, thd, $2, TYPE_ENUM_PROCEDURE);
+           }
+           opt_sp_cparam_list {}
+         ;
+@@ -2345,7 +2331,7 @@
+                                                      (enum enum_field_types)$3,
+                                                      sp_param_in);
+ 
+-            if (lex->sphead->fill_field_definition(YYTHD, lex,
++            if (lex->sphead->fill_field_definition(thd, lex,
+                                                    (enum enum_field_types) $3,
+                                                    &spvar->field_def))
+             {
+@@ -2382,7 +2368,7 @@
+                                                      (enum enum_field_types)$4,
+                                                      (sp_param_mode_t)$1);
+ 
+-            if (lex->sphead->fill_field_definition(YYTHD, lex,
++            if (lex->sphead->fill_field_definition(thd, lex,
+                                                    (enum enum_field_types) $4,
+                                                    &spvar->field_def))
+             {
+@@ -2445,13 +2431,12 @@
+           {
+             LEX *lex= Lex;
+ 
+-            lex->sphead->reset_lex(YYTHD);
++            lex->sphead->reset_lex(thd);
+             lex->spcont->declare_var_boundary($2);
+           }
+           type
+           sp_opt_default
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= Lex;
+             sp_pcontext *pctx= lex->spcont;
+             uint num_vars= pctx->context_var_count();
+@@ -2477,7 +2462,7 @@
+               spvar->type= var_type;
+               spvar->dflt= dflt_value_item;
+             
+-              if (lex->sphead->fill_field_definition(YYTHD, lex, var_type,
++              if (lex->sphead->fill_field_definition(thd, lex, var_type,
+                                                      &spvar->field_def))
+               {
+                 MYSQL_YYABORT;
+@@ -2501,7 +2486,7 @@
+             }
+ 
+             pctx->declare_var_boundary(0);
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+             $$.vars= $2;
+             $$.conds= $$.hndlrs= $$.curs= 0;
+@@ -2516,7 +2501,7 @@
+ 	      my_error(ER_SP_DUP_COND, MYF(0), $2.str);
+ 	      MYSQL_YYABORT;
+ 	    }
+-	    if(YYTHD->lex->spcont->push_cond(&$2, $5))
++	    if(thd->lex->spcont->push_cond(&$2, $5))
+               MYSQL_YYABORT;
+             $$.vars= $$.hndlrs= $$.curs= 0;
+             $$.conds= 1;
+@@ -2602,7 +2587,7 @@
+ 
+ sp_cursor_stmt:
+           {
+-            Lex->sphead->reset_lex(YYTHD);
++            Lex->sphead->reset_lex(thd);
+           }
+           select
+           {
+@@ -2618,7 +2603,7 @@
+             }
+             lex->sp_lex_in_use= TRUE;
+             $$= lex;
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+         ;
+@@ -2662,7 +2647,7 @@
+ sp_cond:
+           ulong_num
+           { /* mysql errno */
+-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->type= sp_cond_type_t::number;
+@@ -2675,7 +2660,7 @@
+               my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str);
+               MYSQL_YYABORT;
+             }
+-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->type= sp_cond_type_t::state;
+@@ -2705,21 +2690,21 @@
+           }
+         | SQLWARNING_SYM /* SQLSTATEs 01??? */
+           {
+-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->type= sp_cond_type_t::warning;
+           }
+         | not FOUND_SYM /* SQLSTATEs 02??? */
+           {
+-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->type= sp_cond_type_t::notfound;
+           }
+         | SQLEXCEPTION_SYM /* All other SQLSTATEs */
+           {
+-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->type= sp_cond_type_t::exception;
+@@ -2789,7 +2774,6 @@
+         
+ sp_proc_stmt_statement:
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+ 
+@@ -2798,7 +2782,6 @@
+           }
+           statement
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+             sp_head *sp= lex->sphead;
+@@ -2845,7 +2828,7 @@
+ 
+ sp_proc_stmt_return:
+           RETURN_SYM 
+-          { Lex->sphead->reset_lex(YYTHD); }
++          { Lex->sphead->reset_lex(thd); }
+           expr
+           {
+             LEX *lex= Lex;
+@@ -2867,7 +2850,7 @@
+                 MYSQL_YYABORT;
+               sp->m_flags|= sp_head::HAS_RETURN;
+             }
+-            if (sp->restore_lex(YYTHD))
++            if (sp->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+         ;
+@@ -3094,7 +3077,7 @@
+         ;
+ 
+ sp_if:
+-          { Lex->sphead->reset_lex(YYTHD); }
++          { Lex->sphead->reset_lex(thd); }
+           expr THEN_SYM
+           {
+             LEX *lex= Lex;
+@@ -3108,7 +3091,7 @@
+                 sp->add_cont_backpatch(i) ||
+                 sp->add_instr(i))
+               MYSQL_YYABORT;
+-            if (sp->restore_lex(YYTHD))
++            if (sp->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+           sp_proc_stmts1
+@@ -3147,7 +3130,7 @@
+           {
+             LEX *lex= Lex;
+             case_stmt_action_case(lex);
+-            lex->sphead->reset_lex(YYTHD); /* For expr $3 */
++            lex->sphead->reset_lex(thd); /* For expr $3 */
+           }
+           expr
+           {
+@@ -3156,7 +3139,7 @@
+               MYSQL_YYABORT;
+ 
+             /* For expr $3 */
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+           simple_when_clause_list
+@@ -3198,7 +3181,7 @@
+ simple_when_clause:
+           WHEN_SYM
+           {
+-            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
++            Lex->sphead->reset_lex(thd); /* For expr $3 */
+           }
+           expr
+           {
+@@ -3208,7 +3191,7 @@
+             if (case_stmt_action_when(lex, $3, true))
+               MYSQL_YYABORT;
+             /* For expr $3 */
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+           THEN_SYM
+@@ -3223,7 +3206,7 @@
+ searched_when_clause:
+           WHEN_SYM
+           {
+-            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
++            Lex->sphead->reset_lex(thd); /* For expr $3 */
+           }
+           expr
+           {
+@@ -3231,7 +3214,7 @@
+             if (case_stmt_action_when(lex, $3, false))
+               MYSQL_YYABORT;
+             /* For expr $3 */
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+           THEN_SYM
+@@ -3395,7 +3378,7 @@
+               MYSQL_YYABORT;
+ 	  }
+         | WHILE_SYM 
+-          { Lex->sphead->reset_lex(YYTHD); }
++          { Lex->sphead->reset_lex(thd); }
+           expr DO_SYM
+           {
+             LEX *lex= Lex;
+@@ -3409,7 +3392,7 @@
+                 sp->new_cont_backpatch(i) ||
+                 sp->add_instr(i))
+               MYSQL_YYABORT;
+-            if (sp->restore_lex(YYTHD))
++            if (sp->restore_lex(thd))
+               MYSQL_YYABORT;
+           }
+           sp_proc_stmts1 END WHILE_SYM
+@@ -3424,7 +3407,7 @@
+             lex->sphead->do_cont_backpatch();
+           }
+         | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM 
+-          { Lex->sphead->reset_lex(YYTHD); }
++          { Lex->sphead->reset_lex(thd); }
+           expr END REPEAT_SYM
+           {
+             LEX *lex= Lex;
+@@ -3436,7 +3419,7 @@
+             if (i == NULL ||
+                 lex->sphead->add_instr(i))
+               MYSQL_YYABORT;
+-            if (lex->sphead->restore_lex(YYTHD))
++            if (lex->sphead->restore_lex(thd))
+               MYSQL_YYABORT;
+             /* We can shortcut the cont_backpatch here */
+             i->m_cont_dest= ip+1;
+@@ -3859,7 +3842,6 @@
+           create3 {}
+         | LIKE table_ident
+           {
+-            THD *thd= YYTHD;
+             TABLE_LIST *src_table;
+             LEX *lex= thd->lex;
+ 
+@@ -3873,7 +3855,6 @@
+           }
+         | '(' LIKE table_ident ')'
+           {
+-            THD *thd= YYTHD;
+             TABLE_LIST *src_table;
+             LEX *lex= thd->lex;
+ 
+@@ -4342,7 +4323,6 @@
+           bit_expr
+           {
+             Item *part_expr= $1;
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Name_resolution_context *context= &lex->current_select->context;
+             TABLE_LIST *save_list= context->table_list;
+@@ -4364,7 +4344,7 @@
+               my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
+               MYSQL_YYABORT;
+             }
+-            if (part_expr->fix_fields(YYTHD, (Item**)0) ||
++            if (part_expr->fix_fields(thd, (Item**)0) ||
+                 ((context->table_list= save_list), FALSE) ||
+                 (!part_expr->const_item()) ||
+                 (!lex->safe_to_cache_query))
+@@ -4629,7 +4609,7 @@
+         | TYPE_SYM opt_equal storage_engines
+           {
+             Lex->create_info.db_type= $3;
+-            WARN_DEPRECATED(yythd, "6.0", "TYPE=storage_engine",
++            WARN_DEPRECATED(thd, "6.0", "TYPE=storage_engine",
+                             "'ENGINE=storage_engine'");
+             Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
+           }
+@@ -4791,19 +4771,19 @@
+ storage_engines:
+           ident_or_text
+           {
+-            plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1);
++            plugin_ref plugin= ha_resolve_by_name(thd, &$1);
+ 
+             if (plugin)
+               $$= plugin_data(plugin, handlerton*);
+             else
+             {
+-              if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
++              if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
+               {
+                 my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str);
+                 MYSQL_YYABORT;
+               }
+               $$= 0;
+-              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
++              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+                                   ER_UNKNOWN_STORAGE_ENGINE,
+                                   ER(ER_UNKNOWN_STORAGE_ENGINE),
+                                   $1.str);
+@@ -4815,7 +4795,7 @@
+           ident_or_text
+           {
+             plugin_ref plugin;
+-            if ((plugin= ha_resolve_by_name(YYTHD, &$1)))
++            if ((plugin= ha_resolve_by_name(thd, &$1)))
+               $$= plugin_data(plugin, handlerton*);
+             else
+             {
+@@ -5043,7 +5023,7 @@
+               {
+                 char buff[sizeof("YEAR()") + MY_INT64_NUM_DECIMAL_DIGITS + 1];
+                 my_snprintf(buff, sizeof(buff), "YEAR(%lu)", length);
+-                push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_NOTE,
++                push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
+                                     ER_WARN_DEPRECATED_SYNTAX,
+                                     ER(ER_WARN_DEPRECATED_SYNTAX),
+                                     buff, "YEAR(4)");
+@@ -5057,7 +5037,7 @@
+           { $$=MYSQL_TYPE_TIME; }
+         | TIMESTAMP opt_field_length
+           {
+-            if (YYTHD->variables.sql_mode & MODE_MAXDB)
++            if (thd->variables.sql_mode & MODE_MAXDB)
+               $$=MYSQL_TYPE_DATETIME;
+             else
+             {
+@@ -5189,7 +5169,7 @@
+ 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
+@@ -5263,7 +5243,7 @@
+         | DEFAULT now_or_signed_literal { Lex->default_value=$2; }
+         | ON UPDATE_SYM NOW_SYM optional_braces
+           {
+-            Item *item= new (YYTHD->mem_root) Item_func_now_local();
++            Item *item= new (thd->mem_root) Item_func_now_local();
+             if (item == NULL)
+               MYSQL_YYABORT;
+             Lex->on_update_value= item;
+@@ -5312,7 +5292,7 @@
+ now_or_signed_literal:
+           NOW_SYM optional_braces
+           {
+-            $$= new (YYTHD->mem_root) Item_func_now_local();
++            $$= new (thd->mem_root) Item_func_now_local();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -5673,7 +5653,6 @@
+ alter:
+           ALTER opt_ignore TABLE_SYM table_ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             lex->name.str= 0;
+             lex->name.length= 0;
+@@ -5799,7 +5778,7 @@
+               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;
+ 
+@@ -6192,7 +6171,6 @@
+           {
+             if (!$4)
+             {
+-              THD *thd= YYTHD;
+               $4= thd->variables.collation_database;
+             }
+             $5= $5 ? $5 : $4;
+@@ -6556,7 +6534,7 @@
+ 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, 
+                                            Select->pop_index_hints()))
+               MYSQL_YYABORT;
+           }
+@@ -6585,7 +6563,7 @@
+ 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,
+                                            Select->pop_index_hints()))
+               MYSQL_YYABORT;
+           }
+@@ -6593,7 +6571,7 @@
+ 
+ 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, 
+                                         global_system_variables.old_mode ? 
+                                         INDEX_HINT_MASK_JOIN : 
+@@ -6813,7 +6791,6 @@
+         | select_item
+         | '*'
+           {
+-            THD *thd= YYTHD;
+             Item *item= new (thd->mem_root)
+                           Item_field(&thd->lex->current_select->context,
+                                      NULL, NULL, "*");
+@@ -6828,7 +6805,6 @@
+ select_item:
+           remember_name select_item2 remember_end select_alias
+           {
+-            THD *thd= YYTHD;
+             DBUG_ASSERT($1 < $3);
+ 
+             if (add_item_to_list(thd, $2))
+@@ -6929,7 +6905,7 @@
+             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;
+             }
+@@ -6937,7 +6913,7 @@
+         | expr XOR expr %prec XOR
+           {
+             /* XOR is a proprietary extension */
+-            $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3);
++            $$ = new (thd->mem_root) Item_cond_xor($1, $3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -6979,50 +6955,50 @@
+             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;
+           }
+@@ -7032,19 +7008,19 @@
+ 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;
+           }
+@@ -7066,13 +7042,12 @@
+ 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;
+@@ -7082,7 +7057,7 @@
+           }
+         | 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;
+           }
+@@ -7090,13 +7065,13 @@
+           { 
+             $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;
+           }
+@@ -7104,7 +7079,7 @@
+           {
+             $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();
+@@ -7112,14 +7087,14 @@
+           }
+         | 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();
+@@ -7127,42 +7102,42 @@
+           }
+         | 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;
+           }
+@@ -7172,85 +7147,85 @@
+ 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;
+           }
+@@ -7299,7 +7274,6 @@
+         | 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());
+@@ -7315,7 +7289,7 @@
+         | 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;
+           }
+@@ -7325,25 +7299,25 @@
+           }
+         | '-' 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;
+           }
+@@ -7352,20 +7326,20 @@
+         | '(' 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;
+           }
+@@ -7374,7 +7348,7 @@
+         | 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);
+@@ -7382,7 +7356,7 @@
+           }
+         | 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;
+@@ -7390,27 +7364,27 @@
+         | 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;
+           }
+@@ -7423,14 +7397,14 @@
+               my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str);
+               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;
+@@ -7438,7 +7412,7 @@
+         | 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;
+           }
+@@ -7453,19 +7427,19 @@
+ 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();
+@@ -7473,31 +7447,30 @@
+           }
+         | 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;
+@@ -7512,7 +7485,6 @@
+           }
+         | 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);
+@@ -7524,103 +7496,103 @@
+           }
+         | 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();
+@@ -7628,7 +7600,7 @@
+           }
+         | YEAR_SYM '(' expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_func_year($3);
++            $$= new (thd->mem_root) Item_func_year($3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -7649,34 +7621,34 @@
+ 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 optional_braces
+           {
+-            $$= new (YYTHD->mem_root) Item_func_curtime_local();
++            $$= new (thd->mem_root) Item_func_curtime_local();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+           }
+         | CURTIME '(' expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_func_curtime_local($3);
++            $$= new (thd->mem_root) Item_func_curtime_local($3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+@@ -7684,83 +7656,83 @@
+         | 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;
+           }
+         | NOW_SYM optional_braces
+           {
+-            $$= new (YYTHD->mem_root) Item_func_now_local();
++            $$= new (thd->mem_root) Item_func_now_local();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+           }
+         | NOW_SYM '(' expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_func_now_local($3);
++            $$= new (thd->mem_root) Item_func_now_local($3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+           }
+         | 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;
+           }
+@@ -7775,9 +7747,9 @@
+             */
+             Lex->set_stmt_unsafe();
+             if (global_system_variables.sysdate_is_now == 0)
+-              $$= new (YYTHD->mem_root) Item_func_sysdate_local();
++              $$= new (thd->mem_root) Item_func_sysdate_local();
+             else
+-              $$= new (YYTHD->mem_root) Item_func_now_local();
++              $$= new (thd->mem_root) Item_func_now_local();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+@@ -7785,42 +7757,42 @@
+         | SYSDATE '(' expr ')'
+           {
+             if (global_system_variables.sysdate_is_now == 0)
+-              $$= new (YYTHD->mem_root) Item_func_sysdate_local($3);
++              $$= new (thd->mem_root) Item_func_sysdate_local($3);
+             else
+-              $$= new (YYTHD->mem_root) Item_func_now_local($3);
++              $$= new (thd->mem_root) Item_func_now_local($3);
+             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 optional_braces
+           {
+-            $$= new (YYTHD->mem_root) Item_func_curtime_utc();
++            $$= new (thd->mem_root) Item_func_curtime_utc();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+           }
+         | UTC_TIMESTAMP_SYM optional_braces
+           {
+-            $$= new (YYTHD->mem_root) Item_func_now_utc();
++            $$= new (thd->mem_root) Item_func_now_utc();
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             Lex->safe_to_cache_query=0;
+@@ -7835,62 +7807,61 @@
+ 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;
+           }
+         | 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);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+         | PASSWORD '(' expr ')'
+           {
+-            THD *thd= YYTHD;
+             Item* i1;
+             if (thd->variables.old_passwords)
+               i1= new (thd->mem_root) Item_func_old_password($3);
+@@ -7902,31 +7873,30 @@
+           }
+         | 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;
+           }
+         | 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((char*) "0",
+                                            thd->variables.default_week_format,
+                                                    1);
+@@ -7938,7 +7908,7 @@
+           }
+         | 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;
+           }
+@@ -7960,52 +7930,52 @@
+ geometry_function:
+           CONTAINS_SYM '(' expr ',' expr ')'
+           {
+-            $$= GEOM_NEW(YYTHD,
++            $$= GEOM_NEW(thd,
+                          Item_func_spatial_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));
+@@ -8043,7 +8013,6 @@
+           }
+           opt_udf_expr_list ')'
+           {
+-            THD *thd= YYTHD;
+             Create_func *builder;
+             Item *item= NULL;
+ 
+@@ -8097,7 +8066,6 @@
+           }
+         | ident '.' ident '(' opt_expr_list ')'
+           {
+-            THD *thd= YYTHD;
+             Create_qfunc *builder;
+             Item *item= NULL;
+ 
+@@ -8161,7 +8129,7 @@
+ udf_expr_list:
+           udf_expr
+           {
+-            $$= new (YYTHD->mem_root) List<Item>;
++            $$= new (thd->mem_root) List<Item>;
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->push_back($1);
+@@ -8194,7 +8162,7 @@
+                remember_name we may get quoted or escaped names.
+             */
+             else if ($2->type() != Item::FIELD_ITEM)
+-              $2->set_name($1, (uint) ($3 - $1), YYTHD->charset());
++              $2->set_name($1, (uint) ($3 - $1), thd->charset());
+             $$= $2;
+           }
+         ;
+@@ -8202,46 +8170,46 @@
+ sum_expr:
+           AVG_SYM '(' in_sum_expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_sum_avg($3);
++            $$= new (thd->mem_root) Item_sum_avg($3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+         | AVG_SYM '(' DISTINCT in_sum_expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_sum_avg_distinct($4);
++            $$= new (thd->mem_root) Item_sum_avg_distinct($4);
+             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;
+           }
+@@ -8251,13 +8219,13 @@
+           { Select->in_sum_expr--; }
+           ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_sum_count_distinct(* $5);
++            $$= new (thd->mem_root) Item_sum_count_distinct(* $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;
+           }
+@@ -8268,55 +8236,55 @@
+         */
+         | 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);
++            $$= new (thd->mem_root) Item_sum_sum($3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+         | SUM_SYM '(' DISTINCT in_sum_expr ')'
+           {
+-            $$= new (YYTHD->mem_root) Item_sum_sum_distinct($4);
++            $$= new (thd->mem_root) Item_sum_sum_distinct($4);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -8328,7 +8296,7 @@
+           {
+             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)
+@@ -8357,7 +8325,7 @@
+           ident_or_text SET_VAR expr
+           {
+             Item_func_set_user_var *item;
+-            $$= item= new (YYTHD->mem_root) Item_func_set_user_var($1, $3);
++            $$= item= new (thd->mem_root) Item_func_set_user_var($1, $3);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             LEX *lex= Lex;
+@@ -8366,7 +8334,7 @@
+           }
+         | 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;
+@@ -8380,7 +8348,7 @@
+               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();
+@@ -8395,7 +8363,7 @@
+ 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;
+           }
+@@ -8422,9 +8390,9 @@
+ 
+ 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:
+@@ -8477,7 +8445,7 @@
+ expr_list:
+           expr
+           {
+-            $$= new (YYTHD->mem_root) List<Item>;
++            $$= new (thd->mem_root) List<Item>;
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->push_back($1);
+@@ -8497,7 +8465,7 @@
+ ident_list:
+           simple_ident
+           {
+-            $$= new (YYTHD->mem_root) List<Item>;
++            $$= new (thd->mem_root) List<Item>;
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+             $$->push_back($1);
+@@ -8595,7 +8563,7 @@
+           {
+             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;
+           }
+@@ -8610,7 +8578,7 @@
+           {
+             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;
+           }
+@@ -8640,7 +8608,7 @@
+           {
+             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;
+           }
+@@ -8676,7 +8644,7 @@
+           {
+             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;
+           }
+@@ -8724,7 +8692,7 @@
+           }
+           table_ident opt_table_alias opt_key_definition
+           {
+-            if (!($$= Select->add_table_to_list(YYTHD, $2, $3,
++            if (!($$= Select->add_table_to_list(thd, $2, $3,
+                                                 Select->get_table_join_options(),
+                                                 Lex->lock_option,
+                                                 Select->pop_index_hints())))
+@@ -8922,7 +8890,7 @@
+ 
+ opt_index_hints_list:
+           /* empty */
+-        | { Select->alloc_index_hints(YYTHD); } index_hints_list
++        | { Select->alloc_index_hints(thd); } index_hints_list
+         ;
+ 
+ opt_key_definition:
+@@ -8931,15 +8899,15 @@
+         ;
+ 
+ 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:
+@@ -8952,7 +8920,7 @@
+           {
+             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)
+@@ -8961,7 +8929,7 @@
+           }
+         | 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)
+@@ -9002,7 +8970,7 @@
+                                     implementation without changing its
+                                     resolution.
+                                   */
+-                                  WARN_DEPRECATED(yythd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
++                                  WARN_DEPRECATED(thd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
+                                 }
+ 	;
+ 
+@@ -9086,7 +9054,6 @@
+           }
+         | /* 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) :
+@@ -9107,9 +9074,9 @@
+ 
+ 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:
+@@ -9156,7 +9123,6 @@
+ 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;
+@@ -9209,9 +9175,9 @@
+ 
+ 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:
+@@ -9271,19 +9237,19 @@
+         }
+         | 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;
+           }
+@@ -9365,7 +9331,7 @@
+             lex->proc_list.elements=0;
+             lex->proc_list.first=0;
+             lex->proc_list.next= &lex->proc_list.first;
+-            Item_field *item= new (YYTHD->mem_root)
++            Item_field *item= new (thd->mem_root)
+                                 Item_field(&lex->current_select->context,
+                                            NULL, NULL, $2.str);
+             if (item == NULL)
+@@ -9390,8 +9356,7 @@
+ procedure_item:
+           remember_name expr remember_end
+           {
+-            THD *thd= YYTHD;
+-
++            
+             if (add_proc_to_list(thd, $2))
+               MYSQL_YYABORT;
+             if (!$2->name)
+@@ -9560,7 +9525,6 @@
+           }
+         | DROP FUNCTION_SYM if_exists ident '.' ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             sp_name *spname;
+             if ($4.str && check_db_name(&$4))
+@@ -9583,7 +9547,6 @@
+           }
+         | DROP FUNCTION_SYM if_exists ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             LEX_STRING db= {0, 0};
+             sp_name *spname;
+@@ -9664,7 +9627,7 @@
+ table_name:
+           table_ident
+           {
+-            if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING))
++            if (!Select->add_table_to_list(thd, $1, NULL, TL_OPTION_UPDATING))
+               MYSQL_YYABORT;
+           }
+         ;
+@@ -9677,7 +9640,7 @@
+ 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,
+                                            Lex->lock_option ))
+               MYSQL_YYABORT;
+@@ -9868,7 +9831,7 @@
+           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;
+           }
+@@ -9922,7 +9885,7 @@
+ 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;
+           }
+         ;
+@@ -9965,7 +9928,7 @@
+ single_multi:
+           FROM table_ident
+           {
+-            if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING,
++            if (!Select->add_table_to_list(thd, $2, NULL, TL_OPTION_UPDATING,
+                                            Lex->lock_option))
+               MYSQL_YYABORT;
+           }
+@@ -9998,7 +9961,7 @@
+             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,
+                                            $3,
+                                            TL_OPTION_UPDATING | TL_OPTION_ALIAS,
+@@ -10007,10 +9970,10 @@
+           }
+         | ident '.' ident opt_wild opt_table_alias
+           {
+-            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,
+                                            $5, 
+                                            TL_OPTION_UPDATING | TL_OPTION_ALIAS,
+@@ -10130,7 +10093,7 @@
+            {
+              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
+@@ -10138,7 +10101,7 @@
+              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
+@@ -10146,7 +10109,7 @@
+              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
+@@ -10154,7 +10117,7 @@
+              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
+@@ -10162,7 +10125,7 @@
+              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
+@@ -10170,22 +10133,22 @@
+             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;
+           }
+         | opt_full PLUGIN_SYM
+           {
+             LEX *lex= Lex;
+-            WARN_DEPRECATED(yythd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
++            WARN_DEPRECATED(thd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
+             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;
+           }
+         | 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
+@@ -10198,7 +10161,7 @@
+             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;
+           }
+         | NEW_SYM MASTER_SYM FOR_SYM SLAVE
+@@ -10233,7 +10196,7 @@
+             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;
+           }
+         | COLUMN_SYM TYPES_SYM
+@@ -10245,15 +10208,15 @@
+           {
+             LEX *lex=Lex;
+             lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES;
+-            WARN_DEPRECATED(yythd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
+-            if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES))
++            WARN_DEPRECATED(thd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
++            if (prepare_schema_table(thd, lex, 0, SCH_ENGINES))
+               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;
+           }
+         | AUTHORS_SYM
+@@ -10285,7 +10248,7 @@
+           { 
+             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
+@@ -10293,7 +10256,7 @@
+             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;
+           }
+         | INNOBASE_SYM STATUS_SYM
+@@ -10301,24 +10264,24 @@
+             LEX *lex= Lex;
+             lex->sql_command = SQLCOM_SHOW_ENGINE_STATUS;
+             if (!(lex->create_info.db_type=
+-                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
++                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
+             {
+               my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
+               MYSQL_YYABORT;
+             }
+-            WARN_DEPRECATED(yythd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
++            WARN_DEPRECATED(thd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
+           }
+         | MUTEX_SYM STATUS_SYM
+           {
+             LEX *lex= Lex;
+             lex->sql_command = SQLCOM_SHOW_ENGINE_MUTEX;
+             if (!(lex->create_info.db_type=
+-                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
++                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
+             {
+               my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
+               MYSQL_YYABORT;
+             }
+-            WARN_DEPRECATED(yythd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
++            WARN_DEPRECATED(thd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
+           }
+         | opt_full PROCESSLIST_SYM
+           { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;}
+@@ -10327,21 +10290,21 @@
+             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
+@@ -10371,7 +10334,7 @@
+           {
+             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;
+@@ -10380,7 +10343,7 @@
+           {
+             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;
+           }
+@@ -10416,14 +10379,14 @@
+           {
+             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 CODE_SYM sp_name
+@@ -10501,7 +10464,7 @@
+           /* 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;
+@@ -10525,7 +10488,7 @@
+             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 {}
+@@ -10554,7 +10517,7 @@
+         | 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)
+@@ -10697,7 +10660,6 @@
+ load:
+           LOAD DATA_SYM
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+ 
+             if (lex->sphead)
+@@ -10711,7 +10673,7 @@
+         | LOAD TABLE_SYM table_ident FROM MASTER_SYM
+           {
+             LEX *lex=Lex;
+-            WARN_DEPRECATED(yythd, "6.0", "LOAD TABLE FROM MASTER",
++            WARN_DEPRECATED(thd, "6.0", "LOAD TABLE FROM MASTER",
+                             "MySQL Administrator (mysqldump, mysql)");
+             if (lex->sphead)
+             {
+@@ -10719,7 +10681,7 @@
+               MYSQL_YYABORT;
+             }
+             lex->sql_command = SQLCOM_LOAD_MASTER_TABLE;
+-            if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING))
++            if (!Select->add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING))
+               MYSQL_YYABORT;
+           }
+         ;
+@@ -10739,7 +10701,7 @@
+           opt_duplicate INTO TABLE_SYM table_ident
+           {
+             LEX *lex=Lex;
+-            if (!Select->add_table_to_list(YYTHD, $9, NULL, TL_OPTION_UPDATING,
++            if (!Select->add_table_to_list(thd, $9, NULL, TL_OPTION_UPDATING,
+                                            lex->lock_option))
+               MYSQL_YYABORT;
+             lex->field_list.empty();
+@@ -10754,7 +10716,7 @@
+         | FROM MASTER_SYM
+           {
+             Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
+-            WARN_DEPRECATED(yythd, "6.0", "LOAD DATA FROM MASTER",
++            WARN_DEPRECATED(thd, "6.0", "LOAD DATA FROM MASTER",
+                             "mysqldump or future "
+                             "BACKUP/RESTORE DATABASE facility");
+           }
+@@ -10872,7 +10834,7 @@
+           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;
+           }
+@@ -10889,7 +10851,6 @@
+           TEXT_STRING
+           {
+             LEX_STRING tmp;
+-            THD *thd= YYTHD;
+             CHARSET_INFO *cs_con= thd->variables.collation_connection;
+             CHARSET_INFO *cs_cli= thd->variables.character_set_client;
+             uint repertoire= thd->lex->text_string_is_7bit &&
+@@ -10915,7 +10876,7 @@
+             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);
+@@ -10924,7 +10885,7 @@
+           }
+         | 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;
+@@ -10943,7 +10904,7 @@
+                  If the string has been pure ASCII so far,
+                  check the new part.
+               */
+-              CHARSET_INFO *cs= YYTHD->variables.collation_connection;
++              CHARSET_INFO *cs= thd->variables.collation_connection;
+               item->collation.repertoire|= my_string_repertoire(cs,
+                                                                 $2.str,
+                                                                 $2.length);
+@@ -10954,15 +10915,15 @@
+ 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;
+             /*
+@@ -10974,7 +10935,7 @@
+           }
+         | 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;
+             /*
+@@ -10989,7 +10950,6 @@
+ param_marker:
+           PARAM_MARKER
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+             Item_param *item;
+@@ -11022,38 +10982,38 @@
+         | NUM_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((char*) "FALSE",0,1);
++            $$= new (thd->mem_root) Item_int((char*) "FALSE",0,1);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+         | TRUE_SYM
+           {
+-            $$= new (YYTHD->mem_root) Item_int((char*) "TRUE",1,1);
++            $$= new (thd->mem_root) Item_int((char*) "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;
+             /*
+@@ -11064,7 +11024,7 @@
+             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 will be set in select_item */
+                                     str ? str->ptr() : "",
+                                     str ? str->length() : 0,
+@@ -11082,7 +11042,7 @@
+           }
+         | 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;
+             /*
+@@ -11093,7 +11053,7 @@
+             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 will be set in select_item */
+                                     str ? str->ptr() : "",
+                                     str ? str->length() : 0,
+@@ -11117,7 +11077,7 @@
+           NUM
+           {
+             int error;
+-            $$= new (YYTHD->mem_root)
++            $$= new (thd->mem_root)
+                   Item_int($1.str,
+                            (longlong) my_strtoll10($1.str, NULL, &error),
+                            $1.length);
+@@ -11127,7 +11087,7 @@
+         | LONG_NUM
+           {
+             int error;
+-            $$= new (YYTHD->mem_root)
++            $$= new (thd->mem_root)
+                   Item_int($1.str,
+                            (longlong) my_strtoll10($1.str, NULL, &error),
+                            $1.length);
+@@ -11136,23 +11096,23 @@
+           }
+         | 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;
+             }
+@@ -11172,7 +11132,7 @@
+           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;
+@@ -11180,7 +11140,6 @@
+           }
+         | ident '.' ident '.' '*'
+           {
+-            THD *thd= YYTHD;
+             SELECT_LEX *sel= Select;
+             const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
+                                   NullS : $1.str;
+@@ -11200,7 +11159,6 @@
+ simple_ident:
+           ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+             sp_variable_t *spv;
+@@ -11251,7 +11209,6 @@
+ simple_ident_nospvar:
+           ident
+           {
+-            THD *thd= YYTHD;
+             SELECT_LEX *sel=Select;
+             if ((sel->parsing_place != IN_HAVING) ||
+                 (sel->get_in_sum_expr() > 0))
+@@ -11273,7 +11230,6 @@
+ simple_ident_q:
+           ident '.' ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+ 
+             /*
+@@ -11352,7 +11308,6 @@
+           }
+         | '.' ident '.' ident
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             SELECT_LEX *sel= lex->current_select;
+             if (sel->no_table_names_allowed)
+@@ -11377,7 +11332,6 @@
+           }
+         | 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 ?
+@@ -11445,7 +11399,7 @@
+           }
+         | ident '.' ident
+           {
+-            $$= new Table_ident(YYTHD, $1,$3,0);
++            $$= new Table_ident(thd, $1,$3,0);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -11467,7 +11421,7 @@
+           }
+         | ident '.' ident opt_wild
+           {
+-            $$= new Table_ident(YYTHD, $1,$3,0);
++            $$= new Table_ident(thd, $1,$3,0);
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+@@ -11477,7 +11431,7 @@
+           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;
+           }
+@@ -11487,8 +11441,7 @@
+           IDENT { $$= $1; }
+         | IDENT_QUOTED
+           {
+-            THD *thd= YYTHD;
+-
++            
+             if (thd->charset_is_system_charset)
+             {
+               CHARSET_INFO *cs= system_charset_info;
+@@ -11516,8 +11469,6 @@
+ TEXT_STRING_sys:
+           TEXT_STRING
+           {
+-            THD *thd= YYTHD;
+-
+             if (thd->charset_is_system_charset)
+               $$= $1;
+             else
+@@ -11532,8 +11483,6 @@
+ TEXT_STRING_literal:
+           TEXT_STRING
+           {
+-            THD *thd= YYTHD;
+-
+             if (thd->charset_is_collation_connection)
+               $$= $1;
+             else
+@@ -11548,8 +11497,6 @@
+ TEXT_STRING_filesystem:
+           TEXT_STRING
+           {
+-            THD *thd= YYTHD;
+-
+             if (thd->charset_is_character_set_filesystem)
+               $$= $1;
+             else
+@@ -11566,7 +11513,6 @@
+           IDENT_sys    { $$=$1; }
+         | keyword
+           {
+-            THD *thd= YYTHD;
+             $$.str= thd->strmake($1.str, $1.length);
+             if ($$.str == NULL)
+               MYSQL_YYABORT;
+@@ -11578,7 +11524,6 @@
+           IDENT_sys    { $$=$1; }
+         | keyword_sp
+           {
+-            THD *thd= YYTHD;
+             $$.str= thd->strmake($1.str, $1.length);
+             if ($$.str == NULL)
+               MYSQL_YYABORT;
+@@ -11595,7 +11540,6 @@
+ user:
+           ident_or_text
+           {
+-            THD *thd= YYTHD;
+             if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
+               MYSQL_YYABORT;
+             $$->user = $1;
+@@ -11609,7 +11553,6 @@
+           }
+         | ident_or_text '@' ident_or_text
+           {
+-            THD *thd= YYTHD;
+             if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
+               MYSQL_YYABORT;
+             $$->user = $1; $$->host=$3;
+@@ -11628,7 +11571,7 @@
+           }
+         | 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 
+@@ -11991,7 +11934,6 @@
+ 
+ option_type_value:
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+ 
+@@ -12022,7 +11964,6 @@
+           }
+           ext_option_value
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+ 
+@@ -12105,7 +12046,6 @@
+ sys_option_value:
+           option_type internal_variable_name equal set_expr_or_default
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= Lex;
+             LEX_STRING *name= &$2.base_name;
+ 
+@@ -12117,7 +12057,7 @@
+                 my_parse_error(ER(ER_SYNTAX_ERROR));
+                 MYSQL_YYABORT;
+               }
+-              if (set_trigger_new_row(YYTHD, name, $4))
++              if (set_trigger_new_row(thd, name, $4))
+                 MYSQL_YYABORT;
+             }
+             else if ($2.var)
+@@ -12147,7 +12087,6 @@
+           }
+         | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
+           {
+-            THD *thd= YYTHD;
+             LEX *lex=Lex;
+             lex->option_type= $1;
+             Item *item= new (thd->mem_root) Item_int((int32) $5);
+@@ -12167,7 +12106,7 @@
+           '@' ident_or_text equal expr
+           {
+             Item_func_set_user_var *item;
+-            item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4);
++            item= new (thd->mem_root) Item_func_set_user_var($2, $4);
+             if (item == NULL)
+               MYSQL_YYABORT;
+             set_var_user *var= new set_var_user(item);
+@@ -12177,7 +12116,6 @@
+           }
+         | '@' '@' 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)
+@@ -12190,7 +12128,6 @@
+           }
+         | charset old_or_new_charset_name_or_default
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             CHARSET_INFO *cs2;
+             cs2= $2 ? $2: global_system_variables.character_set_client;
+@@ -12238,7 +12175,6 @@
+           }
+         | PASSWORD equal text_or_password
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             LEX_USER *user;
+             sp_pcontext *spc= lex->spcont;
+@@ -12278,7 +12214,6 @@
+ internal_variable_name:
+           ident
+           {
+-            THD *thd= YYTHD;
+             sp_pcontext *spc= thd->lex->spcont;
+             sp_variable_t *spv;
+ 
+@@ -12337,7 +12272,7 @@
+             }
+             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())
+@@ -12348,7 +12283,7 @@
+           }
+         | 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())
+@@ -12370,16 +12305,16 @@
+           TEXT_STRING { $$=$1.str;}
+         | PASSWORD '(' TEXT_STRING ')'
+           {
+-            $$= $3.length ? YYTHD->variables.old_passwords ?
+-              Item_func_old_password::alloc(YYTHD, $3.str, $3.length) :
+-              Item_func_password::alloc(YYTHD, $3.str, $3.length) :
++            $$= $3.length ? thd->variables.old_passwords ?
++              Item_func_old_password::alloc(thd, $3.str, $3.length) :
++              Item_func_password::alloc(thd, $3.str, $3.length) :
+               $3.str;
+             if ($$ == NULL)
+               MYSQL_YYABORT;
+           }
+         | OLD_PASSWORD '(' TEXT_STRING ')'
+           {
+-            $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str,
++            $$= $3.length ? Item_func_old_password::alloc(thd, $3.str,
+                                                           $3.length) :
+               $3.str;
+             if ($$ == NULL)
+@@ -12393,19 +12328,19 @@
+         | 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;
+           }
+@@ -12443,7 +12378,7 @@
+           table_ident opt_table_alias lock_option
+           {
+             thr_lock_type lock_type= (thr_lock_type) $3;
+-            if (!Select->add_table_to_list(YYTHD, $1, $2, 0, lock_type))
++            if (!Select->add_table_to_list(thd, $1, $2, 0, lock_type))
+               MYSQL_YYABORT;
+             /* If table is to be write locked, protect from a impending GRL. */
+             if (lock_type >= TL_WRITE_ALLOW_WRITE)
+@@ -12514,7 +12449,7 @@
+             lex->expr_allows_subselect= FALSE;
+             lex->sql_command = SQLCOM_HA_READ;
+             lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */
+-            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;
+@@ -12836,10 +12771,10 @@
+             $$=$1; $1->password=$4;
+             if ($4.length)
+             {
+-              if (YYTHD->variables.old_passwords)
++              if (thd->variables.old_passwords)
+               {
+                 char *buff= 
+-                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
++                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
+                 if (buff == NULL)
+                   MYSQL_YYABORT;
+                 my_make_scrambled_password_323(buff, $4.str, $4.length);
+@@ -12849,7 +12784,7 @@
+               else
+               {
+                 char *buff= 
+-                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
++                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
+                 if (buff == NULL)
+                   MYSQL_YYABORT;
+                 my_make_scrambled_password(buff, $4.str, $4.length);
+@@ -12881,7 +12816,7 @@
+ 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);
+@@ -12981,14 +12916,14 @@
+ 
+ opt_chain:
+           /* empty */
+-          { $$= (YYTHD->variables.completion_type == 1); }
++          { $$= (thd->variables.completion_type == 1); }
+         | AND_SYM NO_SYM CHAIN_SYM { $$=0; }
+         | AND_SYM CHAIN_SYM        { $$=1; }
+         ;
+ 
+ opt_release:
+           /* empty */
+-          { $$= (YYTHD->variables.completion_type == 2); }
++          { $$= (thd->variables.completion_type == 2); }
+         | RELEASE_SYM        { $$=1; }
+         | NO_SYM RELEASE_SYM { $$=0; }
+ ;
+@@ -13102,7 +13037,6 @@
+ 
+ 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;
+@@ -13118,7 +13052,6 @@
+           }
+           order_or_limit
+           {
+-            THD *thd= YYTHD;
+             thd->lex->current_select->no_table_names_allowed= 0;
+             thd->where= "";
+           }
+@@ -13255,14 +13188,14 @@
+               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);
+           }
+         ;
+ 
+@@ -13307,7 +13240,6 @@
+ 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 */
+@@ -13347,7 +13279,6 @@
+           }
+           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);
+@@ -13403,7 +13334,6 @@
+           EACH_SYM
+           ROW_SYM
+           { /* $15 */
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+             sp_head *sp;
+@@ -13437,8 +13367,8 @@
+             sp_head *sp= lex->sphead;
+ 
+             lex->sql_command= SQLCOM_CREATE_TRIGGER;
+-            sp->set_stmt_end(YYTHD);
+-            sp->restore_thd_mem_root(YYTHD);
++            sp->set_stmt_end(thd);
++            sp->restore_thd_mem_root(thd);
+ 
+             if (sp->is_not_allowed_in_function("trigger"))
+               MYSQL_YYABORT;
+@@ -13448,7 +13378,7 @@
+               sp_proc_stmt alternatives are not saving/restoring LEX, so
+               lex->query_tables can be wiped out.
+             */
+-            if (!lex->select_lex.add_table_to_list(YYTHD, $9,
++            if (!lex->select_lex.add_table_to_list(thd, $9,
+                                                    (LEX_STRING*) 0,
+                                                    TL_OPTION_UPDATING,
+                                                    TL_IGNORE))
+@@ -13466,7 +13396,6 @@
+           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))
+             {
+@@ -13484,7 +13413,6 @@
+         | 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))
+             {
+@@ -13507,7 +13435,6 @@
+           sp_name /* $3 */
+           '(' /* $4 */
+           { /* $5 */
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+             sp_head *sp;
+@@ -13565,7 +13492,7 @@
+               MYSQL_YYABORT;
+             }
+ 
+-            if (sp->fill_field_definition(YYTHD, lex,
++            if (sp->fill_field_definition(thd, lex,
+                                           (enum enum_field_types) $11,
+                                           &sp->m_return_field_def))
+               MYSQL_YYABORT;
+@@ -13574,7 +13501,6 @@
+           }
+           sp_c_chistics /* $13 */
+           { /* $14 */
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             Lex_input_stream *lip= YYLIP;
+ 
+@@ -13583,7 +13509,6 @@
+           }
+           sp_proc_stmt /* $15 */
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+             sp_head *sp= lex->sphead;
+ 
+@@ -13654,10 +13579,10 @@
+             sp= new sp_head();
+             if (sp == NULL)
+               MYSQL_YYABORT;
+-            sp->reset_thd_mem_root(YYTHD);
++            sp->reset_thd_mem_root(thd);
+             sp->init(lex);
+             sp->m_type= TYPE_ENUM_PROCEDURE;
+-            sp->init_sp_name(YYTHD, $3);
++            sp->init_sp_name(thd, $3);
+ 
+             lex->sphead= sp;
+           }
+@@ -13672,7 +13597,6 @@
+           sp_pdparam_list
+           ')'
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+ 
+             lex->sphead->m_param_end= YYLIP->get_cpp_tok_start();
+@@ -13680,7 +13604,6 @@
+           }
+           sp_c_chistics
+           {
+-            THD *thd= YYTHD;
+             LEX *lex= thd->lex;
+ 
+             lex->sphead->m_chistics= &lex->sp_chistics;
+@@ -13691,9 +13614,9 @@
+             LEX *lex= Lex;
+             sp_head *sp= lex->sphead;
+ 
+-            sp->set_stmt_end(YYTHD);
++            sp->set_stmt_end(thd);
+             lex->sql_command= SQLCOM_CREATE_PROCEDURE;
+-            sp->restore_thd_mem_root(YYTHD);
++            sp->restore_thd_mem_root(thd);
+           }
+         ;
+ 
+@@ -13730,21 +13653,21 @@
+           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/package/mysql/mysql.mk b/package/mysql/mysql.mk
index 9b22c2d..27afc9f 100644
--- a/package/mysql/mysql.mk
+++ b/package/mysql/mysql.mk
@@ -25,7 +25,6 @@ MYSQL_CONF_ENV = \
 
 MYSQL_CONF_OPT = \
 	--without-ndb-binlog \
-	--without-server \
 	--without-docs \
 	--without-man \
 	--without-libedit \
@@ -34,6 +33,50 @@ MYSQL_CONF_OPT = \
 	--enable-thread-safe-client \
 	$(ENABLE_DEBUG)
 
+ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
+MYSQL_DEPENDENCIES += host-mysql host-bison
+HOST_MYSQL_DEPENDENCIES =
+
+HOST_MYSQL_CONF_OPT = \
+	--with-embedded-server
+
+MYSQL_CONF_OPT += \
+	--disable-dependency-tracking \
+	--with-atomic-ops=up \
+	--with-embedded-server \
+	--without-query-cache \
+	--without-plugin-partition \
+	--without-plugin-daemon_example \
+	--without-plugin-ftexample \
+	--without-plugin-archive \
+	--without-plugin-blackhole \
+	--without-plugin-example \
+	--without-plugin-federated \
+	--without-plugin-ibmdb2i \
+	--without-plugin-innobase \
+	--without-plugin-innodb_plugin \
+	--without-plugin-ndbcluster
+
+define HOST_MYSQL_BUILD_CMDS
+	$(MAKE) -C $(@D)/include my_config.h
+	$(MAKE) -C $(@D)/mysys libmysys.a
+	$(MAKE) -C $(@D)/strings libmystrings.a
+	$(MAKE) -C $(@D)/vio libvio.a
+	$(MAKE) -C $(@D)/dbug libdbug.a
+	$(MAKE) -C $(@D)/regex libregex.a
+	$(MAKE) -C $(@D)/sql gen_lex_hash
+endef
+
+define HOST_MYSQL_INSTALL_CMDS
+	$(INSTALL) -m 0755  $(@D)/sql/gen_lex_hash  $(HOST_DIR)/usr/bin/
+endef
+
+else
+MYSQL_CONF_OPT += \
+	--without-server
+endif
+
+
 define MYSQL_REMOVE_TEST_PROGS
 	rm -rf $(TARGET_DIR)/usr/mysql-test $(TARGET_DIR)/usr/sql-bench
 endef
@@ -46,3 +89,4 @@ MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_REMOVE_TEST_PROGS
 MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_ADD_MYSQL_LIB_PATH
 
 $(eval $(autotools-package))
+$(eval $(host-autotools-package))
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 2/2] package/mysql: fix debugging options
  2014-02-12 22:39 [Buildroot] [PATCH 1/2] mysql: add option to build the server Marcelo Gutiérrez
@ 2014-02-12 22:39 ` Marcelo Gutiérrez
  2014-02-23 19:12   ` Yann E. MORIN
  2014-02-23 19:10 ` [Buildroot] [PATCH 1/2] mysql: add option to build the server Yann E. MORIN
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Marcelo Gutiérrez @ 2014-02-12 22:39 UTC (permalink / raw)
  To: buildroot

From: Marcelo Gutierrez <kuyurix@gmail.com>

The usual --{en,dis}able-debug passed by the infrastructure are not
recognised by mysql's ./configure, as it uses unusual options.

Also, debugging is only meaningfull to the server, not the client.

Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
[yann.morin.1998 at free.fr: actually add the options, move in server if-block]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Arnout Vandecappelle <arnout@mind.be>
---
 package/mysql/mysql.mk |   11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/package/mysql/mysql.mk b/package/mysql/mysql.mk
index 27afc9f..95b30b7 100644
--- a/package/mysql/mysql.mk
+++ b/package/mysql/mysql.mk
@@ -30,8 +30,7 @@ MYSQL_CONF_OPT = \
 	--without-libedit \
 	--without-readline \
 	--with-low-memory \
-	--enable-thread-safe-client \
-	$(ENABLE_DEBUG)
+	--enable-thread-safe-client
 
 ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
 MYSQL_DEPENDENCIES += host-mysql host-bison
@@ -57,6 +56,14 @@ MYSQL_CONF_OPT += \
 	--without-plugin-innodb_plugin \
 	--without-plugin-ndbcluster
 
+# Debugging is only available for the server, so no need for
+# this if-block outside of the server if-block
+ifeq ($(BR2_ENABLE_DEBUG),y)
+MYSQL_CONF_OPT += --with-debug=full
+else
+MYSQL_CONF_OPT += --without-debug
+endif
+
 define HOST_MYSQL_BUILD_CMDS
 	$(MAKE) -C $(@D)/include my_config.h
 	$(MAKE) -C $(@D)/mysys libmysys.a
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-02-12 22:39 [Buildroot] [PATCH 1/2] mysql: add option to build the server Marcelo Gutiérrez
  2014-02-12 22:39 ` [Buildroot] [PATCH 2/2] package/mysql: fix debugging options Marcelo Gutiérrez
@ 2014-02-23 19:10 ` Yann E. MORIN
  2014-02-23 20:15 ` Peter Korsgaard
  2014-03-03 22:35 ` Thomas Petazzoni
  3 siblings, 0 replies; 11+ messages in thread
From: Yann E. MORIN @ 2014-02-23 19:10 UTC (permalink / raw)
  To: buildroot

Marcelo, All,

On 2014-02-12 22:39 +0000, Marcelo Guti?rrez spake thusly:
> From: Marcelo Gutierrez <kuyurix@gmail.com>
> 
> Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>

Reviewed-by: "Yann E. MORIN" <yann.morin.1998@free.fr>

Sorry for the delay.

Regards,
Yann E. MORIN.

> ---
>  package/mysql/Config.in                            |    9 +
>  .../mysql-0003-ac_stack_direction-is-unset.patch   |   15 +
>  .../mysql-0004-Fix-gen_lex_hash-execution.patch    |   32 +
>  ...ql-0005-bison_3_breaks_mysql_server_build.patch | 3310 ++++++++++++++++++++
>  package/mysql/mysql.mk                             |   46 +-
>  5 files changed, 3411 insertions(+), 1 deletion(-)
>  create mode 100644 package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
>  create mode 100644 package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
>  create mode 100644 package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
> 
> diff --git a/package/mysql/Config.in b/package/mysql/Config.in
> index 0def957..7133892 100644
> --- a/package/mysql/Config.in
> +++ b/package/mysql/Config.in
> @@ -10,6 +10,15 @@ config BR2_PACKAGE_MYSQL
>  
>  	  http://www.mysql.com/
>  
> +if BR2_PACKAGE_MYSQL
> +
> +config BR2_PACKAGE_MYSQL_SERVER
> +	bool "MySQL server"
> +	help
> +	  Install the MySQL server on the target.
> +
> +endif
> +
>  comment "MySQL needs a toolchain w/ C++, threads"
>  	depends on BR2_USE_MMU
>  	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
> diff --git a/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
> new file mode 100644
> index 0000000..6fef0a9
> --- /dev/null
> +++ b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
> @@ -0,0 +1,15 @@
> +misc.m4: ac_cv_c_stack_direction is unset.
> +
> +Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
> +
> +--- mysql-5.1.70.orig/config/ac-macros/misc.m4
> ++++ mysql-5.1.70/config/ac-macros/misc.m4
> +@@ -477,7 +477,7 @@
> +     exit(ptr_f(&a) < 0);
> +   }
> +   ], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1,
> +-   ac_cv_c_stack_direction=)])
> ++   ac_cv_c_stack_direction=0)])
> +  AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
> + ])dnl
> + 
> diff --git a/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
> new file mode 100644
> index 0000000..b91ed4f
> --- /dev/null
> +++ b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
> @@ -0,0 +1,32 @@
> +Makefile: fix cross-compiling the server
> +
> +MySQL Makefile believes it can run code it just compiled, to
> +generate a header. This does not work for cross-compilation.
> +
> +Instead, use a pre-installed host-version of the required tool.
> +
> +Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
> +
> +--- mysql-5.1.70/sql/Makefile.am
> ++++ mysql-5.1.70.patch/sql/Makefile.am
> +@@ -177,7 +177,7 @@
> + # this avoid the rebuild of the built files in a source dist
> + lex_hash.h:	gen_lex_hash.cc lex.h
> + 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
> +-		./gen_lex_hash$(EXEEXT) > $@-t
> ++		gen_lex_hash$(EXEEXT) > $@-t
> + 		$(MV) $@-t $@
> + 
> + # For testing of udf_example.so
> +
> +--- mysql-5.1.70/sql/Makefile.in
> ++++ mysql-5.1.70.patch/sql/Makefile.in
> +@@ -1310,7 +1310,7 @@
> + # this avoid the rebuild of the built files in a source dist
> + lex_hash.h:	gen_lex_hash.cc lex.h
> + 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
> +-		./gen_lex_hash$(EXEEXT) > $@-t
> ++		gen_lex_hash$(EXEEXT) > $@-t
> + 		$(MV) $@-t $@
> + 
> + # We might have some stuff not built in this build, but that we want to install
> diff --git a/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
> new file mode 100644
> index 0000000..918fe24
> --- /dev/null
> +++ b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
> @@ -0,0 +1,3310 @@
> +fix the yacc code in mysql
> +
> +Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
> +---
> +diff -uNr mysql-5.1.73.orig/sql/sql_lex.cc mysql-5.1.73/sql/sql_lex.cc
> +--- mysql-5.1.73.orig/sql/sql_lex.cc	2013-11-04 18:52:27.000000000 +0000
> ++++ mysql-5.1.73/sql/sql_lex.cc	2014-02-12 14:12:04.244111625 +0000
> +@@ -775,14 +775,13 @@
> + 				(which can't be followed by a signed number)
> + */
> + 
> +-int MYSQLlex(void *arg, void *yythd)
> ++int MYSQLlex(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 -uNr mysql-5.1.73.orig/sql/sql_lex.h mysql-5.1.73/sql/sql_lex.h
> +--- mysql-5.1.73.orig/sql/sql_lex.h	2013-11-04 18:52:27.000000000 +0000
> ++++ mysql-5.1.73/sql/sql_lex.h	2014-02-12 14:17:19.424106423 +0000
> +@@ -2072,7 +2072,7 @@
> + 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(CHARSET_INFO *cs, LEX_STRING *str);
> + 
> +diff -uNr mysql-5.1.73.orig/sql/sql_parse.cc mysql-5.1.73/sql/sql_parse.cc
> +--- mysql-5.1.73.orig/sql/sql_parse.cc	2013-11-04 18:52:27.000000000 +0000
> ++++ mysql-5.1.73/sql/sql_parse.cc	2014-02-12 14:19:20.424104427 +0000
> +@@ -8012,7 +8012,7 @@
> + }
> + 
> + 
> +-extern int MYSQLparse(void *thd); // from sql_yacc.cc
> ++extern int MYSQLparse(THD *thd); // from sql_yacc.cc
> + 
> + 
> + /**
> +diff -uNr mysql-5.1.73.orig/sql/sql_yacc.yy mysql-5.1.73/sql/sql_yacc.yy
> +--- mysql-5.1.73.orig/sql/sql_yacc.yy	2013-11-04 18:52:27.000000000 +0000
> ++++ mysql-5.1.73/sql/sql_yacc.yy	2014-02-12 20:17:06.707750140 +0000
> +@@ -23,19 +23,13 @@
> + */
> + 
> + %{
> +-/* 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 YYLIP (& thd->m_parser_state->m_lip)
> + 
> + #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 "mysql_priv.h"
> + #include "slave.h"
> +@@ -55,7 +49,7 @@
> + #pragma warning (disable : 4065)
> + #endif
> + 
> +-int yylex(void *yylval, void *yythd);
> ++int yylex(void *yylval, THD *thd);
> + 
> + const LEX_STRING null_lex_str= {0,0};
> + 
> +@@ -64,7 +58,7 @@
> +     ulong val= *(F);                          \
> +     if (my_yyoverflow((B), (D), &val))        \
> +     {                                         \
> +-      yyerror((char*) (A));                   \
> ++      yyerror(current_thd, (char*) (A));      \
> +       return 2;                               \
> +     }                                         \
> +     else                                      \
> +@@ -76,7 +70,7 @@
> + #define MYSQL_YYABORT                         \
> +   do                                          \
> +   {                                           \
> +-    LEX::cleanup_lex_after_parse_error(YYTHD);\
> ++    LEX::cleanup_lex_after_parse_error(thd);\
> +     YYABORT;                                  \
> +   } while (0)
> + 
> +@@ -159,9 +153,8 @@
> +   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
> +@@ -675,7 +668,10 @@
> + 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 169 shift/reduce conflicts.
> +   We should not introduce new conflicts any more.
> +@@ -1516,7 +1512,6 @@
> + query:
> +           END_OF_INPUT
> +           {
> +-            THD *thd= YYTHD;
> +             if (!thd->bootstrap &&
> +               (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT)))
> +             {
> +@@ -1530,7 +1525,7 @@
> +           {
> +             Lex_input_stream *lip = YYLIP;
> + 
> +-            if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) &&
> ++            if ((thd->client_capabilities & CLIENT_MULTI_QUERIES) &&
> +                 ! lip->stmt_prepare_mode &&
> +                 ! lip->eof())
> +             {
> +@@ -1626,7 +1621,6 @@
> + 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;
> +@@ -1641,7 +1635,6 @@
> + prepare:
> +           PREPARE_SYM ident FROM prepare_src
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             lex->sql_command= SQLCOM_PREPARE;
> +             lex->prepared_stmt_name= $2;
> +@@ -1651,14 +1644,12 @@
> + 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;
> +@@ -1668,7 +1659,6 @@
> + execute:
> +           EXECUTE_SYM ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             lex->sql_command= SQLCOM_EXECUTE;
> +             lex->prepared_stmt_name= $2;
> +@@ -1826,7 +1816,6 @@
> + 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,
> +@@ -1844,13 +1833,13 @@
> +           }
> +           create2
> +           {
> +-            LEX *lex= YYTHD->lex;
> ++            LEX *lex= thd->lex;
> +             lex->current_select= &lex->select_lex; 
> +             if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
> +                 !lex->create_info.db_type)
> +             {
> +-              lex->create_info.db_type= ha_default_handlerton(YYTHD);
> +-              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
> ++              lex->create_info.db_type= ha_default_handlerton(thd);
> ++              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
> +                                   ER_WARN_USING_OTHER_HANDLER,
> +                                   ER(ER_WARN_USING_OTHER_HANDLER),
> +                                   ha_resolve_storage_engine_name(lex->create_info.db_type),
> +@@ -1979,7 +1968,7 @@
> + event_tail:
> +           remember_name EVENT_SYM opt_if_not_exists sp_name
> +           {
> +-            THD *thd= YYTHD;
> ++            THD *thd= thd;
> +             LEX *lex=Lex;
> + 
> +             lex->stmt_definition_begin= $1;
> +@@ -2046,7 +2035,7 @@
> + ev_starts:
> +           /* empty */
> +           {
> +-            Item *item= new (YYTHD->mem_root) Item_func_now_local();
> ++            Item *item= new (thd->mem_root) Item_func_now_local();
> +             if (item == NULL)
> +               MYSQL_YYABORT;
> +             Lex->event_parse_data->item_starts= item;
> +@@ -2096,7 +2085,6 @@
> + 
> + ev_sql_stmt:
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> + 
> +@@ -2139,7 +2127,6 @@
> +           }
> +           ev_sql_stmt_inner
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> + 
> +             /* return back to the original memory root ASAP */
> +@@ -2198,11 +2185,10 @@
> +             $$= 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 (check_routine_name(&$1))
> +@@ -2272,7 +2258,7 @@
> +             lex->sql_command= SQLCOM_CALL;
> +             lex->spname= $2;
> +             lex->value_list.empty();
> +-            sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE);
> ++            sp_add_used_routine(lex, thd, $2, TYPE_ENUM_PROCEDURE);
> +           }
> +           opt_sp_cparam_list {}
> +         ;
> +@@ -2345,7 +2331,7 @@
> +                                                      (enum enum_field_types)$3,
> +                                                      sp_param_in);
> + 
> +-            if (lex->sphead->fill_field_definition(YYTHD, lex,
> ++            if (lex->sphead->fill_field_definition(thd, lex,
> +                                                    (enum enum_field_types) $3,
> +                                                    &spvar->field_def))
> +             {
> +@@ -2382,7 +2368,7 @@
> +                                                      (enum enum_field_types)$4,
> +                                                      (sp_param_mode_t)$1);
> + 
> +-            if (lex->sphead->fill_field_definition(YYTHD, lex,
> ++            if (lex->sphead->fill_field_definition(thd, lex,
> +                                                    (enum enum_field_types) $4,
> +                                                    &spvar->field_def))
> +             {
> +@@ -2445,13 +2431,12 @@
> +           {
> +             LEX *lex= Lex;
> + 
> +-            lex->sphead->reset_lex(YYTHD);
> ++            lex->sphead->reset_lex(thd);
> +             lex->spcont->declare_var_boundary($2);
> +           }
> +           type
> +           sp_opt_default
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= Lex;
> +             sp_pcontext *pctx= lex->spcont;
> +             uint num_vars= pctx->context_var_count();
> +@@ -2477,7 +2462,7 @@
> +               spvar->type= var_type;
> +               spvar->dflt= dflt_value_item;
> +             
> +-              if (lex->sphead->fill_field_definition(YYTHD, lex, var_type,
> ++              if (lex->sphead->fill_field_definition(thd, lex, var_type,
> +                                                      &spvar->field_def))
> +               {
> +                 MYSQL_YYABORT;
> +@@ -2501,7 +2486,7 @@
> +             }
> + 
> +             pctx->declare_var_boundary(0);
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +             $$.vars= $2;
> +             $$.conds= $$.hndlrs= $$.curs= 0;
> +@@ -2516,7 +2501,7 @@
> + 	      my_error(ER_SP_DUP_COND, MYF(0), $2.str);
> + 	      MYSQL_YYABORT;
> + 	    }
> +-	    if(YYTHD->lex->spcont->push_cond(&$2, $5))
> ++	    if(thd->lex->spcont->push_cond(&$2, $5))
> +               MYSQL_YYABORT;
> +             $$.vars= $$.hndlrs= $$.curs= 0;
> +             $$.conds= 1;
> +@@ -2602,7 +2587,7 @@
> + 
> + sp_cursor_stmt:
> +           {
> +-            Lex->sphead->reset_lex(YYTHD);
> ++            Lex->sphead->reset_lex(thd);
> +           }
> +           select
> +           {
> +@@ -2618,7 +2603,7 @@
> +             }
> +             lex->sp_lex_in_use= TRUE;
> +             $$= lex;
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +         ;
> +@@ -2662,7 +2647,7 @@
> + sp_cond:
> +           ulong_num
> +           { /* mysql errno */
> +-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
> ++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->type= sp_cond_type_t::number;
> +@@ -2675,7 +2660,7 @@
> +               my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str);
> +               MYSQL_YYABORT;
> +             }
> +-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
> ++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->type= sp_cond_type_t::state;
> +@@ -2705,21 +2690,21 @@
> +           }
> +         | SQLWARNING_SYM /* SQLSTATEs 01??? */
> +           {
> +-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
> ++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->type= sp_cond_type_t::warning;
> +           }
> +         | not FOUND_SYM /* SQLSTATEs 02??? */
> +           {
> +-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
> ++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->type= sp_cond_type_t::notfound;
> +           }
> +         | SQLEXCEPTION_SYM /* All other SQLSTATEs */
> +           {
> +-            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
> ++            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->type= sp_cond_type_t::exception;
> +@@ -2789,7 +2774,6 @@
> +         
> + sp_proc_stmt_statement:
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> + 
> +@@ -2798,7 +2782,6 @@
> +           }
> +           statement
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> +             sp_head *sp= lex->sphead;
> +@@ -2845,7 +2828,7 @@
> + 
> + sp_proc_stmt_return:
> +           RETURN_SYM 
> +-          { Lex->sphead->reset_lex(YYTHD); }
> ++          { Lex->sphead->reset_lex(thd); }
> +           expr
> +           {
> +             LEX *lex= Lex;
> +@@ -2867,7 +2850,7 @@
> +                 MYSQL_YYABORT;
> +               sp->m_flags|= sp_head::HAS_RETURN;
> +             }
> +-            if (sp->restore_lex(YYTHD))
> ++            if (sp->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +         ;
> +@@ -3094,7 +3077,7 @@
> +         ;
> + 
> + sp_if:
> +-          { Lex->sphead->reset_lex(YYTHD); }
> ++          { Lex->sphead->reset_lex(thd); }
> +           expr THEN_SYM
> +           {
> +             LEX *lex= Lex;
> +@@ -3108,7 +3091,7 @@
> +                 sp->add_cont_backpatch(i) ||
> +                 sp->add_instr(i))
> +               MYSQL_YYABORT;
> +-            if (sp->restore_lex(YYTHD))
> ++            if (sp->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +           sp_proc_stmts1
> +@@ -3147,7 +3130,7 @@
> +           {
> +             LEX *lex= Lex;
> +             case_stmt_action_case(lex);
> +-            lex->sphead->reset_lex(YYTHD); /* For expr $3 */
> ++            lex->sphead->reset_lex(thd); /* For expr $3 */
> +           }
> +           expr
> +           {
> +@@ -3156,7 +3139,7 @@
> +               MYSQL_YYABORT;
> + 
> +             /* For expr $3 */
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +           simple_when_clause_list
> +@@ -3198,7 +3181,7 @@
> + simple_when_clause:
> +           WHEN_SYM
> +           {
> +-            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
> ++            Lex->sphead->reset_lex(thd); /* For expr $3 */
> +           }
> +           expr
> +           {
> +@@ -3208,7 +3191,7 @@
> +             if (case_stmt_action_when(lex, $3, true))
> +               MYSQL_YYABORT;
> +             /* For expr $3 */
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +           THEN_SYM
> +@@ -3223,7 +3206,7 @@
> + searched_when_clause:
> +           WHEN_SYM
> +           {
> +-            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
> ++            Lex->sphead->reset_lex(thd); /* For expr $3 */
> +           }
> +           expr
> +           {
> +@@ -3231,7 +3214,7 @@
> +             if (case_stmt_action_when(lex, $3, false))
> +               MYSQL_YYABORT;
> +             /* For expr $3 */
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +           THEN_SYM
> +@@ -3395,7 +3378,7 @@
> +               MYSQL_YYABORT;
> + 	  }
> +         | WHILE_SYM 
> +-          { Lex->sphead->reset_lex(YYTHD); }
> ++          { Lex->sphead->reset_lex(thd); }
> +           expr DO_SYM
> +           {
> +             LEX *lex= Lex;
> +@@ -3409,7 +3392,7 @@
> +                 sp->new_cont_backpatch(i) ||
> +                 sp->add_instr(i))
> +               MYSQL_YYABORT;
> +-            if (sp->restore_lex(YYTHD))
> ++            if (sp->restore_lex(thd))
> +               MYSQL_YYABORT;
> +           }
> +           sp_proc_stmts1 END WHILE_SYM
> +@@ -3424,7 +3407,7 @@
> +             lex->sphead->do_cont_backpatch();
> +           }
> +         | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM 
> +-          { Lex->sphead->reset_lex(YYTHD); }
> ++          { Lex->sphead->reset_lex(thd); }
> +           expr END REPEAT_SYM
> +           {
> +             LEX *lex= Lex;
> +@@ -3436,7 +3419,7 @@
> +             if (i == NULL ||
> +                 lex->sphead->add_instr(i))
> +               MYSQL_YYABORT;
> +-            if (lex->sphead->restore_lex(YYTHD))
> ++            if (lex->sphead->restore_lex(thd))
> +               MYSQL_YYABORT;
> +             /* We can shortcut the cont_backpatch here */
> +             i->m_cont_dest= ip+1;
> +@@ -3859,7 +3842,6 @@
> +           create3 {}
> +         | LIKE table_ident
> +           {
> +-            THD *thd= YYTHD;
> +             TABLE_LIST *src_table;
> +             LEX *lex= thd->lex;
> + 
> +@@ -3873,7 +3855,6 @@
> +           }
> +         | '(' LIKE table_ident ')'
> +           {
> +-            THD *thd= YYTHD;
> +             TABLE_LIST *src_table;
> +             LEX *lex= thd->lex;
> + 
> +@@ -4342,7 +4323,6 @@
> +           bit_expr
> +           {
> +             Item *part_expr= $1;
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Name_resolution_context *context= &lex->current_select->context;
> +             TABLE_LIST *save_list= context->table_list;
> +@@ -4364,7 +4344,7 @@
> +               my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
> +               MYSQL_YYABORT;
> +             }
> +-            if (part_expr->fix_fields(YYTHD, (Item**)0) ||
> ++            if (part_expr->fix_fields(thd, (Item**)0) ||
> +                 ((context->table_list= save_list), FALSE) ||
> +                 (!part_expr->const_item()) ||
> +                 (!lex->safe_to_cache_query))
> +@@ -4629,7 +4609,7 @@
> +         | TYPE_SYM opt_equal storage_engines
> +           {
> +             Lex->create_info.db_type= $3;
> +-            WARN_DEPRECATED(yythd, "6.0", "TYPE=storage_engine",
> ++            WARN_DEPRECATED(thd, "6.0", "TYPE=storage_engine",
> +                             "'ENGINE=storage_engine'");
> +             Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
> +           }
> +@@ -4791,19 +4771,19 @@
> + storage_engines:
> +           ident_or_text
> +           {
> +-            plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1);
> ++            plugin_ref plugin= ha_resolve_by_name(thd, &$1);
> + 
> +             if (plugin)
> +               $$= plugin_data(plugin, handlerton*);
> +             else
> +             {
> +-              if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
> ++              if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
> +               {
> +                 my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str);
> +                 MYSQL_YYABORT;
> +               }
> +               $$= 0;
> +-              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
> ++              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
> +                                   ER_UNKNOWN_STORAGE_ENGINE,
> +                                   ER(ER_UNKNOWN_STORAGE_ENGINE),
> +                                   $1.str);
> +@@ -4815,7 +4795,7 @@
> +           ident_or_text
> +           {
> +             plugin_ref plugin;
> +-            if ((plugin= ha_resolve_by_name(YYTHD, &$1)))
> ++            if ((plugin= ha_resolve_by_name(thd, &$1)))
> +               $$= plugin_data(plugin, handlerton*);
> +             else
> +             {
> +@@ -5043,7 +5023,7 @@
> +               {
> +                 char buff[sizeof("YEAR()") + MY_INT64_NUM_DECIMAL_DIGITS + 1];
> +                 my_snprintf(buff, sizeof(buff), "YEAR(%lu)", length);
> +-                push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_NOTE,
> ++                push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
> +                                     ER_WARN_DEPRECATED_SYNTAX,
> +                                     ER(ER_WARN_DEPRECATED_SYNTAX),
> +                                     buff, "YEAR(4)");
> +@@ -5057,7 +5037,7 @@
> +           { $$=MYSQL_TYPE_TIME; }
> +         | TIMESTAMP opt_field_length
> +           {
> +-            if (YYTHD->variables.sql_mode & MODE_MAXDB)
> ++            if (thd->variables.sql_mode & MODE_MAXDB)
> +               $$=MYSQL_TYPE_DATETIME;
> +             else
> +             {
> +@@ -5189,7 +5169,7 @@
> + 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
> +@@ -5263,7 +5243,7 @@
> +         | DEFAULT now_or_signed_literal { Lex->default_value=$2; }
> +         | ON UPDATE_SYM NOW_SYM optional_braces
> +           {
> +-            Item *item= new (YYTHD->mem_root) Item_func_now_local();
> ++            Item *item= new (thd->mem_root) Item_func_now_local();
> +             if (item == NULL)
> +               MYSQL_YYABORT;
> +             Lex->on_update_value= item;
> +@@ -5312,7 +5292,7 @@
> + now_or_signed_literal:
> +           NOW_SYM optional_braces
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_now_local();
> ++            $$= new (thd->mem_root) Item_func_now_local();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -5673,7 +5653,6 @@
> + alter:
> +           ALTER opt_ignore TABLE_SYM table_ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             lex->name.str= 0;
> +             lex->name.length= 0;
> +@@ -5799,7 +5778,7 @@
> +               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;
> + 
> +@@ -6192,7 +6171,6 @@
> +           {
> +             if (!$4)
> +             {
> +-              THD *thd= YYTHD;
> +               $4= thd->variables.collation_database;
> +             }
> +             $5= $5 ? $5 : $4;
> +@@ -6556,7 +6534,7 @@
> + 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, 
> +                                            Select->pop_index_hints()))
> +               MYSQL_YYABORT;
> +           }
> +@@ -6585,7 +6563,7 @@
> + 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,
> +                                            Select->pop_index_hints()))
> +               MYSQL_YYABORT;
> +           }
> +@@ -6593,7 +6571,7 @@
> + 
> + 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, 
> +                                         global_system_variables.old_mode ? 
> +                                         INDEX_HINT_MASK_JOIN : 
> +@@ -6813,7 +6791,6 @@
> +         | select_item
> +         | '*'
> +           {
> +-            THD *thd= YYTHD;
> +             Item *item= new (thd->mem_root)
> +                           Item_field(&thd->lex->current_select->context,
> +                                      NULL, NULL, "*");
> +@@ -6828,7 +6805,6 @@
> + select_item:
> +           remember_name select_item2 remember_end select_alias
> +           {
> +-            THD *thd= YYTHD;
> +             DBUG_ASSERT($1 < $3);
> + 
> +             if (add_item_to_list(thd, $2))
> +@@ -6929,7 +6905,7 @@
> +             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;
> +             }
> +@@ -6937,7 +6913,7 @@
> +         | expr XOR expr %prec XOR
> +           {
> +             /* XOR is a proprietary extension */
> +-            $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3);
> ++            $$ = new (thd->mem_root) Item_cond_xor($1, $3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -6979,50 +6955,50 @@
> +             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;
> +           }
> +@@ -7032,19 +7008,19 @@
> + 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;
> +           }
> +@@ -7066,13 +7042,12 @@
> + 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;
> +@@ -7082,7 +7057,7 @@
> +           }
> +         | 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;
> +           }
> +@@ -7090,13 +7065,13 @@
> +           { 
> +             $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;
> +           }
> +@@ -7104,7 +7079,7 @@
> +           {
> +             $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();
> +@@ -7112,14 +7087,14 @@
> +           }
> +         | 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();
> +@@ -7127,42 +7102,42 @@
> +           }
> +         | 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;
> +           }
> +@@ -7172,85 +7147,85 @@
> + 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;
> +           }
> +@@ -7299,7 +7274,6 @@
> +         | 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());
> +@@ -7315,7 +7289,7 @@
> +         | 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;
> +           }
> +@@ -7325,25 +7299,25 @@
> +           }
> +         | '-' 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;
> +           }
> +@@ -7352,20 +7326,20 @@
> +         | '(' 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;
> +           }
> +@@ -7374,7 +7348,7 @@
> +         | 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);
> +@@ -7382,7 +7356,7 @@
> +           }
> +         | 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;
> +@@ -7390,27 +7364,27 @@
> +         | 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;
> +           }
> +@@ -7423,14 +7397,14 @@
> +               my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str);
> +               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;
> +@@ -7438,7 +7412,7 @@
> +         | 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;
> +           }
> +@@ -7453,19 +7427,19 @@
> + 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();
> +@@ -7473,31 +7447,30 @@
> +           }
> +         | 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;
> +@@ -7512,7 +7485,6 @@
> +           }
> +         | 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);
> +@@ -7524,103 +7496,103 @@
> +           }
> +         | 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();
> +@@ -7628,7 +7600,7 @@
> +           }
> +         | YEAR_SYM '(' expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_year($3);
> ++            $$= new (thd->mem_root) Item_func_year($3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -7649,34 +7621,34 @@
> + 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 optional_braces
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_curtime_local();
> ++            $$= new (thd->mem_root) Item_func_curtime_local();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +           }
> +         | CURTIME '(' expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_curtime_local($3);
> ++            $$= new (thd->mem_root) Item_func_curtime_local($3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +@@ -7684,83 +7656,83 @@
> +         | 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;
> +           }
> +         | NOW_SYM optional_braces
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_now_local();
> ++            $$= new (thd->mem_root) Item_func_now_local();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +           }
> +         | NOW_SYM '(' expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_now_local($3);
> ++            $$= new (thd->mem_root) Item_func_now_local($3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +           }
> +         | 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;
> +           }
> +@@ -7775,9 +7747,9 @@
> +             */
> +             Lex->set_stmt_unsafe();
> +             if (global_system_variables.sysdate_is_now == 0)
> +-              $$= new (YYTHD->mem_root) Item_func_sysdate_local();
> ++              $$= new (thd->mem_root) Item_func_sysdate_local();
> +             else
> +-              $$= new (YYTHD->mem_root) Item_func_now_local();
> ++              $$= new (thd->mem_root) Item_func_now_local();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +@@ -7785,42 +7757,42 @@
> +         | SYSDATE '(' expr ')'
> +           {
> +             if (global_system_variables.sysdate_is_now == 0)
> +-              $$= new (YYTHD->mem_root) Item_func_sysdate_local($3);
> ++              $$= new (thd->mem_root) Item_func_sysdate_local($3);
> +             else
> +-              $$= new (YYTHD->mem_root) Item_func_now_local($3);
> ++              $$= new (thd->mem_root) Item_func_now_local($3);
> +             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 optional_braces
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_curtime_utc();
> ++            $$= new (thd->mem_root) Item_func_curtime_utc();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +           }
> +         | UTC_TIMESTAMP_SYM optional_braces
> +           {
> +-            $$= new (YYTHD->mem_root) Item_func_now_utc();
> ++            $$= new (thd->mem_root) Item_func_now_utc();
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             Lex->safe_to_cache_query=0;
> +@@ -7835,62 +7807,61 @@
> + 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;
> +           }
> +         | 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);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +         | PASSWORD '(' expr ')'
> +           {
> +-            THD *thd= YYTHD;
> +             Item* i1;
> +             if (thd->variables.old_passwords)
> +               i1= new (thd->mem_root) Item_func_old_password($3);
> +@@ -7902,31 +7873,30 @@
> +           }
> +         | 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;
> +           }
> +         | 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((char*) "0",
> +                                            thd->variables.default_week_format,
> +                                                    1);
> +@@ -7938,7 +7908,7 @@
> +           }
> +         | 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;
> +           }
> +@@ -7960,52 +7930,52 @@
> + geometry_function:
> +           CONTAINS_SYM '(' expr ',' expr ')'
> +           {
> +-            $$= GEOM_NEW(YYTHD,
> ++            $$= GEOM_NEW(thd,
> +                          Item_func_spatial_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));
> +@@ -8043,7 +8013,6 @@
> +           }
> +           opt_udf_expr_list ')'
> +           {
> +-            THD *thd= YYTHD;
> +             Create_func *builder;
> +             Item *item= NULL;
> + 
> +@@ -8097,7 +8066,6 @@
> +           }
> +         | ident '.' ident '(' opt_expr_list ')'
> +           {
> +-            THD *thd= YYTHD;
> +             Create_qfunc *builder;
> +             Item *item= NULL;
> + 
> +@@ -8161,7 +8129,7 @@
> + udf_expr_list:
> +           udf_expr
> +           {
> +-            $$= new (YYTHD->mem_root) List<Item>;
> ++            $$= new (thd->mem_root) List<Item>;
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->push_back($1);
> +@@ -8194,7 +8162,7 @@
> +                remember_name we may get quoted or escaped names.
> +             */
> +             else if ($2->type() != Item::FIELD_ITEM)
> +-              $2->set_name($1, (uint) ($3 - $1), YYTHD->charset());
> ++              $2->set_name($1, (uint) ($3 - $1), thd->charset());
> +             $$= $2;
> +           }
> +         ;
> +@@ -8202,46 +8170,46 @@
> + sum_expr:
> +           AVG_SYM '(' in_sum_expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_sum_avg($3);
> ++            $$= new (thd->mem_root) Item_sum_avg($3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +         | AVG_SYM '(' DISTINCT in_sum_expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_sum_avg_distinct($4);
> ++            $$= new (thd->mem_root) Item_sum_avg_distinct($4);
> +             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;
> +           }
> +@@ -8251,13 +8219,13 @@
> +           { Select->in_sum_expr--; }
> +           ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_sum_count_distinct(* $5);
> ++            $$= new (thd->mem_root) Item_sum_count_distinct(* $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;
> +           }
> +@@ -8268,55 +8236,55 @@
> +         */
> +         | 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);
> ++            $$= new (thd->mem_root) Item_sum_sum($3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +         | SUM_SYM '(' DISTINCT in_sum_expr ')'
> +           {
> +-            $$= new (YYTHD->mem_root) Item_sum_sum_distinct($4);
> ++            $$= new (thd->mem_root) Item_sum_sum_distinct($4);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -8328,7 +8296,7 @@
> +           {
> +             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)
> +@@ -8357,7 +8325,7 @@
> +           ident_or_text SET_VAR expr
> +           {
> +             Item_func_set_user_var *item;
> +-            $$= item= new (YYTHD->mem_root) Item_func_set_user_var($1, $3);
> ++            $$= item= new (thd->mem_root) Item_func_set_user_var($1, $3);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             LEX *lex= Lex;
> +@@ -8366,7 +8334,7 @@
> +           }
> +         | 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;
> +@@ -8380,7 +8348,7 @@
> +               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();
> +@@ -8395,7 +8363,7 @@
> + 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;
> +           }
> +@@ -8422,9 +8390,9 @@
> + 
> + 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:
> +@@ -8477,7 +8445,7 @@
> + expr_list:
> +           expr
> +           {
> +-            $$= new (YYTHD->mem_root) List<Item>;
> ++            $$= new (thd->mem_root) List<Item>;
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->push_back($1);
> +@@ -8497,7 +8465,7 @@
> + ident_list:
> +           simple_ident
> +           {
> +-            $$= new (YYTHD->mem_root) List<Item>;
> ++            $$= new (thd->mem_root) List<Item>;
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +             $$->push_back($1);
> +@@ -8595,7 +8563,7 @@
> +           {
> +             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;
> +           }
> +@@ -8610,7 +8578,7 @@
> +           {
> +             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;
> +           }
> +@@ -8640,7 +8608,7 @@
> +           {
> +             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;
> +           }
> +@@ -8676,7 +8644,7 @@
> +           {
> +             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;
> +           }
> +@@ -8724,7 +8692,7 @@
> +           }
> +           table_ident opt_table_alias opt_key_definition
> +           {
> +-            if (!($$= Select->add_table_to_list(YYTHD, $2, $3,
> ++            if (!($$= Select->add_table_to_list(thd, $2, $3,
> +                                                 Select->get_table_join_options(),
> +                                                 Lex->lock_option,
> +                                                 Select->pop_index_hints())))
> +@@ -8922,7 +8890,7 @@
> + 
> + opt_index_hints_list:
> +           /* empty */
> +-        | { Select->alloc_index_hints(YYTHD); } index_hints_list
> ++        | { Select->alloc_index_hints(thd); } index_hints_list
> +         ;
> + 
> + opt_key_definition:
> +@@ -8931,15 +8899,15 @@
> +         ;
> + 
> + 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:
> +@@ -8952,7 +8920,7 @@
> +           {
> +             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)
> +@@ -8961,7 +8929,7 @@
> +           }
> +         | 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)
> +@@ -9002,7 +8970,7 @@
> +                                     implementation without changing its
> +                                     resolution.
> +                                   */
> +-                                  WARN_DEPRECATED(yythd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
> ++                                  WARN_DEPRECATED(thd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
> +                                 }
> + 	;
> + 
> +@@ -9086,7 +9054,6 @@
> +           }
> +         | /* 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) :
> +@@ -9107,9 +9074,9 @@
> + 
> + 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:
> +@@ -9156,7 +9123,6 @@
> + 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;
> +@@ -9209,9 +9175,9 @@
> + 
> + 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:
> +@@ -9271,19 +9237,19 @@
> +         }
> +         | 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;
> +           }
> +@@ -9365,7 +9331,7 @@
> +             lex->proc_list.elements=0;
> +             lex->proc_list.first=0;
> +             lex->proc_list.next= &lex->proc_list.first;
> +-            Item_field *item= new (YYTHD->mem_root)
> ++            Item_field *item= new (thd->mem_root)
> +                                 Item_field(&lex->current_select->context,
> +                                            NULL, NULL, $2.str);
> +             if (item == NULL)
> +@@ -9390,8 +9356,7 @@
> + procedure_item:
> +           remember_name expr remember_end
> +           {
> +-            THD *thd= YYTHD;
> +-
> ++            
> +             if (add_proc_to_list(thd, $2))
> +               MYSQL_YYABORT;
> +             if (!$2->name)
> +@@ -9560,7 +9525,6 @@
> +           }
> +         | DROP FUNCTION_SYM if_exists ident '.' ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             sp_name *spname;
> +             if ($4.str && check_db_name(&$4))
> +@@ -9583,7 +9547,6 @@
> +           }
> +         | DROP FUNCTION_SYM if_exists ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             LEX_STRING db= {0, 0};
> +             sp_name *spname;
> +@@ -9664,7 +9627,7 @@
> + table_name:
> +           table_ident
> +           {
> +-            if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING))
> ++            if (!Select->add_table_to_list(thd, $1, NULL, TL_OPTION_UPDATING))
> +               MYSQL_YYABORT;
> +           }
> +         ;
> +@@ -9677,7 +9640,7 @@
> + 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,
> +                                            Lex->lock_option ))
> +               MYSQL_YYABORT;
> +@@ -9868,7 +9831,7 @@
> +           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;
> +           }
> +@@ -9922,7 +9885,7 @@
> + 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;
> +           }
> +         ;
> +@@ -9965,7 +9928,7 @@
> + single_multi:
> +           FROM table_ident
> +           {
> +-            if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING,
> ++            if (!Select->add_table_to_list(thd, $2, NULL, TL_OPTION_UPDATING,
> +                                            Lex->lock_option))
> +               MYSQL_YYABORT;
> +           }
> +@@ -9998,7 +9961,7 @@
> +             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,
> +                                            $3,
> +                                            TL_OPTION_UPDATING | TL_OPTION_ALIAS,
> +@@ -10007,10 +9970,10 @@
> +           }
> +         | ident '.' ident opt_wild opt_table_alias
> +           {
> +-            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,
> +                                            $5, 
> +                                            TL_OPTION_UPDATING | TL_OPTION_ALIAS,
> +@@ -10130,7 +10093,7 @@
> +            {
> +              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
> +@@ -10138,7 +10101,7 @@
> +              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
> +@@ -10146,7 +10109,7 @@
> +              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
> +@@ -10154,7 +10117,7 @@
> +              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
> +@@ -10162,7 +10125,7 @@
> +              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
> +@@ -10170,22 +10133,22 @@
> +             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;
> +           }
> +         | opt_full PLUGIN_SYM
> +           {
> +             LEX *lex= Lex;
> +-            WARN_DEPRECATED(yythd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
> ++            WARN_DEPRECATED(thd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
> +             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;
> +           }
> +         | 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
> +@@ -10198,7 +10161,7 @@
> +             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;
> +           }
> +         | NEW_SYM MASTER_SYM FOR_SYM SLAVE
> +@@ -10233,7 +10196,7 @@
> +             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;
> +           }
> +         | COLUMN_SYM TYPES_SYM
> +@@ -10245,15 +10208,15 @@
> +           {
> +             LEX *lex=Lex;
> +             lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES;
> +-            WARN_DEPRECATED(yythd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
> +-            if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES))
> ++            WARN_DEPRECATED(thd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
> ++            if (prepare_schema_table(thd, lex, 0, SCH_ENGINES))
> +               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;
> +           }
> +         | AUTHORS_SYM
> +@@ -10285,7 +10248,7 @@
> +           { 
> +             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
> +@@ -10293,7 +10256,7 @@
> +             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;
> +           }
> +         | INNOBASE_SYM STATUS_SYM
> +@@ -10301,24 +10264,24 @@
> +             LEX *lex= Lex;
> +             lex->sql_command = SQLCOM_SHOW_ENGINE_STATUS;
> +             if (!(lex->create_info.db_type=
> +-                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
> ++                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
> +             {
> +               my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
> +               MYSQL_YYABORT;
> +             }
> +-            WARN_DEPRECATED(yythd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
> ++            WARN_DEPRECATED(thd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
> +           }
> +         | MUTEX_SYM STATUS_SYM
> +           {
> +             LEX *lex= Lex;
> +             lex->sql_command = SQLCOM_SHOW_ENGINE_MUTEX;
> +             if (!(lex->create_info.db_type=
> +-                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
> ++                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
> +             {
> +               my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
> +               MYSQL_YYABORT;
> +             }
> +-            WARN_DEPRECATED(yythd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
> ++            WARN_DEPRECATED(thd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
> +           }
> +         | opt_full PROCESSLIST_SYM
> +           { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;}
> +@@ -10327,21 +10290,21 @@
> +             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
> +@@ -10371,7 +10334,7 @@
> +           {
> +             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;
> +@@ -10380,7 +10343,7 @@
> +           {
> +             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;
> +           }
> +@@ -10416,14 +10379,14 @@
> +           {
> +             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 CODE_SYM sp_name
> +@@ -10501,7 +10464,7 @@
> +           /* 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;
> +@@ -10525,7 +10488,7 @@
> +             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 {}
> +@@ -10554,7 +10517,7 @@
> +         | 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)
> +@@ -10697,7 +10660,6 @@
> + load:
> +           LOAD DATA_SYM
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> + 
> +             if (lex->sphead)
> +@@ -10711,7 +10673,7 @@
> +         | LOAD TABLE_SYM table_ident FROM MASTER_SYM
> +           {
> +             LEX *lex=Lex;
> +-            WARN_DEPRECATED(yythd, "6.0", "LOAD TABLE FROM MASTER",
> ++            WARN_DEPRECATED(thd, "6.0", "LOAD TABLE FROM MASTER",
> +                             "MySQL Administrator (mysqldump, mysql)");
> +             if (lex->sphead)
> +             {
> +@@ -10719,7 +10681,7 @@
> +               MYSQL_YYABORT;
> +             }
> +             lex->sql_command = SQLCOM_LOAD_MASTER_TABLE;
> +-            if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING))
> ++            if (!Select->add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING))
> +               MYSQL_YYABORT;
> +           }
> +         ;
> +@@ -10739,7 +10701,7 @@
> +           opt_duplicate INTO TABLE_SYM table_ident
> +           {
> +             LEX *lex=Lex;
> +-            if (!Select->add_table_to_list(YYTHD, $9, NULL, TL_OPTION_UPDATING,
> ++            if (!Select->add_table_to_list(thd, $9, NULL, TL_OPTION_UPDATING,
> +                                            lex->lock_option))
> +               MYSQL_YYABORT;
> +             lex->field_list.empty();
> +@@ -10754,7 +10716,7 @@
> +         | FROM MASTER_SYM
> +           {
> +             Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
> +-            WARN_DEPRECATED(yythd, "6.0", "LOAD DATA FROM MASTER",
> ++            WARN_DEPRECATED(thd, "6.0", "LOAD DATA FROM MASTER",
> +                             "mysqldump or future "
> +                             "BACKUP/RESTORE DATABASE facility");
> +           }
> +@@ -10872,7 +10834,7 @@
> +           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;
> +           }
> +@@ -10889,7 +10851,6 @@
> +           TEXT_STRING
> +           {
> +             LEX_STRING tmp;
> +-            THD *thd= YYTHD;
> +             CHARSET_INFO *cs_con= thd->variables.collation_connection;
> +             CHARSET_INFO *cs_cli= thd->variables.character_set_client;
> +             uint repertoire= thd->lex->text_string_is_7bit &&
> +@@ -10915,7 +10876,7 @@
> +             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);
> +@@ -10924,7 +10885,7 @@
> +           }
> +         | 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;
> +@@ -10943,7 +10904,7 @@
> +                  If the string has been pure ASCII so far,
> +                  check the new part.
> +               */
> +-              CHARSET_INFO *cs= YYTHD->variables.collation_connection;
> ++              CHARSET_INFO *cs= thd->variables.collation_connection;
> +               item->collation.repertoire|= my_string_repertoire(cs,
> +                                                                 $2.str,
> +                                                                 $2.length);
> +@@ -10954,15 +10915,15 @@
> + 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;
> +             /*
> +@@ -10974,7 +10935,7 @@
> +           }
> +         | 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;
> +             /*
> +@@ -10989,7 +10950,6 @@
> + param_marker:
> +           PARAM_MARKER
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> +             Item_param *item;
> +@@ -11022,38 +10982,38 @@
> +         | NUM_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((char*) "FALSE",0,1);
> ++            $$= new (thd->mem_root) Item_int((char*) "FALSE",0,1);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +         | TRUE_SYM
> +           {
> +-            $$= new (YYTHD->mem_root) Item_int((char*) "TRUE",1,1);
> ++            $$= new (thd->mem_root) Item_int((char*) "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;
> +             /*
> +@@ -11064,7 +11024,7 @@
> +             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 will be set in select_item */
> +                                     str ? str->ptr() : "",
> +                                     str ? str->length() : 0,
> +@@ -11082,7 +11042,7 @@
> +           }
> +         | 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;
> +             /*
> +@@ -11093,7 +11053,7 @@
> +             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 will be set in select_item */
> +                                     str ? str->ptr() : "",
> +                                     str ? str->length() : 0,
> +@@ -11117,7 +11077,7 @@
> +           NUM
> +           {
> +             int error;
> +-            $$= new (YYTHD->mem_root)
> ++            $$= new (thd->mem_root)
> +                   Item_int($1.str,
> +                            (longlong) my_strtoll10($1.str, NULL, &error),
> +                            $1.length);
> +@@ -11127,7 +11087,7 @@
> +         | LONG_NUM
> +           {
> +             int error;
> +-            $$= new (YYTHD->mem_root)
> ++            $$= new (thd->mem_root)
> +                   Item_int($1.str,
> +                            (longlong) my_strtoll10($1.str, NULL, &error),
> +                            $1.length);
> +@@ -11136,23 +11096,23 @@
> +           }
> +         | 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;
> +             }
> +@@ -11172,7 +11132,7 @@
> +           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;
> +@@ -11180,7 +11140,6 @@
> +           }
> +         | ident '.' ident '.' '*'
> +           {
> +-            THD *thd= YYTHD;
> +             SELECT_LEX *sel= Select;
> +             const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
> +                                   NullS : $1.str;
> +@@ -11200,7 +11159,6 @@
> + simple_ident:
> +           ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> +             sp_variable_t *spv;
> +@@ -11251,7 +11209,6 @@
> + simple_ident_nospvar:
> +           ident
> +           {
> +-            THD *thd= YYTHD;
> +             SELECT_LEX *sel=Select;
> +             if ((sel->parsing_place != IN_HAVING) ||
> +                 (sel->get_in_sum_expr() > 0))
> +@@ -11273,7 +11230,6 @@
> + simple_ident_q:
> +           ident '.' ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> + 
> +             /*
> +@@ -11352,7 +11308,6 @@
> +           }
> +         | '.' ident '.' ident
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             SELECT_LEX *sel= lex->current_select;
> +             if (sel->no_table_names_allowed)
> +@@ -11377,7 +11332,6 @@
> +           }
> +         | 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 ?
> +@@ -11445,7 +11399,7 @@
> +           }
> +         | ident '.' ident
> +           {
> +-            $$= new Table_ident(YYTHD, $1,$3,0);
> ++            $$= new Table_ident(thd, $1,$3,0);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -11467,7 +11421,7 @@
> +           }
> +         | ident '.' ident opt_wild
> +           {
> +-            $$= new Table_ident(YYTHD, $1,$3,0);
> ++            $$= new Table_ident(thd, $1,$3,0);
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +@@ -11477,7 +11431,7 @@
> +           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;
> +           }
> +@@ -11487,8 +11441,7 @@
> +           IDENT { $$= $1; }
> +         | IDENT_QUOTED
> +           {
> +-            THD *thd= YYTHD;
> +-
> ++            
> +             if (thd->charset_is_system_charset)
> +             {
> +               CHARSET_INFO *cs= system_charset_info;
> +@@ -11516,8 +11469,6 @@
> + TEXT_STRING_sys:
> +           TEXT_STRING
> +           {
> +-            THD *thd= YYTHD;
> +-
> +             if (thd->charset_is_system_charset)
> +               $$= $1;
> +             else
> +@@ -11532,8 +11483,6 @@
> + TEXT_STRING_literal:
> +           TEXT_STRING
> +           {
> +-            THD *thd= YYTHD;
> +-
> +             if (thd->charset_is_collation_connection)
> +               $$= $1;
> +             else
> +@@ -11548,8 +11497,6 @@
> + TEXT_STRING_filesystem:
> +           TEXT_STRING
> +           {
> +-            THD *thd= YYTHD;
> +-
> +             if (thd->charset_is_character_set_filesystem)
> +               $$= $1;
> +             else
> +@@ -11566,7 +11513,6 @@
> +           IDENT_sys    { $$=$1; }
> +         | keyword
> +           {
> +-            THD *thd= YYTHD;
> +             $$.str= thd->strmake($1.str, $1.length);
> +             if ($$.str == NULL)
> +               MYSQL_YYABORT;
> +@@ -11578,7 +11524,6 @@
> +           IDENT_sys    { $$=$1; }
> +         | keyword_sp
> +           {
> +-            THD *thd= YYTHD;
> +             $$.str= thd->strmake($1.str, $1.length);
> +             if ($$.str == NULL)
> +               MYSQL_YYABORT;
> +@@ -11595,7 +11540,6 @@
> + user:
> +           ident_or_text
> +           {
> +-            THD *thd= YYTHD;
> +             if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
> +               MYSQL_YYABORT;
> +             $$->user = $1;
> +@@ -11609,7 +11553,6 @@
> +           }
> +         | ident_or_text '@' ident_or_text
> +           {
> +-            THD *thd= YYTHD;
> +             if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
> +               MYSQL_YYABORT;
> +             $$->user = $1; $$->host=$3;
> +@@ -11628,7 +11571,7 @@
> +           }
> +         | 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 
> +@@ -11991,7 +11934,6 @@
> + 
> + option_type_value:
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> + 
> +@@ -12022,7 +11964,6 @@
> +           }
> +           ext_option_value
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> + 
> +@@ -12105,7 +12046,6 @@
> + sys_option_value:
> +           option_type internal_variable_name equal set_expr_or_default
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= Lex;
> +             LEX_STRING *name= &$2.base_name;
> + 
> +@@ -12117,7 +12057,7 @@
> +                 my_parse_error(ER(ER_SYNTAX_ERROR));
> +                 MYSQL_YYABORT;
> +               }
> +-              if (set_trigger_new_row(YYTHD, name, $4))
> ++              if (set_trigger_new_row(thd, name, $4))
> +                 MYSQL_YYABORT;
> +             }
> +             else if ($2.var)
> +@@ -12147,7 +12087,6 @@
> +           }
> +         | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex=Lex;
> +             lex->option_type= $1;
> +             Item *item= new (thd->mem_root) Item_int((int32) $5);
> +@@ -12167,7 +12106,7 @@
> +           '@' ident_or_text equal expr
> +           {
> +             Item_func_set_user_var *item;
> +-            item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4);
> ++            item= new (thd->mem_root) Item_func_set_user_var($2, $4);
> +             if (item == NULL)
> +               MYSQL_YYABORT;
> +             set_var_user *var= new set_var_user(item);
> +@@ -12177,7 +12116,6 @@
> +           }
> +         | '@' '@' 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)
> +@@ -12190,7 +12128,6 @@
> +           }
> +         | charset old_or_new_charset_name_or_default
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             CHARSET_INFO *cs2;
> +             cs2= $2 ? $2: global_system_variables.character_set_client;
> +@@ -12238,7 +12175,6 @@
> +           }
> +         | PASSWORD equal text_or_password
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             LEX_USER *user;
> +             sp_pcontext *spc= lex->spcont;
> +@@ -12278,7 +12214,6 @@
> + internal_variable_name:
> +           ident
> +           {
> +-            THD *thd= YYTHD;
> +             sp_pcontext *spc= thd->lex->spcont;
> +             sp_variable_t *spv;
> + 
> +@@ -12337,7 +12272,7 @@
> +             }
> +             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())
> +@@ -12348,7 +12283,7 @@
> +           }
> +         | 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())
> +@@ -12370,16 +12305,16 @@
> +           TEXT_STRING { $$=$1.str;}
> +         | PASSWORD '(' TEXT_STRING ')'
> +           {
> +-            $$= $3.length ? YYTHD->variables.old_passwords ?
> +-              Item_func_old_password::alloc(YYTHD, $3.str, $3.length) :
> +-              Item_func_password::alloc(YYTHD, $3.str, $3.length) :
> ++            $$= $3.length ? thd->variables.old_passwords ?
> ++              Item_func_old_password::alloc(thd, $3.str, $3.length) :
> ++              Item_func_password::alloc(thd, $3.str, $3.length) :
> +               $3.str;
> +             if ($$ == NULL)
> +               MYSQL_YYABORT;
> +           }
> +         | OLD_PASSWORD '(' TEXT_STRING ')'
> +           {
> +-            $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str,
> ++            $$= $3.length ? Item_func_old_password::alloc(thd, $3.str,
> +                                                           $3.length) :
> +               $3.str;
> +             if ($$ == NULL)
> +@@ -12393,19 +12328,19 @@
> +         | 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;
> +           }
> +@@ -12443,7 +12378,7 @@
> +           table_ident opt_table_alias lock_option
> +           {
> +             thr_lock_type lock_type= (thr_lock_type) $3;
> +-            if (!Select->add_table_to_list(YYTHD, $1, $2, 0, lock_type))
> ++            if (!Select->add_table_to_list(thd, $1, $2, 0, lock_type))
> +               MYSQL_YYABORT;
> +             /* If table is to be write locked, protect from a impending GRL. */
> +             if (lock_type >= TL_WRITE_ALLOW_WRITE)
> +@@ -12514,7 +12449,7 @@
> +             lex->expr_allows_subselect= FALSE;
> +             lex->sql_command = SQLCOM_HA_READ;
> +             lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */
> +-            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;
> +@@ -12836,10 +12771,10 @@
> +             $$=$1; $1->password=$4;
> +             if ($4.length)
> +             {
> +-              if (YYTHD->variables.old_passwords)
> ++              if (thd->variables.old_passwords)
> +               {
> +                 char *buff= 
> +-                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
> ++                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
> +                 if (buff == NULL)
> +                   MYSQL_YYABORT;
> +                 my_make_scrambled_password_323(buff, $4.str, $4.length);
> +@@ -12849,7 +12784,7 @@
> +               else
> +               {
> +                 char *buff= 
> +-                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
> ++                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
> +                 if (buff == NULL)
> +                   MYSQL_YYABORT;
> +                 my_make_scrambled_password(buff, $4.str, $4.length);
> +@@ -12881,7 +12816,7 @@
> + 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);
> +@@ -12981,14 +12916,14 @@
> + 
> + opt_chain:
> +           /* empty */
> +-          { $$= (YYTHD->variables.completion_type == 1); }
> ++          { $$= (thd->variables.completion_type == 1); }
> +         | AND_SYM NO_SYM CHAIN_SYM { $$=0; }
> +         | AND_SYM CHAIN_SYM        { $$=1; }
> +         ;
> + 
> + opt_release:
> +           /* empty */
> +-          { $$= (YYTHD->variables.completion_type == 2); }
> ++          { $$= (thd->variables.completion_type == 2); }
> +         | RELEASE_SYM        { $$=1; }
> +         | NO_SYM RELEASE_SYM { $$=0; }
> + ;
> +@@ -13102,7 +13037,6 @@
> + 
> + 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;
> +@@ -13118,7 +13052,6 @@
> +           }
> +           order_or_limit
> +           {
> +-            THD *thd= YYTHD;
> +             thd->lex->current_select->no_table_names_allowed= 0;
> +             thd->where= "";
> +           }
> +@@ -13255,14 +13188,14 @@
> +               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);
> +           }
> +         ;
> + 
> +@@ -13307,7 +13240,6 @@
> + 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 */
> +@@ -13347,7 +13279,6 @@
> +           }
> +           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);
> +@@ -13403,7 +13334,6 @@
> +           EACH_SYM
> +           ROW_SYM
> +           { /* $15 */
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> +             sp_head *sp;
> +@@ -13437,8 +13367,8 @@
> +             sp_head *sp= lex->sphead;
> + 
> +             lex->sql_command= SQLCOM_CREATE_TRIGGER;
> +-            sp->set_stmt_end(YYTHD);
> +-            sp->restore_thd_mem_root(YYTHD);
> ++            sp->set_stmt_end(thd);
> ++            sp->restore_thd_mem_root(thd);
> + 
> +             if (sp->is_not_allowed_in_function("trigger"))
> +               MYSQL_YYABORT;
> +@@ -13448,7 +13378,7 @@
> +               sp_proc_stmt alternatives are not saving/restoring LEX, so
> +               lex->query_tables can be wiped out.
> +             */
> +-            if (!lex->select_lex.add_table_to_list(YYTHD, $9,
> ++            if (!lex->select_lex.add_table_to_list(thd, $9,
> +                                                    (LEX_STRING*) 0,
> +                                                    TL_OPTION_UPDATING,
> +                                                    TL_IGNORE))
> +@@ -13466,7 +13396,6 @@
> +           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))
> +             {
> +@@ -13484,7 +13413,6 @@
> +         | 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))
> +             {
> +@@ -13507,7 +13435,6 @@
> +           sp_name /* $3 */
> +           '(' /* $4 */
> +           { /* $5 */
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> +             sp_head *sp;
> +@@ -13565,7 +13492,7 @@
> +               MYSQL_YYABORT;
> +             }
> + 
> +-            if (sp->fill_field_definition(YYTHD, lex,
> ++            if (sp->fill_field_definition(thd, lex,
> +                                           (enum enum_field_types) $11,
> +                                           &sp->m_return_field_def))
> +               MYSQL_YYABORT;
> +@@ -13574,7 +13501,6 @@
> +           }
> +           sp_c_chistics /* $13 */
> +           { /* $14 */
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             Lex_input_stream *lip= YYLIP;
> + 
> +@@ -13583,7 +13509,6 @@
> +           }
> +           sp_proc_stmt /* $15 */
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> +             sp_head *sp= lex->sphead;
> + 
> +@@ -13654,10 +13579,10 @@
> +             sp= new sp_head();
> +             if (sp == NULL)
> +               MYSQL_YYABORT;
> +-            sp->reset_thd_mem_root(YYTHD);
> ++            sp->reset_thd_mem_root(thd);
> +             sp->init(lex);
> +             sp->m_type= TYPE_ENUM_PROCEDURE;
> +-            sp->init_sp_name(YYTHD, $3);
> ++            sp->init_sp_name(thd, $3);
> + 
> +             lex->sphead= sp;
> +           }
> +@@ -13672,7 +13597,6 @@
> +           sp_pdparam_list
> +           ')'
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> + 
> +             lex->sphead->m_param_end= YYLIP->get_cpp_tok_start();
> +@@ -13680,7 +13604,6 @@
> +           }
> +           sp_c_chistics
> +           {
> +-            THD *thd= YYTHD;
> +             LEX *lex= thd->lex;
> + 
> +             lex->sphead->m_chistics= &lex->sp_chistics;
> +@@ -13691,9 +13614,9 @@
> +             LEX *lex= Lex;
> +             sp_head *sp= lex->sphead;
> + 
> +-            sp->set_stmt_end(YYTHD);
> ++            sp->set_stmt_end(thd);
> +             lex->sql_command= SQLCOM_CREATE_PROCEDURE;
> +-            sp->restore_thd_mem_root(YYTHD);
> ++            sp->restore_thd_mem_root(thd);
> +           }
> +         ;
> + 
> +@@ -13730,21 +13653,21 @@
> +           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/package/mysql/mysql.mk b/package/mysql/mysql.mk
> index 9b22c2d..27afc9f 100644
> --- a/package/mysql/mysql.mk
> +++ b/package/mysql/mysql.mk
> @@ -25,7 +25,6 @@ MYSQL_CONF_ENV = \
>  
>  MYSQL_CONF_OPT = \
>  	--without-ndb-binlog \
> -	--without-server \
>  	--without-docs \
>  	--without-man \
>  	--without-libedit \
> @@ -34,6 +33,50 @@ MYSQL_CONF_OPT = \
>  	--enable-thread-safe-client \
>  	$(ENABLE_DEBUG)
>  
> +ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
> +MYSQL_DEPENDENCIES += host-mysql host-bison
> +HOST_MYSQL_DEPENDENCIES =
> +
> +HOST_MYSQL_CONF_OPT = \
> +	--with-embedded-server
> +
> +MYSQL_CONF_OPT += \
> +	--disable-dependency-tracking \
> +	--with-atomic-ops=up \
> +	--with-embedded-server \
> +	--without-query-cache \
> +	--without-plugin-partition \
> +	--without-plugin-daemon_example \
> +	--without-plugin-ftexample \
> +	--without-plugin-archive \
> +	--without-plugin-blackhole \
> +	--without-plugin-example \
> +	--without-plugin-federated \
> +	--without-plugin-ibmdb2i \
> +	--without-plugin-innobase \
> +	--without-plugin-innodb_plugin \
> +	--without-plugin-ndbcluster
> +
> +define HOST_MYSQL_BUILD_CMDS
> +	$(MAKE) -C $(@D)/include my_config.h
> +	$(MAKE) -C $(@D)/mysys libmysys.a
> +	$(MAKE) -C $(@D)/strings libmystrings.a
> +	$(MAKE) -C $(@D)/vio libvio.a
> +	$(MAKE) -C $(@D)/dbug libdbug.a
> +	$(MAKE) -C $(@D)/regex libregex.a
> +	$(MAKE) -C $(@D)/sql gen_lex_hash
> +endef
> +
> +define HOST_MYSQL_INSTALL_CMDS
> +	$(INSTALL) -m 0755  $(@D)/sql/gen_lex_hash  $(HOST_DIR)/usr/bin/
> +endef
> +
> +else
> +MYSQL_CONF_OPT += \
> +	--without-server
> +endif
> +
> +
>  define MYSQL_REMOVE_TEST_PROGS
>  	rm -rf $(TARGET_DIR)/usr/mysql-test $(TARGET_DIR)/usr/sql-bench
>  endef
> @@ -46,3 +89,4 @@ MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_REMOVE_TEST_PROGS
>  MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_ADD_MYSQL_LIB_PATH
>  
>  $(eval $(autotools-package))
> +$(eval $(host-autotools-package))
> -- 
> 1.7.9.5
> 
> _______________________________________________
> buildroot mailing list
> buildroot at busybox.net
> http://lists.busybox.net/mailman/listinfo/buildroot

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 2/2] package/mysql: fix debugging options
  2014-02-12 22:39 ` [Buildroot] [PATCH 2/2] package/mysql: fix debugging options Marcelo Gutiérrez
@ 2014-02-23 19:12   ` Yann E. MORIN
  0 siblings, 0 replies; 11+ messages in thread
From: Yann E. MORIN @ 2014-02-23 19:12 UTC (permalink / raw)
  To: buildroot

Marcello, All,

On 2014-02-12 22:39 +0000, Marcelo Guti?rrez spake thusly:
> From: Marcelo Gutierrez <kuyurix@gmail.com>
> 
> The usual --{en,dis}able-debug passed by the infrastructure are not
> recognised by mysql's ./configure, as it uses unusual options.
> 
> Also, debugging is only meaningfull to the server, not the client.
> 
> Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
> [yann.morin.1998 at free.fr: actually add the options, move in server if-block]
> Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
> Cc: Arnout Vandecappelle <arnout@mind.be>

Obviously, this already has my SoB-line.

So this is just a reminder for Peter. ;-)

Regards,
Yann E. MORIN.

> ---
>  package/mysql/mysql.mk |   11 +++++++++--
>  1 file changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/package/mysql/mysql.mk b/package/mysql/mysql.mk
> index 27afc9f..95b30b7 100644
> --- a/package/mysql/mysql.mk
> +++ b/package/mysql/mysql.mk
> @@ -30,8 +30,7 @@ MYSQL_CONF_OPT = \
>  	--without-libedit \
>  	--without-readline \
>  	--with-low-memory \
> -	--enable-thread-safe-client \
> -	$(ENABLE_DEBUG)
> +	--enable-thread-safe-client
>  
>  ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
>  MYSQL_DEPENDENCIES += host-mysql host-bison
> @@ -57,6 +56,14 @@ MYSQL_CONF_OPT += \
>  	--without-plugin-innodb_plugin \
>  	--without-plugin-ndbcluster
>  
> +# Debugging is only available for the server, so no need for
> +# this if-block outside of the server if-block
> +ifeq ($(BR2_ENABLE_DEBUG),y)
> +MYSQL_CONF_OPT += --with-debug=full
> +else
> +MYSQL_CONF_OPT += --without-debug
> +endif
> +
>  define HOST_MYSQL_BUILD_CMDS
>  	$(MAKE) -C $(@D)/include my_config.h
>  	$(MAKE) -C $(@D)/mysys libmysys.a
> -- 
> 1.7.9.5
> 

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-02-12 22:39 [Buildroot] [PATCH 1/2] mysql: add option to build the server Marcelo Gutiérrez
  2014-02-12 22:39 ` [Buildroot] [PATCH 2/2] package/mysql: fix debugging options Marcelo Gutiérrez
  2014-02-23 19:10 ` [Buildroot] [PATCH 1/2] mysql: add option to build the server Yann E. MORIN
@ 2014-02-23 20:15 ` Peter Korsgaard
  2014-02-24 19:38   ` Marcelo Gutierrez
  2014-03-03 22:35 ` Thomas Petazzoni
  3 siblings, 1 reply; 11+ messages in thread
From: Peter Korsgaard @ 2014-02-23 20:15 UTC (permalink / raw)
  To: buildroot

>>>>> "Marcelo" == Marcelo Guti?rrez <kuyurix@gmail.com> writes:

 > From: Marcelo Gutierrez <kuyurix@gmail.com>
 > Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>

Thanks, see below for a few comments.


 > diff --git a/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
 > new file mode 100644
 > index 0000000..6fef0a9
 > --- /dev/null
 > +++ b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
 > @@ -0,0 +1,15 @@
 > +misc.m4: ac_cv_c_stack_direction is unset.
 > +
 > +Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>

Ok, please don't forget to send upstream.


 > +++ b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
 > @@ -0,0 +1,32 @@
 > +Makefile: fix cross-compiling the server
 > +
 > +MySQL Makefile believes it can run code it just compiled, to
 > +generate a header. This does not work for cross-compilation.
 > +
 > +Instead, use a pre-installed host-version of the required tool.
 > +
 > +Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>

Like this it cannot go upstream. Would upstream be interested in a patch
doing it right (E.G. using CC_FOR_BUILD)?


 > diff --git a/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
 > new file mode 100644
 > index 0000000..918fe24
 > --- /dev/null
 > +++ b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
 > @@ -0,0 +1,3310 @@
 > +fix the yacc code in mysql

Fix in what way?


 > +++ b/package/mysql/mysql.mk
 > @@ -25,7 +25,6 @@ MYSQL_CONF_ENV = \
 
 >  MYSQL_CONF_OPT = \
 >  	--without-ndb-binlog \
 > -	--without-server \
 >  	--without-docs \
 >  	--without-man \
 >  	--without-libedit \
 > @@ -34,6 +33,50 @@ MYSQL_CONF_OPT = \
 >  	--enable-thread-safe-client \
 >  	$(ENABLE_DEBUG)
 
 > +ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
 > +MYSQL_DEPENDENCIES += host-mysql host-bison
 > +HOST_MYSQL_DEPENDENCIES =
 > +
 > +HOST_MYSQL_CONF_OPT = \
 > +	--with-embedded-server

It is imho cleaner to unconditionally define the host mysql variables,
so the host-autotools-package macro does the right thing.

-- 
Bye, Peter Korsgaard

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-02-23 20:15 ` Peter Korsgaard
@ 2014-02-24 19:38   ` Marcelo Gutierrez
  0 siblings, 0 replies; 11+ messages in thread
From: Marcelo Gutierrez @ 2014-02-24 19:38 UTC (permalink / raw)
  To: buildroot

Hi Peter, all,


>  > diff --git a/package/mysql/mysql-0005-
> bison_3_breaks_mysql_server_build.patch
> b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
>  > new file mode 100644
>  > index 0000000..918fe24
>  > --- /dev/null
>  > +++ b/package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch
>  > @@ -0,0 +1,3310 @@
>  > +fix the yacc code in mysql
>
> Fix in what way?


Build fails due to changes in the newest Bison, so I made porting to Bison
3.x to fix this MySQL bug:
http://bugs.mysql.com/bug.php?id=71250

Regards,
Marcelo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20140224/7a48582a/attachment.html>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-02-12 22:39 [Buildroot] [PATCH 1/2] mysql: add option to build the server Marcelo Gutiérrez
                   ` (2 preceding siblings ...)
  2014-02-23 20:15 ` Peter Korsgaard
@ 2014-03-03 22:35 ` Thomas Petazzoni
  2014-03-04  2:39   ` Marcelo Gutierrez
  3 siblings, 1 reply; 11+ messages in thread
From: Thomas Petazzoni @ 2014-03-03 22:35 UTC (permalink / raw)
  To: buildroot

Dear Marcelo Guti?rrez,

On Wed, 12 Feb 2014 22:39:33 +0000, Marcelo Guti?rrez wrote:
> From: Marcelo Gutierrez <kuyurix@gmail.com>
> 
> 
> Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
> ---
>  package/mysql/Config.in                            |    9 +
>  .../mysql-0003-ac_stack_direction-is-unset.patch   |   15 +
>  .../mysql-0004-Fix-gen_lex_hash-execution.patch    |   32 +
>  ...ql-0005-bison_3_breaks_mysql_server_build.patch | 3310 ++++++++++++++++++++
>  package/mysql/mysql.mk                             |   46 +-
>  5 files changed, 3411 insertions(+), 1 deletion(-)
>  create mode 100644 package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
>  create mode 100644 package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
>  create mode 100644 package/mysql/mysql-0005-bison_3_breaks_mysql_server_build.patch

I've applied this, but:

 1/ The package lacks an init script to start the MySQL server
    automatically.

 2/ When mysqld_safe is started automatically, it looks for stuff
    in /usr/var that doesn't exist:

700101 00:00:22 mysqld_safe Starting mysqld daemon with databases from /usr/var
/usr/bin/mysqld_safe: line 595: can't create /usr/var/buildroot.err: nonexistent directory
/usr/bin/mysqld_safe: eval: line 1: can't create /usr/var/buildroot.err: nonexistent directory

 3/ Peter made some comments that have not been addressed. Since the
    patch was large, I thought it would be easier to have it merged
    first, and then do incremental changes.

Could you work on those changes, and submit the corresponding patches?

Thanks,

Thomas
-- 
Thomas Petazzoni, CTO, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-03-03 22:35 ` Thomas Petazzoni
@ 2014-03-04  2:39   ` Marcelo Gutierrez
  2014-03-04  5:51     ` Baruch Siach
  0 siblings, 1 reply; 11+ messages in thread
From: Marcelo Gutierrez @ 2014-03-04  2:39 UTC (permalink / raw)
  To: buildroot

Hi Thomas, all



I've applied this, but:
>
>  1/ The package lacks an init script to start the MySQL server
>     automatically.
>
>  2/ When mysqld_safe is started automatically, it looks for stuff
>     in /usr/var that doesn't exist:
>
> 700101 00:00:22 mysqld_safe Starting mysqld daemon with databases from
> /usr/var
> /usr/bin/mysqld_safe: line 595: can't create /usr/var/buildroot.err:
> nonexistent directory
> /usr/bin/mysqld_safe: eval: line 1: can't create /usr/var/buildroot.err:
> nonexistent directory
>

I can fix that but we'll need to add a mysql user and I have no idea how do
it

Regard,
Marcelo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20140303/fe014a7e/attachment.html>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-03-04  2:39   ` Marcelo Gutierrez
@ 2014-03-04  5:51     ` Baruch Siach
  2014-03-04 17:53       ` Marcelo Gutierrez
  0 siblings, 1 reply; 11+ messages in thread
From: Baruch Siach @ 2014-03-04  5:51 UTC (permalink / raw)
  To: buildroot

Hi Marcelo,

On Mon, Mar 03, 2014 at 11:39:59PM -0300, Marcelo Gutierrez wrote:
> I've applied this, but:
> >
> >  1/ The package lacks an init script to start the MySQL server
> >     automatically.
> >
> >  2/ When mysqld_safe is started automatically, it looks for stuff
> >     in /usr/var that doesn't exist:
> >
> > 700101 00:00:22 mysqld_safe Starting mysqld daemon with databases from
> > /usr/var
> > /usr/bin/mysqld_safe: line 595: can't create /usr/var/buildroot.err:
> > nonexistent directory
> > /usr/bin/mysqld_safe: eval: line 1: can't create /usr/var/buildroot.err:
> > nonexistent directory
> >
> 
> I can fix that but we'll need to add a mysql user and I have no idea how do
> it

You can to this by setting the MYSQL_USERS variable. See the example in 
section 7.2.4 of the manual 
(http://buildroot.net/downloads/manual/manual.html), and section 12.2 for 
syntax details.

baruch

-- 
     http://baruch.siach.name/blog/                  ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-03-04  5:51     ` Baruch Siach
@ 2014-03-04 17:53       ` Marcelo Gutierrez
  0 siblings, 0 replies; 11+ messages in thread
From: Marcelo Gutierrez @ 2014-03-04 17:53 UTC (permalink / raw)
  To: buildroot

Hi all,

You can to this by setting the MYSQL_USERS variable. See the example in
> section 7.2.4 of the manual
> (http://buildroot.net/downloads/manual/manual.html), and section 12.2 for
> syntax details.
>

@Baruch: Thank you so much for the information.

700101 00:00:22 mysqld_safe Starting mysqld daemon with databases from
> /usr/var
> /usr/bin/mysqld_safe: line 595: can't create /usr/var/buildroot.err:
> nonexistent directory
> /usr/bin/mysqld_safe: eval: line 1: can't create /usr/var/buildroot.err:
> nonexistent directory
>

@Thomas: Issue fixed.(http://patchwork.ozlabs.org/patch/326422/)

Regards,
Marcelo.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20140304/b41d65be/attachment.html>

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [Buildroot] [PATCH 1/2] mysql: add option to build the server
  2014-02-04 15:41 [Buildroot] [PATCH 0/2] MySQL debug fix, and Mysql server on target Yann E. MORIN
@ 2014-02-04 15:41 ` Yann E. MORIN
  0 siblings, 0 replies; 11+ messages in thread
From: Yann E. MORIN @ 2014-02-04 15:41 UTC (permalink / raw)
  To: buildroot

From: Marcelo Guti?rrez(UTN/FRH) <kuyurix@gmail.com>

Signed-off-by: Marcelo Guti?rrez <kuyurix@gmail.com>
[yann.morin.1998 at free.fr: fix menuconfig layout]
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
---
 package/mysql/Config.in                            |  9 +++++
 .../mysql-0003-ac_stack_direction-is-unset.patch   | 15 +++++++
 .../mysql-0004-Fix-gen_lex_hash-execution.patch    | 32 +++++++++++++++
 package/mysql/mysql.mk                             | 46 +++++++++++++++++++++-
 4 files changed, 101 insertions(+), 1 deletion(-)
 create mode 100644 package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
 create mode 100644 package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch

diff --git a/package/mysql/Config.in b/package/mysql/Config.in
index 0def957..7133892 100644
--- a/package/mysql/Config.in
+++ b/package/mysql/Config.in
@@ -10,6 +10,15 @@ config BR2_PACKAGE_MYSQL
 
 	  http://www.mysql.com/
 
+if BR2_PACKAGE_MYSQL
+
+config BR2_PACKAGE_MYSQL_SERVER
+	bool "MySQL server"
+	help
+	  Install the MySQL server on the target.
+
+endif
+
 comment "MySQL needs a toolchain w/ C++, threads"
 	depends on BR2_USE_MMU
 	depends on !BR2_INSTALL_LIBSTDCPP || !BR2_TOOLCHAIN_HAS_THREADS
diff --git a/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
new file mode 100644
index 0000000..6fef0a9
--- /dev/null
+++ b/package/mysql/mysql-0003-ac_stack_direction-is-unset.patch
@@ -0,0 +1,15 @@
+misc.m4: ac_cv_c_stack_direction is unset.
+
+Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
+
+--- mysql-5.1.70.orig/config/ac-macros/misc.m4
++++ mysql-5.1.70/config/ac-macros/misc.m4
+@@ -477,7 +477,7 @@
+     exit(ptr_f(&a) < 0);
+   }
+   ], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1,
+-   ac_cv_c_stack_direction=)])
++   ac_cv_c_stack_direction=0)])
+  AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+ ])dnl
+ 
diff --git a/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
new file mode 100644
index 0000000..b91ed4f
--- /dev/null
+++ b/package/mysql/mysql-0004-Fix-gen_lex_hash-execution.patch
@@ -0,0 +1,32 @@
+Makefile: fix cross-compiling the server
+
+MySQL Makefile believes it can run code it just compiled, to
+generate a header. This does not work for cross-compilation.
+
+Instead, use a pre-installed host-version of the required tool.
+
+Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
+
+--- mysql-5.1.70/sql/Makefile.am
++++ mysql-5.1.70.patch/sql/Makefile.am
+@@ -177,7 +177,7 @@
+ # this avoid the rebuild of the built files in a source dist
+ lex_hash.h:	gen_lex_hash.cc lex.h
+ 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
+-		./gen_lex_hash$(EXEEXT) > $@-t
++		gen_lex_hash$(EXEEXT) > $@-t
+ 		$(MV) $@-t $@
+ 
+ # For testing of udf_example.so
+
+--- mysql-5.1.70/sql/Makefile.in
++++ mysql-5.1.70.patch/sql/Makefile.in
+@@ -1310,7 +1310,7 @@
+ # this avoid the rebuild of the built files in a source dist
+ lex_hash.h:	gen_lex_hash.cc lex.h
+ 		$(MAKE) $(AM_MAKEFLAGS) gen_lex_hash$(EXEEXT)
+-		./gen_lex_hash$(EXEEXT) > $@-t
++		gen_lex_hash$(EXEEXT) > $@-t
+ 		$(MV) $@-t $@
+ 
+ # We might have some stuff not built in this build, but that we want to install
diff --git a/package/mysql/mysql.mk b/package/mysql/mysql.mk
index 9b22c2d..9bcbf4f 100644
--- a/package/mysql/mysql.mk
+++ b/package/mysql/mysql.mk
@@ -25,7 +25,6 @@ MYSQL_CONF_ENV = \
 
 MYSQL_CONF_OPT = \
 	--without-ndb-binlog \
-	--without-server \
 	--without-docs \
 	--without-man \
 	--without-libedit \
@@ -34,6 +33,50 @@ MYSQL_CONF_OPT = \
 	--enable-thread-safe-client \
 	$(ENABLE_DEBUG)
 
+ifeq ($(BR2_PACKAGE_MYSQL_SERVER),y)
+MYSQL_DEPENDENCIES += host-mysql
+HOST_MYSQL_DEPENDENCIES =
+
+HOST_MYSQL_CONF_OPT = \
+	--with-embedded-server
+
+MYSQL_CONF_OPT += \
+	--disable-dependency-tracking \
+	--with-atomic-ops=up \
+	--with-embedded-server \
+	--without-query-cache \
+	--without-plugin-partition \
+	--without-plugin-daemon_example \
+	--without-plugin-ftexample \
+	--without-plugin-archive \
+	--without-plugin-blackhole \
+	--without-plugin-example \
+	--without-plugin-federated \
+	--without-plugin-ibmdb2i \
+	--without-plugin-innobase \
+	--without-plugin-innodb_plugin \
+	--without-plugin-ndbcluster
+
+define HOST_MYSQL_BUILD_CMDS
+	$(MAKE) -C $(@D)/include my_config.h
+	$(MAKE) -C $(@D)/mysys libmysys.a
+	$(MAKE) -C $(@D)/strings libmystrings.a
+	$(MAKE) -C $(@D)/vio libvio.a
+	$(MAKE) -C $(@D)/dbug libdbug.a
+	$(MAKE) -C $(@D)/regex libregex.a
+	$(MAKE) -C $(@D)/sql gen_lex_hash
+endef
+
+define HOST_MYSQL_INSTALL_CMDS
+	$(INSTALL) -m 0755  $(@D)/sql/gen_lex_hash  $(HOST_DIR)/usr/bin/
+endef
+
+else
+MYSQL_CONF_OPT += \
+	--without-server
+endif
+
+
 define MYSQL_REMOVE_TEST_PROGS
 	rm -rf $(TARGET_DIR)/usr/mysql-test $(TARGET_DIR)/usr/sql-bench
 endef
@@ -46,3 +89,4 @@ MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_REMOVE_TEST_PROGS
 MYSQL_POST_INSTALL_TARGET_HOOKS += MYSQL_ADD_MYSQL_LIB_PATH
 
 $(eval $(autotools-package))
+$(eval $(host-autotools-package))
-- 
1.8.1.2

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2014-03-04 17:53 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-12 22:39 [Buildroot] [PATCH 1/2] mysql: add option to build the server Marcelo Gutiérrez
2014-02-12 22:39 ` [Buildroot] [PATCH 2/2] package/mysql: fix debugging options Marcelo Gutiérrez
2014-02-23 19:12   ` Yann E. MORIN
2014-02-23 19:10 ` [Buildroot] [PATCH 1/2] mysql: add option to build the server Yann E. MORIN
2014-02-23 20:15 ` Peter Korsgaard
2014-02-24 19:38   ` Marcelo Gutierrez
2014-03-03 22:35 ` Thomas Petazzoni
2014-03-04  2:39   ` Marcelo Gutierrez
2014-03-04  5:51     ` Baruch Siach
2014-03-04 17:53       ` Marcelo Gutierrez
  -- strict thread matches above, loose matches on Subject: below --
2014-02-04 15:41 [Buildroot] [PATCH 0/2] MySQL debug fix, and Mysql server on target Yann E. MORIN
2014-02-04 15:41 ` [Buildroot] [PATCH 1/2] mysql: add option to build the server Yann E. MORIN

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.