918fe2456a4a7bb27e20b944cf25ac2a654c8632
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / package / mysql / 0005-bison_3_breaks_mysql_server_build.patch
1 fix the yacc code in mysql
2
3 Signed-off-by: Marcelo Gutierrez (UTN/FRH) <kuyurix@gmail.com>
4 ---
5 diff -uNr mysql-5.1.73.orig/sql/sql_lex.cc mysql-5.1.73/sql/sql_lex.cc
6 --- mysql-5.1.73.orig/sql/sql_lex.cc    2013-11-04 18:52:27.000000000 +0000
7 +++ mysql-5.1.73/sql/sql_lex.cc 2014-02-12 14:12:04.244111625 +0000
8 @@ -775,14 +775,13 @@
9                                 (which can't be followed by a signed number)
10  */
11  
12 -int MYSQLlex(void *arg, void *yythd)
13 +int MYSQLlex(void *arg, THD *thd)
14  {
15    reg1 uchar c= 0;
16    bool comment_closed;
17    int  tokval, result_state;
18    uint length;
19    enum my_lex_states state;
20 -  THD *thd= (THD *)yythd;
21    Lex_input_stream *lip= & thd->m_parser_state->m_lip;
22    LEX *lex= thd->lex;
23    YYSTYPE *yylval=(YYSTYPE*) arg;
24 diff -uNr mysql-5.1.73.orig/sql/sql_lex.h mysql-5.1.73/sql/sql_lex.h
25 --- mysql-5.1.73.orig/sql/sql_lex.h     2013-11-04 18:52:27.000000000 +0000
26 +++ mysql-5.1.73/sql/sql_lex.h  2014-02-12 14:17:19.424106423 +0000
27 @@ -2072,7 +2072,7 @@
28  extern void lex_free(void);
29  extern void lex_start(THD *thd);
30  extern void lex_end(LEX *lex);
31 -extern int MYSQLlex(void *arg, void *yythd);
32 +extern int MYSQLlex(void *arg, THD *thd);
33  
34  extern void trim_whitespace(CHARSET_INFO *cs, LEX_STRING *str);
35  
36 diff -uNr mysql-5.1.73.orig/sql/sql_parse.cc mysql-5.1.73/sql/sql_parse.cc
37 --- mysql-5.1.73.orig/sql/sql_parse.cc  2013-11-04 18:52:27.000000000 +0000
38 +++ mysql-5.1.73/sql/sql_parse.cc       2014-02-12 14:19:20.424104427 +0000
39 @@ -8012,7 +8012,7 @@
40  }
41  
42  
43 -extern int MYSQLparse(void *thd); // from sql_yacc.cc
44 +extern int MYSQLparse(THD *thd); // from sql_yacc.cc
45  
46  
47  /**
48 diff -uNr mysql-5.1.73.orig/sql/sql_yacc.yy mysql-5.1.73/sql/sql_yacc.yy
49 --- mysql-5.1.73.orig/sql/sql_yacc.yy   2013-11-04 18:52:27.000000000 +0000
50 +++ mysql-5.1.73/sql/sql_yacc.yy        2014-02-12 20:17:06.707750140 +0000
51 @@ -23,19 +23,13 @@
52  */
53  
54  %{
55 -/* thd is passed as an argument to yyparse(), and subsequently to yylex().
56 -** The type will be void*, so it must be  cast to (THD*) when used.
57 -** Use the YYTHD macro for this.
58 -*/
59 -#define YYPARSE_PARAM yythd
60 -#define YYLEX_PARAM yythd
61 -#define YYTHD ((THD *)yythd)
62 -#define YYLIP (& YYTHD->m_parser_state->m_lip)
63 +
64 +#define YYLIP (& thd->m_parser_state->m_lip)
65  
66  #define MYSQL_YACC
67  #define YYINITDEPTH 100
68  #define YYMAXDEPTH 3200                        /* Because of 64K stack */
69 -#define Lex (YYTHD->lex)
70 +#define Lex (thd->lex)
71  #define Select Lex->current_select
72  #include "mysql_priv.h"
73  #include "slave.h"
74 @@ -55,7 +49,7 @@
75  #pragma warning (disable : 4065)
76  #endif
77  
78 -int yylex(void *yylval, void *yythd);
79 +int yylex(void *yylval, THD *thd);
80  
81  const LEX_STRING null_lex_str= {0,0};
82  
83 @@ -64,7 +58,7 @@
84      ulong val= *(F);                          \
85      if (my_yyoverflow((B), (D), &val))        \
86      {                                         \
87 -      yyerror((char*) (A));                   \
88 +      yyerror(current_thd, (char*) (A));      \
89        return 2;                               \
90      }                                         \
91      else                                      \
92 @@ -76,7 +70,7 @@
93  #define MYSQL_YYABORT                         \
94    do                                          \
95    {                                           \
96 -    LEX::cleanup_lex_after_parse_error(YYTHD);\
97 +    LEX::cleanup_lex_after_parse_error(thd);\
98      YYABORT;                                  \
99    } while (0)
100  
101 @@ -159,9 +153,8 @@
102    to abort from the parser.
103  */
104  
105 -void MYSQLerror(const char *s)
106 +void MYSQLerror(THD *thd, const char *s)
107  {
108 -  THD *thd= current_thd;
109  
110    /*
111      Restore the original LEX if it was replaced when parsing
112 @@ -675,7 +668,10 @@
113  bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
114  %}
115  
116 -%pure_parser                                    /* We have threads */
117 +/* We have threads */
118 +%define api.pure
119 +%parse-param { THD *thd }
120 +%lex-param { THD *thd }
121  /*
122    Currently there are 169 shift/reduce conflicts.
123    We should not introduce new conflicts any more.
124 @@ -1516,7 +1512,6 @@
125  query:
126            END_OF_INPUT
127            {
128 -            THD *thd= YYTHD;
129              if (!thd->bootstrap &&
130                (!(thd->lex->select_lex.options & OPTION_FOUND_COMMENT)))
131              {
132 @@ -1530,7 +1525,7 @@
133            {
134              Lex_input_stream *lip = YYLIP;
135  
136 -            if ((YYTHD->client_capabilities & CLIENT_MULTI_QUERIES) &&
137 +            if ((thd->client_capabilities & CLIENT_MULTI_QUERIES) &&
138                  ! lip->stmt_prepare_mode &&
139                  ! lip->eof())
140              {
141 @@ -1626,7 +1621,6 @@
142  deallocate:
143            deallocate_or_drop PREPARE_SYM ident
144            {
145 -            THD *thd= YYTHD;
146              LEX *lex= thd->lex;
147              lex->sql_command= SQLCOM_DEALLOCATE_PREPARE;
148              lex->prepared_stmt_name= $3;
149 @@ -1641,7 +1635,6 @@
150  prepare:
151            PREPARE_SYM ident FROM prepare_src
152            {
153 -            THD *thd= YYTHD;
154              LEX *lex= thd->lex;
155              lex->sql_command= SQLCOM_PREPARE;
156              lex->prepared_stmt_name= $2;
157 @@ -1651,14 +1644,12 @@
158  prepare_src:
159            TEXT_STRING_sys
160            {
161 -            THD *thd= YYTHD;
162              LEX *lex= thd->lex;
163              lex->prepared_stmt_code= $1;
164              lex->prepared_stmt_code_is_varref= FALSE;
165            }
166          | '@' ident_or_text
167            {
168 -            THD *thd= YYTHD;
169              LEX *lex= thd->lex;
170              lex->prepared_stmt_code= $2;
171              lex->prepared_stmt_code_is_varref= TRUE;
172 @@ -1668,7 +1659,6 @@
173  execute:
174            EXECUTE_SYM ident
175            {
176 -            THD *thd= YYTHD;
177              LEX *lex= thd->lex;
178              lex->sql_command= SQLCOM_EXECUTE;
179              lex->prepared_stmt_name= $2;
180 @@ -1826,7 +1816,6 @@
181  create:
182            CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident
183            {
184 -            THD *thd= YYTHD;
185              LEX *lex= thd->lex;
186              lex->sql_command= SQLCOM_CREATE_TABLE;
187              if (!lex->select_lex.add_table_to_list(thd, $5, NULL,
188 @@ -1844,13 +1833,13 @@
189            }
190            create2
191            {
192 -            LEX *lex= YYTHD->lex;
193 +            LEX *lex= thd->lex;
194              lex->current_select= &lex->select_lex; 
195              if ((lex->create_info.used_fields & HA_CREATE_USED_ENGINE) &&
196                  !lex->create_info.db_type)
197              {
198 -              lex->create_info.db_type= ha_default_handlerton(YYTHD);
199 -              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
200 +              lex->create_info.db_type= ha_default_handlerton(thd);
201 +              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
202                                    ER_WARN_USING_OTHER_HANDLER,
203                                    ER(ER_WARN_USING_OTHER_HANDLER),
204                                    ha_resolve_storage_engine_name(lex->create_info.db_type),
205 @@ -1979,7 +1968,7 @@
206  event_tail:
207            remember_name EVENT_SYM opt_if_not_exists sp_name
208            {
209 -            THD *thd= YYTHD;
210 +            THD *thd= thd;
211              LEX *lex=Lex;
212  
213              lex->stmt_definition_begin= $1;
214 @@ -2046,7 +2035,7 @@
215  ev_starts:
216            /* empty */
217            {
218 -            Item *item= new (YYTHD->mem_root) Item_func_now_local();
219 +            Item *item= new (thd->mem_root) Item_func_now_local();
220              if (item == NULL)
221                MYSQL_YYABORT;
222              Lex->event_parse_data->item_starts= item;
223 @@ -2096,7 +2085,6 @@
224  
225  ev_sql_stmt:
226            {
227 -            THD *thd= YYTHD;
228              LEX *lex= thd->lex;
229              Lex_input_stream *lip= YYLIP;
230  
231 @@ -2139,7 +2127,6 @@
232            }
233            ev_sql_stmt_inner
234            {
235 -            THD *thd= YYTHD;
236              LEX *lex= thd->lex;
237  
238              /* return back to the original memory root ASAP */
239 @@ -2198,11 +2185,10 @@
240              $$= new sp_name($1, $3, true);
241              if ($$ == NULL)
242                MYSQL_YYABORT;
243 -            $$->init_qname(YYTHD);
244 +            $$->init_qname(thd);
245            }
246          | ident
247            {
248 -            THD *thd= YYTHD;
249              LEX *lex= thd->lex;
250              LEX_STRING db;
251              if (check_routine_name(&$1))
252 @@ -2272,7 +2258,7 @@
253              lex->sql_command= SQLCOM_CALL;
254              lex->spname= $2;
255              lex->value_list.empty();
256 -            sp_add_used_routine(lex, YYTHD, $2, TYPE_ENUM_PROCEDURE);
257 +            sp_add_used_routine(lex, thd, $2, TYPE_ENUM_PROCEDURE);
258            }
259            opt_sp_cparam_list {}
260          ;
261 @@ -2345,7 +2331,7 @@
262                                                       (enum enum_field_types)$3,
263                                                       sp_param_in);
264  
265 -            if (lex->sphead->fill_field_definition(YYTHD, lex,
266 +            if (lex->sphead->fill_field_definition(thd, lex,
267                                                     (enum enum_field_types) $3,
268                                                     &spvar->field_def))
269              {
270 @@ -2382,7 +2368,7 @@
271                                                       (enum enum_field_types)$4,
272                                                       (sp_param_mode_t)$1);
273  
274 -            if (lex->sphead->fill_field_definition(YYTHD, lex,
275 +            if (lex->sphead->fill_field_definition(thd, lex,
276                                                     (enum enum_field_types) $4,
277                                                     &spvar->field_def))
278              {
279 @@ -2445,13 +2431,12 @@
280            {
281              LEX *lex= Lex;
282  
283 -            lex->sphead->reset_lex(YYTHD);
284 +            lex->sphead->reset_lex(thd);
285              lex->spcont->declare_var_boundary($2);
286            }
287            type
288            sp_opt_default
289            {
290 -            THD *thd= YYTHD;
291              LEX *lex= Lex;
292              sp_pcontext *pctx= lex->spcont;
293              uint num_vars= pctx->context_var_count();
294 @@ -2477,7 +2462,7 @@
295                spvar->type= var_type;
296                spvar->dflt= dflt_value_item;
297              
298 -              if (lex->sphead->fill_field_definition(YYTHD, lex, var_type,
299 +              if (lex->sphead->fill_field_definition(thd, lex, var_type,
300                                                       &spvar->field_def))
301                {
302                  MYSQL_YYABORT;
303 @@ -2501,7 +2486,7 @@
304              }
305  
306              pctx->declare_var_boundary(0);
307 -            if (lex->sphead->restore_lex(YYTHD))
308 +            if (lex->sphead->restore_lex(thd))
309                MYSQL_YYABORT;
310              $$.vars= $2;
311              $$.conds= $$.hndlrs= $$.curs= 0;
312 @@ -2516,7 +2501,7 @@
313               my_error(ER_SP_DUP_COND, MYF(0), $2.str);
314               MYSQL_YYABORT;
315             }
316 -           if(YYTHD->lex->spcont->push_cond(&$2, $5))
317 +           if(thd->lex->spcont->push_cond(&$2, $5))
318                MYSQL_YYABORT;
319              $$.vars= $$.hndlrs= $$.curs= 0;
320              $$.conds= 1;
321 @@ -2602,7 +2587,7 @@
322  
323  sp_cursor_stmt:
324            {
325 -            Lex->sphead->reset_lex(YYTHD);
326 +            Lex->sphead->reset_lex(thd);
327            }
328            select
329            {
330 @@ -2618,7 +2603,7 @@
331              }
332              lex->sp_lex_in_use= TRUE;
333              $$= lex;
334 -            if (lex->sphead->restore_lex(YYTHD))
335 +            if (lex->sphead->restore_lex(thd))
336                MYSQL_YYABORT;
337            }
338          ;
339 @@ -2662,7 +2647,7 @@
340  sp_cond:
341            ulong_num
342            { /* mysql errno */
343 -            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
344 +            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
345              if ($$ == NULL)
346                MYSQL_YYABORT;
347              $$->type= sp_cond_type_t::number;
348 @@ -2675,7 +2660,7 @@
349                my_error(ER_SP_BAD_SQLSTATE, MYF(0), $3.str);
350                MYSQL_YYABORT;
351              }
352 -            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
353 +            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
354              if ($$ == NULL)
355                MYSQL_YYABORT;
356              $$->type= sp_cond_type_t::state;
357 @@ -2705,21 +2690,21 @@
358            }
359          | SQLWARNING_SYM /* SQLSTATEs 01??? */
360            {
361 -            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
362 +            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
363              if ($$ == NULL)
364                MYSQL_YYABORT;
365              $$->type= sp_cond_type_t::warning;
366            }
367          | not FOUND_SYM /* SQLSTATEs 02??? */
368            {
369 -            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
370 +            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
371              if ($$ == NULL)
372                MYSQL_YYABORT;
373              $$->type= sp_cond_type_t::notfound;
374            }
375          | SQLEXCEPTION_SYM /* All other SQLSTATEs */
376            {
377 -            $$= (sp_cond_type_t *)YYTHD->alloc(sizeof(sp_cond_type_t));
378 +            $$= (sp_cond_type_t *)thd->alloc(sizeof(sp_cond_type_t));
379              if ($$ == NULL)
380                MYSQL_YYABORT;
381              $$->type= sp_cond_type_t::exception;
382 @@ -2789,7 +2774,6 @@
383          
384  sp_proc_stmt_statement:
385            {
386 -            THD *thd= YYTHD;
387              LEX *lex= thd->lex;
388              Lex_input_stream *lip= YYLIP;
389  
390 @@ -2798,7 +2782,6 @@
391            }
392            statement
393            {
394 -            THD *thd= YYTHD;
395              LEX *lex= thd->lex;
396              Lex_input_stream *lip= YYLIP;
397              sp_head *sp= lex->sphead;
398 @@ -2845,7 +2828,7 @@
399  
400  sp_proc_stmt_return:
401            RETURN_SYM 
402 -          { Lex->sphead->reset_lex(YYTHD); }
403 +          { Lex->sphead->reset_lex(thd); }
404            expr
405            {
406              LEX *lex= Lex;
407 @@ -2867,7 +2850,7 @@
408                  MYSQL_YYABORT;
409                sp->m_flags|= sp_head::HAS_RETURN;
410              }
411 -            if (sp->restore_lex(YYTHD))
412 +            if (sp->restore_lex(thd))
413                MYSQL_YYABORT;
414            }
415          ;
416 @@ -3094,7 +3077,7 @@
417          ;
418  
419  sp_if:
420 -          { Lex->sphead->reset_lex(YYTHD); }
421 +          { Lex->sphead->reset_lex(thd); }
422            expr THEN_SYM
423            {
424              LEX *lex= Lex;
425 @@ -3108,7 +3091,7 @@
426                  sp->add_cont_backpatch(i) ||
427                  sp->add_instr(i))
428                MYSQL_YYABORT;
429 -            if (sp->restore_lex(YYTHD))
430 +            if (sp->restore_lex(thd))
431                MYSQL_YYABORT;
432            }
433            sp_proc_stmts1
434 @@ -3147,7 +3130,7 @@
435            {
436              LEX *lex= Lex;
437              case_stmt_action_case(lex);
438 -            lex->sphead->reset_lex(YYTHD); /* For expr $3 */
439 +            lex->sphead->reset_lex(thd); /* For expr $3 */
440            }
441            expr
442            {
443 @@ -3156,7 +3139,7 @@
444                MYSQL_YYABORT;
445  
446              /* For expr $3 */
447 -            if (lex->sphead->restore_lex(YYTHD))
448 +            if (lex->sphead->restore_lex(thd))
449                MYSQL_YYABORT;
450            }
451            simple_when_clause_list
452 @@ -3198,7 +3181,7 @@
453  simple_when_clause:
454            WHEN_SYM
455            {
456 -            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
457 +            Lex->sphead->reset_lex(thd); /* For expr $3 */
458            }
459            expr
460            {
461 @@ -3208,7 +3191,7 @@
462              if (case_stmt_action_when(lex, $3, true))
463                MYSQL_YYABORT;
464              /* For expr $3 */
465 -            if (lex->sphead->restore_lex(YYTHD))
466 +            if (lex->sphead->restore_lex(thd))
467                MYSQL_YYABORT;
468            }
469            THEN_SYM
470 @@ -3223,7 +3206,7 @@
471  searched_when_clause:
472            WHEN_SYM
473            {
474 -            Lex->sphead->reset_lex(YYTHD); /* For expr $3 */
475 +            Lex->sphead->reset_lex(thd); /* For expr $3 */
476            }
477            expr
478            {
479 @@ -3231,7 +3214,7 @@
480              if (case_stmt_action_when(lex, $3, false))
481                MYSQL_YYABORT;
482              /* For expr $3 */
483 -            if (lex->sphead->restore_lex(YYTHD))
484 +            if (lex->sphead->restore_lex(thd))
485                MYSQL_YYABORT;
486            }
487            THEN_SYM
488 @@ -3395,7 +3378,7 @@
489                MYSQL_YYABORT;
490           }
491          | WHILE_SYM 
492 -          { Lex->sphead->reset_lex(YYTHD); }
493 +          { Lex->sphead->reset_lex(thd); }
494            expr DO_SYM
495            {
496              LEX *lex= Lex;
497 @@ -3409,7 +3392,7 @@
498                  sp->new_cont_backpatch(i) ||
499                  sp->add_instr(i))
500                MYSQL_YYABORT;
501 -            if (sp->restore_lex(YYTHD))
502 +            if (sp->restore_lex(thd))
503                MYSQL_YYABORT;
504            }
505            sp_proc_stmts1 END WHILE_SYM
506 @@ -3424,7 +3407,7 @@
507              lex->sphead->do_cont_backpatch();
508            }
509          | REPEAT_SYM sp_proc_stmts1 UNTIL_SYM 
510 -          { Lex->sphead->reset_lex(YYTHD); }
511 +          { Lex->sphead->reset_lex(thd); }
512            expr END REPEAT_SYM
513            {
514              LEX *lex= Lex;
515 @@ -3436,7 +3419,7 @@
516              if (i == NULL ||
517                  lex->sphead->add_instr(i))
518                MYSQL_YYABORT;
519 -            if (lex->sphead->restore_lex(YYTHD))
520 +            if (lex->sphead->restore_lex(thd))
521                MYSQL_YYABORT;
522              /* We can shortcut the cont_backpatch here */
523              i->m_cont_dest= ip+1;
524 @@ -3859,7 +3842,6 @@
525            create3 {}
526          | LIKE table_ident
527            {
528 -            THD *thd= YYTHD;
529              TABLE_LIST *src_table;
530              LEX *lex= thd->lex;
531  
532 @@ -3873,7 +3855,6 @@
533            }
534          | '(' LIKE table_ident ')'
535            {
536 -            THD *thd= YYTHD;
537              TABLE_LIST *src_table;
538              LEX *lex= thd->lex;
539  
540 @@ -4342,7 +4323,6 @@
541            bit_expr
542            {
543              Item *part_expr= $1;
544 -            THD *thd= YYTHD;
545              LEX *lex= thd->lex;
546              Name_resolution_context *context= &lex->current_select->context;
547              TABLE_LIST *save_list= context->table_list;
548 @@ -4364,7 +4344,7 @@
549                my_error(ER_PARTITION_FUNCTION_IS_NOT_ALLOWED, MYF(0));
550                MYSQL_YYABORT;
551              }
552 -            if (part_expr->fix_fields(YYTHD, (Item**)0) ||
553 +            if (part_expr->fix_fields(thd, (Item**)0) ||
554                  ((context->table_list= save_list), FALSE) ||
555                  (!part_expr->const_item()) ||
556                  (!lex->safe_to_cache_query))
557 @@ -4629,7 +4609,7 @@
558          | TYPE_SYM opt_equal storage_engines
559            {
560              Lex->create_info.db_type= $3;
561 -            WARN_DEPRECATED(yythd, "6.0", "TYPE=storage_engine",
562 +            WARN_DEPRECATED(thd, "6.0", "TYPE=storage_engine",
563                              "'ENGINE=storage_engine'");
564              Lex->create_info.used_fields|= HA_CREATE_USED_ENGINE;
565            }
566 @@ -4791,19 +4771,19 @@
567  storage_engines:
568            ident_or_text
569            {
570 -            plugin_ref plugin= ha_resolve_by_name(YYTHD, &$1);
571 +            plugin_ref plugin= ha_resolve_by_name(thd, &$1);
572  
573              if (plugin)
574                $$= plugin_data(plugin, handlerton*);
575              else
576              {
577 -              if (YYTHD->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
578 +              if (thd->variables.sql_mode & MODE_NO_ENGINE_SUBSTITUTION)
579                {
580                  my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), $1.str);
581                  MYSQL_YYABORT;
582                }
583                $$= 0;
584 -              push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN,
585 +              push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
586                                    ER_UNKNOWN_STORAGE_ENGINE,
587                                    ER(ER_UNKNOWN_STORAGE_ENGINE),
588                                    $1.str);
589 @@ -4815,7 +4795,7 @@
590            ident_or_text
591            {
592              plugin_ref plugin;
593 -            if ((plugin= ha_resolve_by_name(YYTHD, &$1)))
594 +            if ((plugin= ha_resolve_by_name(thd, &$1)))
595                $$= plugin_data(plugin, handlerton*);
596              else
597              {
598 @@ -5043,7 +5023,7 @@
599                {
600                  char buff[sizeof("YEAR()") + MY_INT64_NUM_DECIMAL_DIGITS + 1];
601                  my_snprintf(buff, sizeof(buff), "YEAR(%lu)", length);
602 -                push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_NOTE,
603 +                push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_NOTE,
604                                      ER_WARN_DEPRECATED_SYNTAX,
605                                      ER(ER_WARN_DEPRECATED_SYNTAX),
606                                      buff, "YEAR(4)");
607 @@ -5057,7 +5037,7 @@
608            { $$=MYSQL_TYPE_TIME; }
609          | TIMESTAMP opt_field_length
610            {
611 -            if (YYTHD->variables.sql_mode & MODE_MAXDB)
612 +            if (thd->variables.sql_mode & MODE_MAXDB)
613                $$=MYSQL_TYPE_DATETIME;
614              else
615              {
616 @@ -5189,7 +5169,7 @@
617  real_type:
618            REAL
619            {
620 -            $$= YYTHD->variables.sql_mode & MODE_REAL_AS_FLOAT ?
621 +            $$= thd->variables.sql_mode & MODE_REAL_AS_FLOAT ?
622                MYSQL_TYPE_FLOAT : MYSQL_TYPE_DOUBLE;
623            }
624          | DOUBLE_SYM
625 @@ -5263,7 +5243,7 @@
626          | DEFAULT now_or_signed_literal { Lex->default_value=$2; }
627          | ON UPDATE_SYM NOW_SYM optional_braces
628            {
629 -            Item *item= new (YYTHD->mem_root) Item_func_now_local();
630 +            Item *item= new (thd->mem_root) Item_func_now_local();
631              if (item == NULL)
632                MYSQL_YYABORT;
633              Lex->on_update_value= item;
634 @@ -5312,7 +5292,7 @@
635  now_or_signed_literal:
636            NOW_SYM optional_braces
637            {
638 -            $$= new (YYTHD->mem_root) Item_func_now_local();
639 +            $$= new (thd->mem_root) Item_func_now_local();
640              if ($$ == NULL)
641                MYSQL_YYABORT;
642            }
643 @@ -5673,7 +5653,6 @@
644  alter:
645            ALTER opt_ignore TABLE_SYM table_ident
646            {
647 -            THD *thd= YYTHD;
648              LEX *lex= thd->lex;
649              lex->name.str= 0;
650              lex->name.length= 0;
651 @@ -5799,7 +5778,7 @@
652                Event_parse_data.
653              */
654  
655 -            if (!(Lex->event_parse_data= Event_parse_data::new_instance(YYTHD)))
656 +            if (!(Lex->event_parse_data= Event_parse_data::new_instance(thd)))
657                MYSQL_YYABORT;
658              Lex->event_parse_data->identifier= $4;
659  
660 @@ -6192,7 +6171,6 @@
661            {
662              if (!$4)
663              {
664 -              THD *thd= YYTHD;
665                $4= thd->variables.collation_database;
666              }
667              $5= $5 ? $5 : $4;
668 @@ -6556,7 +6534,7 @@
669  assign_to_keycache:
670            table_ident cache_keys_spec
671            {
672 -            if (!Select->add_table_to_list(YYTHD, $1, NULL, 0, TL_READ, 
673 +            if (!Select->add_table_to_list(thd, $1, NULL, 0, TL_READ, 
674                                             Select->pop_index_hints()))
675                MYSQL_YYABORT;
676            }
677 @@ -6585,7 +6563,7 @@
678  preload_keys:
679            table_ident cache_keys_spec opt_ignore_leaves
680            {
681 -            if (!Select->add_table_to_list(YYTHD, $1, NULL, $3, TL_READ,
682 +            if (!Select->add_table_to_list(thd, $1, NULL, $3, TL_READ,
683                                             Select->pop_index_hints()))
684                MYSQL_YYABORT;
685            }
686 @@ -6593,7 +6571,7 @@
687  
688  cache_keys_spec:
689            {
690 -            Lex->select_lex.alloc_index_hints(YYTHD);
691 +            Lex->select_lex.alloc_index_hints(thd);
692              Select->set_index_hint_type(INDEX_HINT_USE, 
693                                          global_system_variables.old_mode ? 
694                                          INDEX_HINT_MASK_JOIN : 
695 @@ -6813,7 +6791,6 @@
696          | select_item
697          | '*'
698            {
699 -            THD *thd= YYTHD;
700              Item *item= new (thd->mem_root)
701                            Item_field(&thd->lex->current_select->context,
702                                       NULL, NULL, "*");
703 @@ -6828,7 +6805,6 @@
704  select_item:
705            remember_name select_item2 remember_end select_alias
706            {
707 -            THD *thd= YYTHD;
708              DBUG_ASSERT($1 < $3);
709  
710              if (add_item_to_list(thd, $2))
711 @@ -6929,7 +6905,7 @@
712              else
713              {
714                /* X OR Y */
715 -              $$ = new (YYTHD->mem_root) Item_cond_or($1, $3);
716 +              $$ = new (thd->mem_root) Item_cond_or($1, $3);
717                if ($$ == NULL)
718                  MYSQL_YYABORT;
719              }
720 @@ -6937,7 +6913,7 @@
721          | expr XOR expr %prec XOR
722            {
723              /* XOR is a proprietary extension */
724 -            $$ = new (YYTHD->mem_root) Item_cond_xor($1, $3);
725 +            $$ = new (thd->mem_root) Item_cond_xor($1, $3);
726              if ($$ == NULL)
727                MYSQL_YYABORT;
728            }
729 @@ -6979,50 +6955,50 @@
730              else
731              {
732                /* X AND Y */
733 -              $$ = new (YYTHD->mem_root) Item_cond_and($1, $3);
734 +              $$ = new (thd->mem_root) Item_cond_and($1, $3);
735                if ($$ == NULL)
736                  MYSQL_YYABORT;
737              }
738            }
739          | NOT_SYM expr %prec NOT_SYM
740            {
741 -            $$= negate_expression(YYTHD, $2);
742 +            $$= negate_expression(thd, $2);
743              if ($$ == NULL)
744                MYSQL_YYABORT;
745            }
746          | bool_pri IS TRUE_SYM %prec IS
747            {
748 -            $$= new (YYTHD->mem_root) Item_func_istrue($1);
749 +            $$= new (thd->mem_root) Item_func_istrue($1);
750              if ($$ == NULL)
751                MYSQL_YYABORT;
752            }
753          | bool_pri IS not TRUE_SYM %prec IS
754            {
755 -            $$= new (YYTHD->mem_root) Item_func_isnottrue($1);
756 +            $$= new (thd->mem_root) Item_func_isnottrue($1);
757              if ($$ == NULL)
758                MYSQL_YYABORT;
759            }
760          | bool_pri IS FALSE_SYM %prec IS
761            {
762 -            $$= new (YYTHD->mem_root) Item_func_isfalse($1);
763 +            $$= new (thd->mem_root) Item_func_isfalse($1);
764              if ($$ == NULL)
765                MYSQL_YYABORT;
766            }
767          | bool_pri IS not FALSE_SYM %prec IS
768            {
769 -            $$= new (YYTHD->mem_root) Item_func_isnotfalse($1);
770 +            $$= new (thd->mem_root) Item_func_isnotfalse($1);
771              if ($$ == NULL)
772                MYSQL_YYABORT;
773            }
774          | bool_pri IS UNKNOWN_SYM %prec IS
775            {
776 -            $$= new (YYTHD->mem_root) Item_func_isnull($1);
777 +            $$= new (thd->mem_root) Item_func_isnull($1);
778              if ($$ == NULL)
779                MYSQL_YYABORT;
780            }
781          | bool_pri IS not UNKNOWN_SYM %prec IS
782            {
783 -            $$= new (YYTHD->mem_root) Item_func_isnotnull($1);
784 +            $$= new (thd->mem_root) Item_func_isnotnull($1);
785              if ($$ == NULL)
786                MYSQL_YYABORT;
787            }
788 @@ -7032,19 +7008,19 @@
789  bool_pri:
790            bool_pri IS NULL_SYM %prec IS
791            {
792 -            $$= new (YYTHD->mem_root) Item_func_isnull($1);
793 +            $$= new (thd->mem_root) Item_func_isnull($1);
794              if ($$ == NULL)
795                MYSQL_YYABORT;
796            }
797          | bool_pri IS not NULL_SYM %prec IS
798            {
799 -            $$= new (YYTHD->mem_root) Item_func_isnotnull($1);
800 +            $$= new (thd->mem_root) Item_func_isnotnull($1);
801              if ($$ == NULL)
802                MYSQL_YYABORT;
803            }
804          | bool_pri EQUAL_SYM predicate %prec EQUAL_SYM
805            {
806 -            $$= new (YYTHD->mem_root) Item_func_equal($1,$3);
807 +            $$= new (thd->mem_root) Item_func_equal($1,$3);
808              if ($$ == NULL)
809                MYSQL_YYABORT;
810            }
811 @@ -7066,13 +7042,12 @@
812  predicate:
813            bit_expr IN_SYM '(' subselect ')'
814            {
815 -            $$= new (YYTHD->mem_root) Item_in_subselect($1, $4);
816 +            $$= new (thd->mem_root) Item_in_subselect($1, $4);
817              if ($$ == NULL)
818                MYSQL_YYABORT;
819            }
820          | bit_expr not IN_SYM '(' subselect ')'
821            {
822 -            THD *thd= YYTHD;
823              Item *item= new (thd->mem_root) Item_in_subselect($1, $5);
824              if (item == NULL)
825                MYSQL_YYABORT;
826 @@ -7082,7 +7057,7 @@
827            }
828          | bit_expr IN_SYM '(' expr ')'
829            {
830 -            $$= handle_sql2003_note184_exception(YYTHD, $1, true, $4);
831 +            $$= handle_sql2003_note184_exception(thd, $1, true, $4);
832              if ($$ == NULL)
833                MYSQL_YYABORT;
834            }
835 @@ -7090,13 +7065,13 @@
836            { 
837              $6->push_front($4);
838              $6->push_front($1);
839 -            $$= new (YYTHD->mem_root) Item_func_in(*$6);
840 +            $$= new (thd->mem_root) Item_func_in(*$6);
841              if ($$ == NULL)
842                MYSQL_YYABORT;
843            }
844          | bit_expr not IN_SYM '(' expr ')'
845            {
846 -            $$= handle_sql2003_note184_exception(YYTHD, $1, false, $5);
847 +            $$= handle_sql2003_note184_exception(thd, $1, false, $5);
848              if ($$ == NULL)
849                MYSQL_YYABORT;
850            }
851 @@ -7104,7 +7079,7 @@
852            {
853              $7->push_front($5);
854              $7->push_front($1);
855 -            Item_func_in *item = new (YYTHD->mem_root) Item_func_in(*$7);
856 +            Item_func_in *item = new (thd->mem_root) Item_func_in(*$7);
857              if (item == NULL)
858                MYSQL_YYABORT;
859              item->negate();
860 @@ -7112,14 +7087,14 @@
861            }
862          | bit_expr BETWEEN_SYM bit_expr AND_SYM predicate
863            {
864 -            $$= new (YYTHD->mem_root) Item_func_between($1,$3,$5);
865 +            $$= new (thd->mem_root) Item_func_between($1,$3,$5);
866              if ($$ == NULL)
867                MYSQL_YYABORT;
868            }
869          | bit_expr not BETWEEN_SYM bit_expr AND_SYM predicate
870            {
871              Item_func_between *item;
872 -            item= new (YYTHD->mem_root) Item_func_between($1,$4,$6);
873 +            item= new (thd->mem_root) Item_func_between($1,$4,$6);
874              if (item == NULL)
875                MYSQL_YYABORT;
876              item->negate();
877 @@ -7127,42 +7102,42 @@
878            }
879          | bit_expr SOUNDS_SYM LIKE bit_expr
880            {
881 -            Item *item1= new (YYTHD->mem_root) Item_func_soundex($1);
882 -            Item *item4= new (YYTHD->mem_root) Item_func_soundex($4);
883 +            Item *item1= new (thd->mem_root) Item_func_soundex($1);
884 +            Item *item4= new (thd->mem_root) Item_func_soundex($4);
885              if ((item1 == NULL) || (item4 == NULL))
886                MYSQL_YYABORT;
887 -            $$= new (YYTHD->mem_root) Item_func_eq(item1, item4);
888 +            $$= new (thd->mem_root) Item_func_eq(item1, item4);
889              if ($$ == NULL)
890                MYSQL_YYABORT;
891            }
892          | bit_expr LIKE simple_expr opt_escape
893            {
894 -            $$= new (YYTHD->mem_root) Item_func_like($1,$3,$4,Lex->escape_used);
895 +            $$= new (thd->mem_root) Item_func_like($1,$3,$4,Lex->escape_used);
896              if ($$ == NULL)
897                MYSQL_YYABORT;
898            }
899          | bit_expr not LIKE simple_expr opt_escape
900            {
901 -            Item *item= new (YYTHD->mem_root) Item_func_like($1,$4,$5,
902 +            Item *item= new (thd->mem_root) Item_func_like($1,$4,$5,
903                                                               Lex->escape_used);
904              if (item == NULL)
905                MYSQL_YYABORT;
906 -            $$= new (YYTHD->mem_root) Item_func_not(item);
907 +            $$= new (thd->mem_root) Item_func_not(item);
908              if ($$ == NULL)
909                MYSQL_YYABORT;
910            }
911          | bit_expr REGEXP bit_expr
912            {
913 -            $$= new (YYTHD->mem_root) Item_func_regex($1,$3);
914 +            $$= new (thd->mem_root) Item_func_regex($1,$3);
915              if ($$ == NULL)
916                MYSQL_YYABORT;
917            }
918          | bit_expr not REGEXP bit_expr
919            {
920 -            Item *item= new (YYTHD->mem_root) Item_func_regex($1,$4);
921 +            Item *item= new (thd->mem_root) Item_func_regex($1,$4);
922              if (item == NULL)
923                MYSQL_YYABORT;
924 -            $$= negate_expression(YYTHD, item);
925 +            $$= negate_expression(thd, item);
926              if ($$ == NULL)
927                MYSQL_YYABORT;
928            }
929 @@ -7172,85 +7147,85 @@
930  bit_expr:
931            bit_expr '|' bit_expr %prec '|'
932            {
933 -            $$= new (YYTHD->mem_root) Item_func_bit_or($1,$3);
934 +            $$= new (thd->mem_root) Item_func_bit_or($1,$3);
935              if ($$ == NULL)
936                MYSQL_YYABORT;
937            }
938          | bit_expr '&' bit_expr %prec '&'
939            {
940 -            $$= new (YYTHD->mem_root) Item_func_bit_and($1,$3);
941 +            $$= new (thd->mem_root) Item_func_bit_and($1,$3);
942              if ($$ == NULL)
943                MYSQL_YYABORT;
944            }
945          | bit_expr SHIFT_LEFT bit_expr %prec SHIFT_LEFT
946            {
947 -            $$= new (YYTHD->mem_root) Item_func_shift_left($1,$3);
948 +            $$= new (thd->mem_root) Item_func_shift_left($1,$3);
949              if ($$ == NULL)
950                MYSQL_YYABORT;
951            }
952          | bit_expr SHIFT_RIGHT bit_expr %prec SHIFT_RIGHT
953            {
954 -            $$= new (YYTHD->mem_root) Item_func_shift_right($1,$3);
955 +            $$= new (thd->mem_root) Item_func_shift_right($1,$3);
956              if ($$ == NULL)
957                MYSQL_YYABORT;
958            }
959          | bit_expr '+' bit_expr %prec '+'
960            {
961 -            $$= new (YYTHD->mem_root) Item_func_plus($1,$3);
962 +            $$= new (thd->mem_root) Item_func_plus($1,$3);
963              if ($$ == NULL)
964                MYSQL_YYABORT;
965            }
966          | bit_expr '-' bit_expr %prec '-'
967            {
968 -            $$= new (YYTHD->mem_root) Item_func_minus($1,$3);
969 +            $$= new (thd->mem_root) Item_func_minus($1,$3);
970              if ($$ == NULL)
971                MYSQL_YYABORT;
972            }
973          | bit_expr '+' INTERVAL_SYM expr interval %prec '+'
974            {
975 -            $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,0);
976 +            $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,0);
977              if ($$ == NULL)
978                MYSQL_YYABORT;
979            }
980          | bit_expr '-' INTERVAL_SYM expr interval %prec '-'
981            {
982 -            $$= new (YYTHD->mem_root) Item_date_add_interval($1,$4,$5,1);
983 +            $$= new (thd->mem_root) Item_date_add_interval($1,$4,$5,1);
984              if ($$ == NULL)
985                MYSQL_YYABORT;
986            }
987          | bit_expr '*' bit_expr %prec '*'
988            {
989 -            $$= new (YYTHD->mem_root) Item_func_mul($1,$3);
990 +            $$= new (thd->mem_root) Item_func_mul($1,$3);
991              if ($$ == NULL)
992                MYSQL_YYABORT;
993            }
994          | bit_expr '/' bit_expr %prec '/'
995            {
996 -            $$= new (YYTHD->mem_root) Item_func_div($1,$3);
997 +            $$= new (thd->mem_root) Item_func_div($1,$3);
998              if ($$ == NULL)
999                MYSQL_YYABORT;
1000            }
1001          | bit_expr '%' bit_expr %prec '%'
1002            {
1003 -            $$= new (YYTHD->mem_root) Item_func_mod($1,$3);
1004 +            $$= new (thd->mem_root) Item_func_mod($1,$3);
1005              if ($$ == NULL)
1006                MYSQL_YYABORT;
1007            }
1008          | bit_expr DIV_SYM bit_expr %prec DIV_SYM
1009            {
1010 -            $$= new (YYTHD->mem_root) Item_func_int_div($1,$3);
1011 +            $$= new (thd->mem_root) Item_func_int_div($1,$3);
1012              if ($$ == NULL)
1013                MYSQL_YYABORT;
1014            }
1015          | bit_expr MOD_SYM bit_expr %prec MOD_SYM
1016            {
1017 -            $$= new (YYTHD->mem_root) Item_func_mod($1,$3);
1018 +            $$= new (thd->mem_root) Item_func_mod($1,$3);
1019              if ($$ == NULL)
1020                MYSQL_YYABORT;
1021            }
1022          | bit_expr '^' bit_expr
1023            {
1024 -            $$= new (YYTHD->mem_root) Item_func_bit_xor($1,$3);
1025 +            $$= new (thd->mem_root) Item_func_bit_xor($1,$3);
1026              if ($$ == NULL)
1027                MYSQL_YYABORT;
1028            }
1029 @@ -7299,7 +7274,6 @@
1030          | function_call_conflict
1031          | simple_expr COLLATE_SYM ident_or_text %prec NEG
1032            {
1033 -            THD *thd= YYTHD;
1034              Item *i1= new (thd->mem_root) Item_string($3.str,
1035                                                        $3.length,
1036                                                        thd->charset());
1037 @@ -7315,7 +7289,7 @@
1038          | sum_expr
1039          | simple_expr OR_OR_SYM simple_expr
1040            {
1041 -            $$= new (YYTHD->mem_root) Item_func_concat($1, $3);
1042 +            $$= new (thd->mem_root) Item_func_concat($1, $3);
1043              if ($$ == NULL)
1044                MYSQL_YYABORT;
1045            }
1046 @@ -7325,25 +7299,25 @@
1047            }
1048          | '-' simple_expr %prec NEG
1049            {
1050 -            $$= new (YYTHD->mem_root) Item_func_neg($2);
1051 +            $$= new (thd->mem_root) Item_func_neg($2);
1052              if ($$ == NULL)
1053                MYSQL_YYABORT;
1054            }
1055          | '~' simple_expr %prec NEG
1056            {
1057 -            $$= new (YYTHD->mem_root) Item_func_bit_neg($2);
1058 +            $$= new (thd->mem_root) Item_func_bit_neg($2);
1059              if ($$ == NULL)
1060                MYSQL_YYABORT;
1061            }
1062          | not2 simple_expr %prec NEG
1063            {
1064 -            $$= negate_expression(YYTHD, $2);
1065 +            $$= negate_expression(thd, $2);
1066              if ($$ == NULL)
1067                MYSQL_YYABORT;
1068            }
1069          | '(' subselect ')'
1070            { 
1071 -            $$= new (YYTHD->mem_root) Item_singlerow_subselect($2);
1072 +            $$= new (thd->mem_root) Item_singlerow_subselect($2);
1073              if ($$ == NULL)
1074                MYSQL_YYABORT;
1075            }
1076 @@ -7352,20 +7326,20 @@
1077          | '(' expr ',' expr_list ')'
1078            {
1079              $4->push_front($2);
1080 -            $$= new (YYTHD->mem_root) Item_row(*$4);
1081 +            $$= new (thd->mem_root) Item_row(*$4);
1082              if ($$ == NULL)
1083                MYSQL_YYABORT;
1084            }
1085          | ROW_SYM '(' expr ',' expr_list ')'
1086            {
1087              $5->push_front($3);
1088 -            $$= new (YYTHD->mem_root) Item_row(*$5);
1089 +            $$= new (thd->mem_root) Item_row(*$5);
1090              if ($$ == NULL)
1091                MYSQL_YYABORT;
1092            }
1093          | EXISTS '(' subselect ')'
1094            {
1095 -            $$= new (YYTHD->mem_root) Item_exists_subselect($3);
1096 +            $$= new (thd->mem_root) Item_exists_subselect($3);
1097              if ($$ == NULL)
1098                MYSQL_YYABORT;
1099            }
1100 @@ -7374,7 +7348,7 @@
1101          | MATCH ident_list_arg AGAINST '(' bit_expr fulltext_options ')'
1102            {
1103              $2->push_front($5);
1104 -            Item_func_match *i1= new (YYTHD->mem_root) Item_func_match(*$2, $6);
1105 +            Item_func_match *i1= new (thd->mem_root) Item_func_match(*$2, $6);
1106              if (i1 == NULL)
1107                MYSQL_YYABORT;
1108              Select->add_ftfunc_to_list(i1);
1109 @@ -7382,7 +7356,7 @@
1110            }
1111          | BINARY simple_expr %prec NEG
1112            {
1113 -            $$= create_func_cast(YYTHD, $2, ITEM_CAST_CHAR, NULL, NULL,
1114 +            $$= create_func_cast(thd, $2, ITEM_CAST_CHAR, NULL, NULL,
1115                                   &my_charset_bin);
1116              if ($$ == NULL)
1117                MYSQL_YYABORT;
1118 @@ -7390,27 +7364,27 @@
1119          | CAST_SYM '(' expr AS cast_type ')'
1120            {
1121              LEX *lex= Lex;
1122 -            $$= create_func_cast(YYTHD, $3, $5, lex->length, lex->dec,
1123 +            $$= create_func_cast(thd, $3, $5, lex->length, lex->dec,
1124                                   lex->charset);
1125              if ($$ == NULL)
1126                MYSQL_YYABORT;
1127            }
1128          | CASE_SYM opt_expr when_list opt_else END
1129            {
1130 -            $$= new (YYTHD->mem_root) Item_func_case(* $3, $2, $4 );
1131 +            $$= new (thd->mem_root) Item_func_case(* $3, $2, $4 );
1132              if ($$ == NULL)
1133                MYSQL_YYABORT;
1134            }
1135          | CONVERT_SYM '(' expr ',' cast_type ')'
1136            {
1137 -            $$= create_func_cast(YYTHD, $3, $5, Lex->length, Lex->dec,
1138 +            $$= create_func_cast(thd, $3, $5, Lex->length, Lex->dec,
1139                                   Lex->charset);
1140              if ($$ == NULL)
1141                MYSQL_YYABORT;
1142            }
1143          | CONVERT_SYM '(' expr USING charset_name ')'
1144            {
1145 -            $$= new (YYTHD->mem_root) Item_func_conv_charset($3,$5);
1146 +            $$= new (thd->mem_root) Item_func_conv_charset($3,$5);
1147              if ($$ == NULL)
1148                MYSQL_YYABORT;
1149            }
1150 @@ -7423,14 +7397,14 @@
1151                my_error(ER_WRONG_COLUMN_NAME, MYF(0), il->my_name()->str);
1152                MYSQL_YYABORT;
1153              }
1154 -            $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context(),
1155 +            $$= new (thd->mem_root) Item_default_value(Lex->current_context(),
1156                                                           $3);
1157              if ($$ == NULL)
1158                MYSQL_YYABORT;
1159            }
1160          | VALUES '(' simple_ident_nospvar ')'
1161            {
1162 -            $$= new (YYTHD->mem_root) Item_insert_value(Lex->current_context(),
1163 +            $$= new (thd->mem_root) Item_insert_value(Lex->current_context(),
1164                                                          $3);
1165              if ($$ == NULL)
1166                MYSQL_YYABORT;
1167 @@ -7438,7 +7412,7 @@
1168          | INTERVAL_SYM expr interval '+' expr %prec INTERVAL_SYM
1169            /* we cannot put interval before - */
1170            {
1171 -            $$= new (YYTHD->mem_root) Item_date_add_interval($5,$2,$3,0);
1172 +            $$= new (thd->mem_root) Item_date_add_interval($5,$2,$3,0);
1173              if ($$ == NULL)
1174                MYSQL_YYABORT;
1175            }
1176 @@ -7453,19 +7427,19 @@
1177  function_call_keyword:
1178            CHAR_SYM '(' expr_list ')'
1179            {
1180 -            $$= new (YYTHD->mem_root) Item_func_char(*$3);
1181 +            $$= new (thd->mem_root) Item_func_char(*$3);
1182              if ($$ == NULL)
1183                MYSQL_YYABORT;
1184            }
1185          | CHAR_SYM '(' expr_list USING charset_name ')'
1186            {
1187 -            $$= new (YYTHD->mem_root) Item_func_char(*$3, $5);
1188 +            $$= new (thd->mem_root) Item_func_char(*$3, $5);
1189              if ($$ == NULL)
1190                MYSQL_YYABORT;
1191            }
1192          | CURRENT_USER optional_braces
1193            {
1194 -            $$= new (YYTHD->mem_root) Item_func_current_user(Lex->current_context());
1195 +            $$= new (thd->mem_root) Item_func_current_user(Lex->current_context());
1196              if ($$ == NULL)
1197                MYSQL_YYABORT;
1198              Lex->set_stmt_unsafe();
1199 @@ -7473,31 +7447,30 @@
1200            }
1201          | DATE_SYM '(' expr ')'
1202            {
1203 -            $$= new (YYTHD->mem_root) Item_date_typecast($3);
1204 +            $$= new (thd->mem_root) Item_date_typecast($3);
1205              if ($$ == NULL)
1206                MYSQL_YYABORT;
1207            }
1208          | DAY_SYM '(' expr ')'
1209            {
1210 -            $$= new (YYTHD->mem_root) Item_func_dayofmonth($3);
1211 +            $$= new (thd->mem_root) Item_func_dayofmonth($3);
1212              if ($$ == NULL)
1213                MYSQL_YYABORT;
1214            }
1215          | HOUR_SYM '(' expr ')'
1216            {
1217 -            $$= new (YYTHD->mem_root) Item_func_hour($3);
1218 +            $$= new (thd->mem_root) Item_func_hour($3);
1219              if ($$ == NULL)
1220                MYSQL_YYABORT;
1221            }
1222          | INSERT '(' expr ',' expr ',' expr ',' expr ')'
1223            {
1224 -            $$= new (YYTHD->mem_root) Item_func_insert($3,$5,$7,$9);
1225 +            $$= new (thd->mem_root) Item_func_insert($3,$5,$7,$9);
1226              if ($$ == NULL)
1227                MYSQL_YYABORT;
1228            }
1229          | INTERVAL_SYM '(' expr ',' expr ')' %prec INTERVAL_SYM
1230            {
1231 -            THD *thd= YYTHD;
1232              List<Item> *list= new (thd->mem_root) List<Item>;
1233              if (list == NULL)
1234                MYSQL_YYABORT;
1235 @@ -7512,7 +7485,6 @@
1236            }
1237          | INTERVAL_SYM '(' expr ',' expr ',' expr_list ')' %prec INTERVAL_SYM
1238            {
1239 -            THD *thd= YYTHD;
1240              $7->push_front($5);
1241              $7->push_front($3);
1242              Item_row *item= new (thd->mem_root) Item_row(*$7);
1243 @@ -7524,103 +7496,103 @@
1244            }
1245          | LEFT '(' expr ',' expr ')'
1246            {
1247 -            $$= new (YYTHD->mem_root) Item_func_left($3,$5);
1248 +            $$= new (thd->mem_root) Item_func_left($3,$5);
1249              if ($$ == NULL)
1250                MYSQL_YYABORT;
1251            }
1252          | MINUTE_SYM '(' expr ')'
1253            {
1254 -            $$= new (YYTHD->mem_root) Item_func_minute($3);
1255 +            $$= new (thd->mem_root) Item_func_minute($3);
1256              if ($$ == NULL)
1257                MYSQL_YYABORT;
1258            }
1259          | MONTH_SYM '(' expr ')'
1260            {
1261 -            $$= new (YYTHD->mem_root) Item_func_month($3);
1262 +            $$= new (thd->mem_root) Item_func_month($3);
1263              if ($$ == NULL)
1264                MYSQL_YYABORT;
1265            }
1266          | RIGHT '(' expr ',' expr ')'
1267            {
1268 -            $$= new (YYTHD->mem_root) Item_func_right($3,$5);
1269 +            $$= new (thd->mem_root) Item_func_right($3,$5);
1270              if ($$ == NULL)
1271                MYSQL_YYABORT;
1272            }
1273          | SECOND_SYM '(' expr ')'
1274            {
1275 -            $$= new (YYTHD->mem_root) Item_func_second($3);
1276 +            $$= new (thd->mem_root) Item_func_second($3);
1277              if ($$ == NULL)
1278                MYSQL_YYABORT;
1279            }
1280          | TIME_SYM '(' expr ')'
1281            {
1282 -            $$= new (YYTHD->mem_root) Item_time_typecast($3);
1283 +            $$= new (thd->mem_root) Item_time_typecast($3);
1284              if ($$ == NULL)
1285                MYSQL_YYABORT;
1286            }
1287          | TIMESTAMP '(' expr ')'
1288            {
1289 -            $$= new (YYTHD->mem_root) Item_datetime_typecast($3);
1290 +            $$= new (thd->mem_root) Item_datetime_typecast($3);
1291              if ($$ == NULL)
1292                MYSQL_YYABORT;
1293            }
1294          | TIMESTAMP '(' expr ',' expr ')'
1295            {
1296 -            $$= new (YYTHD->mem_root) Item_func_add_time($3, $5, 1, 0);
1297 +            $$= new (thd->mem_root) Item_func_add_time($3, $5, 1, 0);
1298              if ($$ == NULL)
1299                MYSQL_YYABORT;
1300            }
1301          | TRIM '(' expr ')'
1302            {
1303 -            $$= new (YYTHD->mem_root) Item_func_trim($3);
1304 +            $$= new (thd->mem_root) Item_func_trim($3);
1305              if ($$ == NULL)
1306                MYSQL_YYABORT;
1307            }
1308          | TRIM '(' LEADING expr FROM expr ')'
1309            {
1310 -            $$= new (YYTHD->mem_root) Item_func_ltrim($6,$4);
1311 +            $$= new (thd->mem_root) Item_func_ltrim($6,$4);
1312              if ($$ == NULL)
1313                MYSQL_YYABORT;
1314            }
1315          | TRIM '(' TRAILING expr FROM expr ')'
1316            {
1317 -            $$= new (YYTHD->mem_root) Item_func_rtrim($6,$4);
1318 +            $$= new (thd->mem_root) Item_func_rtrim($6,$4);
1319              if ($$ == NULL)
1320                MYSQL_YYABORT;
1321            }
1322          | TRIM '(' BOTH expr FROM expr ')'
1323            {
1324 -            $$= new (YYTHD->mem_root) Item_func_trim($6,$4);
1325 +            $$= new (thd->mem_root) Item_func_trim($6,$4);
1326              if ($$ == NULL)
1327                MYSQL_YYABORT;
1328            }
1329          | TRIM '(' LEADING FROM expr ')'
1330            {
1331 -            $$= new (YYTHD->mem_root) Item_func_ltrim($5);
1332 +            $$= new (thd->mem_root) Item_func_ltrim($5);
1333              if ($$ == NULL)
1334                MYSQL_YYABORT;
1335            }
1336          | TRIM '(' TRAILING FROM expr ')'
1337            {
1338 -            $$= new (YYTHD->mem_root) Item_func_rtrim($5);
1339 +            $$= new (thd->mem_root) Item_func_rtrim($5);
1340              if ($$ == NULL)
1341                MYSQL_YYABORT;
1342            }
1343          | TRIM '(' BOTH FROM expr ')'
1344            {
1345 -            $$= new (YYTHD->mem_root) Item_func_trim($5);
1346 +            $$= new (thd->mem_root) Item_func_trim($5);
1347              if ($$ == NULL)
1348                MYSQL_YYABORT;
1349            }
1350          | TRIM '(' expr FROM expr ')'
1351            {
1352 -            $$= new (YYTHD->mem_root) Item_func_trim($5,$3);
1353 +            $$= new (thd->mem_root) Item_func_trim($5,$3);
1354              if ($$ == NULL)
1355                MYSQL_YYABORT;
1356            }
1357          | USER '(' ')'
1358            {
1359 -            $$= new (YYTHD->mem_root) Item_func_user();
1360 +            $$= new (thd->mem_root) Item_func_user();
1361              if ($$ == NULL)
1362                MYSQL_YYABORT;
1363              Lex->set_stmt_unsafe();
1364 @@ -7628,7 +7600,7 @@
1365            }
1366          | YEAR_SYM '(' expr ')'
1367            {
1368 -            $$= new (YYTHD->mem_root) Item_func_year($3);
1369 +            $$= new (thd->mem_root) Item_func_year($3);
1370              if ($$ == NULL)
1371                MYSQL_YYABORT;
1372            }
1373 @@ -7649,34 +7621,34 @@
1374  function_call_nonkeyword:
1375            ADDDATE_SYM '(' expr ',' expr ')'
1376            {
1377 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5,
1378 +            $$= new (thd->mem_root) Item_date_add_interval($3, $5,
1379                                                               INTERVAL_DAY, 0);
1380              if ($$ == NULL)
1381                MYSQL_YYABORT;
1382            }
1383          | ADDDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
1384            {
1385 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 0);
1386 +            $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 0);
1387              if ($$ == NULL)
1388                MYSQL_YYABORT;
1389            }
1390          | CURDATE optional_braces
1391            {
1392 -            $$= new (YYTHD->mem_root) Item_func_curdate_local();
1393 +            $$= new (thd->mem_root) Item_func_curdate_local();
1394              if ($$ == NULL)
1395                MYSQL_YYABORT;
1396              Lex->safe_to_cache_query=0;
1397            }
1398          | CURTIME optional_braces
1399            {
1400 -            $$= new (YYTHD->mem_root) Item_func_curtime_local();
1401 +            $$= new (thd->mem_root) Item_func_curtime_local();
1402              if ($$ == NULL)
1403                MYSQL_YYABORT;
1404              Lex->safe_to_cache_query=0;
1405            }
1406          | CURTIME '(' expr ')'
1407            {
1408 -            $$= new (YYTHD->mem_root) Item_func_curtime_local($3);
1409 +            $$= new (thd->mem_root) Item_func_curtime_local($3);
1410              if ($$ == NULL)
1411                MYSQL_YYABORT;
1412              Lex->safe_to_cache_query=0;
1413 @@ -7684,83 +7656,83 @@
1414          | DATE_ADD_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')'
1415            %prec INTERVAL_SYM
1416            {
1417 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,0);
1418 +            $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,0);
1419              if ($$ == NULL)
1420                MYSQL_YYABORT;
1421            }
1422          | DATE_SUB_INTERVAL '(' expr ',' INTERVAL_SYM expr interval ')'
1423            %prec INTERVAL_SYM
1424            {
1425 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3,$6,$7,1);
1426 +            $$= new (thd->mem_root) Item_date_add_interval($3,$6,$7,1);
1427              if ($$ == NULL)
1428                MYSQL_YYABORT;
1429            }
1430          | EXTRACT_SYM '(' interval FROM expr ')'
1431            {
1432 -            $$=new (YYTHD->mem_root) Item_extract( $3, $5);
1433 +            $$=new (thd->mem_root) Item_extract( $3, $5);
1434              if ($$ == NULL)
1435                MYSQL_YYABORT;
1436            }
1437          | GET_FORMAT '(' date_time_type  ',' expr ')'
1438            {
1439 -            $$= new (YYTHD->mem_root) Item_func_get_format($3, $5);
1440 +            $$= new (thd->mem_root) Item_func_get_format($3, $5);
1441              if ($$ == NULL)
1442                MYSQL_YYABORT;
1443            }
1444          | NOW_SYM optional_braces
1445            {
1446 -            $$= new (YYTHD->mem_root) Item_func_now_local();
1447 +            $$= new (thd->mem_root) Item_func_now_local();
1448              if ($$ == NULL)
1449                MYSQL_YYABORT;
1450              Lex->safe_to_cache_query=0;
1451            }
1452          | NOW_SYM '(' expr ')'
1453            {
1454 -            $$= new (YYTHD->mem_root) Item_func_now_local($3);
1455 +            $$= new (thd->mem_root) Item_func_now_local($3);
1456              if ($$ == NULL)
1457                MYSQL_YYABORT;
1458              Lex->safe_to_cache_query=0;
1459            }
1460          | POSITION_SYM '(' bit_expr IN_SYM expr ')'
1461            {
1462 -            $$ = new (YYTHD->mem_root) Item_func_locate($5,$3);
1463 +            $$ = new (thd->mem_root) Item_func_locate($5,$3);
1464              if ($$ == NULL)
1465                MYSQL_YYABORT;
1466            }
1467          | SUBDATE_SYM '(' expr ',' expr ')'
1468            {
1469 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3, $5,
1470 +            $$= new (thd->mem_root) Item_date_add_interval($3, $5,
1471                                                               INTERVAL_DAY, 1);
1472              if ($$ == NULL)
1473                MYSQL_YYABORT;
1474            }
1475          | SUBDATE_SYM '(' expr ',' INTERVAL_SYM expr interval ')'
1476            {
1477 -            $$= new (YYTHD->mem_root) Item_date_add_interval($3, $6, $7, 1);
1478 +            $$= new (thd->mem_root) Item_date_add_interval($3, $6, $7, 1);
1479              if ($$ == NULL)
1480                MYSQL_YYABORT;
1481            }
1482          | SUBSTRING '(' expr ',' expr ',' expr ')'
1483            {
1484 -            $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7);
1485 +            $$= new (thd->mem_root) Item_func_substr($3,$5,$7);
1486              if ($$ == NULL)
1487                MYSQL_YYABORT;
1488            }
1489          | SUBSTRING '(' expr ',' expr ')'
1490            {
1491 -            $$= new (YYTHD->mem_root) Item_func_substr($3,$5);
1492 +            $$= new (thd->mem_root) Item_func_substr($3,$5);
1493              if ($$ == NULL)
1494                MYSQL_YYABORT;
1495            }
1496          | SUBSTRING '(' expr FROM expr FOR_SYM expr ')'
1497            {
1498 -            $$= new (YYTHD->mem_root) Item_func_substr($3,$5,$7);
1499 +            $$= new (thd->mem_root) Item_func_substr($3,$5,$7);
1500              if ($$ == NULL)
1501                MYSQL_YYABORT;
1502            }
1503          | SUBSTRING '(' expr FROM expr ')'
1504            {
1505 -            $$= new (YYTHD->mem_root) Item_func_substr($3,$5);
1506 +            $$= new (thd->mem_root) Item_func_substr($3,$5);
1507              if ($$ == NULL)
1508                MYSQL_YYABORT;
1509            }
1510 @@ -7775,9 +7747,9 @@
1511              */
1512              Lex->set_stmt_unsafe();
1513              if (global_system_variables.sysdate_is_now == 0)
1514 -              $$= new (YYTHD->mem_root) Item_func_sysdate_local();
1515 +              $$= new (thd->mem_root) Item_func_sysdate_local();
1516              else
1517 -              $$= new (YYTHD->mem_root) Item_func_now_local();
1518 +              $$= new (thd->mem_root) Item_func_now_local();
1519              if ($$ == NULL)
1520                MYSQL_YYABORT;
1521              Lex->safe_to_cache_query=0;
1522 @@ -7785,42 +7757,42 @@
1523          | SYSDATE '(' expr ')'
1524            {
1525              if (global_system_variables.sysdate_is_now == 0)
1526 -              $$= new (YYTHD->mem_root) Item_func_sysdate_local($3);
1527 +              $$= new (thd->mem_root) Item_func_sysdate_local($3);
1528              else
1529 -              $$= new (YYTHD->mem_root) Item_func_now_local($3);
1530 +              $$= new (thd->mem_root) Item_func_now_local($3);
1531              if ($$ == NULL)
1532                MYSQL_YYABORT;
1533              Lex->safe_to_cache_query=0;
1534            }
1535          | TIMESTAMP_ADD '(' interval_time_stamp ',' expr ',' expr ')'
1536            {
1537 -            $$= new (YYTHD->mem_root) Item_date_add_interval($7,$5,$3,0);
1538 +            $$= new (thd->mem_root) Item_date_add_interval($7,$5,$3,0);
1539              if ($$ == NULL)
1540                MYSQL_YYABORT;
1541            }
1542          | TIMESTAMP_DIFF '(' interval_time_stamp ',' expr ',' expr ')'
1543            {
1544 -            $$= new (YYTHD->mem_root) Item_func_timestamp_diff($5,$7,$3);
1545 +            $$= new (thd->mem_root) Item_func_timestamp_diff($5,$7,$3);
1546              if ($$ == NULL)
1547                MYSQL_YYABORT;
1548            }
1549          | UTC_DATE_SYM optional_braces
1550            {
1551 -            $$= new (YYTHD->mem_root) Item_func_curdate_utc();
1552 +            $$= new (thd->mem_root) Item_func_curdate_utc();
1553              if ($$ == NULL)
1554                MYSQL_YYABORT;
1555              Lex->safe_to_cache_query=0;
1556            }
1557          | UTC_TIME_SYM optional_braces
1558            {
1559 -            $$= new (YYTHD->mem_root) Item_func_curtime_utc();
1560 +            $$= new (thd->mem_root) Item_func_curtime_utc();
1561              if ($$ == NULL)
1562                MYSQL_YYABORT;
1563              Lex->safe_to_cache_query=0;
1564            }
1565          | UTC_TIMESTAMP_SYM optional_braces
1566            {
1567 -            $$= new (YYTHD->mem_root) Item_func_now_utc();
1568 +            $$= new (thd->mem_root) Item_func_now_utc();
1569              if ($$ == NULL)
1570                MYSQL_YYABORT;
1571              Lex->safe_to_cache_query=0;
1572 @@ -7835,62 +7807,61 @@
1573  function_call_conflict:
1574            ASCII_SYM '(' expr ')'
1575            {
1576 -            $$= new (YYTHD->mem_root) Item_func_ascii($3);
1577 +            $$= new (thd->mem_root) Item_func_ascii($3);
1578              if ($$ == NULL)
1579                MYSQL_YYABORT;
1580            }
1581          | CHARSET '(' expr ')'
1582            {
1583 -            $$= new (YYTHD->mem_root) Item_func_charset($3);
1584 +            $$= new (thd->mem_root) Item_func_charset($3);
1585              if ($$ == NULL)
1586                MYSQL_YYABORT;
1587            }
1588          | COALESCE '(' expr_list ')'
1589            {
1590 -            $$= new (YYTHD->mem_root) Item_func_coalesce(* $3);
1591 +            $$= new (thd->mem_root) Item_func_coalesce(* $3);
1592              if ($$ == NULL)
1593                MYSQL_YYABORT;
1594            }
1595          | COLLATION_SYM '(' expr ')'
1596            {
1597 -            $$= new (YYTHD->mem_root) Item_func_collation($3);
1598 +            $$= new (thd->mem_root) Item_func_collation($3);
1599              if ($$ == NULL)
1600                MYSQL_YYABORT;
1601            }
1602          | DATABASE '(' ')'
1603            {
1604 -            $$= new (YYTHD->mem_root) Item_func_database();
1605 +            $$= new (thd->mem_root) Item_func_database();
1606              if ($$ == NULL)
1607                MYSQL_YYABORT;
1608              Lex->safe_to_cache_query=0;
1609            }
1610          | IF '(' expr ',' expr ',' expr ')'
1611            {
1612 -            $$= new (YYTHD->mem_root) Item_func_if($3,$5,$7);
1613 +            $$= new (thd->mem_root) Item_func_if($3,$5,$7);
1614              if ($$ == NULL)
1615                MYSQL_YYABORT;
1616            }
1617          | MICROSECOND_SYM '(' expr ')'
1618            {
1619 -            $$= new (YYTHD->mem_root) Item_func_microsecond($3);
1620 +            $$= new (thd->mem_root) Item_func_microsecond($3);
1621              if ($$ == NULL)
1622                MYSQL_YYABORT;
1623            }
1624          | MOD_SYM '(' expr ',' expr ')'
1625            {
1626 -            $$ = new (YYTHD->mem_root) Item_func_mod($3, $5);
1627 +            $$ = new (thd->mem_root) Item_func_mod($3, $5);
1628              if ($$ == NULL)
1629                MYSQL_YYABORT;
1630            }
1631          | OLD_PASSWORD '(' expr ')'
1632            {
1633 -            $$=  new (YYTHD->mem_root) Item_func_old_password($3);
1634 +            $$=  new (thd->mem_root) Item_func_old_password($3);
1635              if ($$ == NULL)
1636                MYSQL_YYABORT;
1637            }
1638          | PASSWORD '(' expr ')'
1639            {
1640 -            THD *thd= YYTHD;
1641              Item* i1;
1642              if (thd->variables.old_passwords)
1643                i1= new (thd->mem_root) Item_func_old_password($3);
1644 @@ -7902,31 +7873,30 @@
1645            }
1646          | QUARTER_SYM '(' expr ')'
1647            {
1648 -            $$ = new (YYTHD->mem_root) Item_func_quarter($3);
1649 +            $$ = new (thd->mem_root) Item_func_quarter($3);
1650              if ($$ == NULL)
1651                MYSQL_YYABORT;
1652            }
1653          | REPEAT_SYM '(' expr ',' expr ')'
1654            {
1655 -            $$= new (YYTHD->mem_root) Item_func_repeat($3,$5);
1656 +            $$= new (thd->mem_root) Item_func_repeat($3,$5);
1657              if ($$ == NULL)
1658                MYSQL_YYABORT;
1659            }
1660          | REPLACE '(' expr ',' expr ',' expr ')'
1661            {
1662 -            $$= new (YYTHD->mem_root) Item_func_replace($3,$5,$7);
1663 +            $$= new (thd->mem_root) Item_func_replace($3,$5,$7);
1664              if ($$ == NULL)
1665                MYSQL_YYABORT;
1666            }
1667          | TRUNCATE_SYM '(' expr ',' expr ')'
1668            {
1669 -            $$= new (YYTHD->mem_root) Item_func_round($3,$5,1);
1670 +            $$= new (thd->mem_root) Item_func_round($3,$5,1);
1671              if ($$ == NULL)
1672                MYSQL_YYABORT;
1673            }
1674          | WEEK_SYM '(' expr ')'
1675            {
1676 -            THD *thd= YYTHD;
1677              Item *i1= new (thd->mem_root) Item_int((char*) "0",
1678                                             thd->variables.default_week_format,
1679                                                     1);
1680 @@ -7938,7 +7908,7 @@
1681            }
1682          | WEEK_SYM '(' expr ',' expr ')'
1683            {
1684 -            $$= new (YYTHD->mem_root) Item_func_week($3,$5);
1685 +            $$= new (thd->mem_root) Item_func_week($3,$5);
1686              if ($$ == NULL)
1687                MYSQL_YYABORT;
1688            }
1689 @@ -7960,52 +7930,52 @@
1690  geometry_function:
1691            CONTAINS_SYM '(' expr ',' expr ')'
1692            {
1693 -            $$= GEOM_NEW(YYTHD,
1694 +            $$= GEOM_NEW(thd,
1695                           Item_func_spatial_rel($3, $5,
1696                                                 Item_func::SP_CONTAINS_FUNC));
1697            }
1698          | GEOMETRYCOLLECTION '(' expr_list ')'
1699            {
1700 -            $$= GEOM_NEW(YYTHD,
1701 +            $$= GEOM_NEW(thd,
1702                           Item_func_spatial_collection(* $3,
1703                             Geometry::wkb_geometrycollection,
1704                             Geometry::wkb_point));
1705            }
1706          | LINESTRING '(' expr_list ')'
1707            {
1708 -            $$= GEOM_NEW(YYTHD,
1709 +            $$= GEOM_NEW(thd,
1710                           Item_func_spatial_collection(* $3,
1711                             Geometry::wkb_linestring,
1712                             Geometry::wkb_point));
1713            }
1714          | MULTILINESTRING '(' expr_list ')'
1715            {
1716 -            $$= GEOM_NEW(YYTHD,
1717 +            $$= GEOM_NEW(thd,
1718                           Item_func_spatial_collection(* $3,
1719                             Geometry::wkb_multilinestring,
1720                             Geometry::wkb_linestring));
1721            }
1722          | MULTIPOINT '(' expr_list ')'
1723            {
1724 -            $$= GEOM_NEW(YYTHD,
1725 +            $$= GEOM_NEW(thd,
1726                           Item_func_spatial_collection(* $3,
1727                             Geometry::wkb_multipoint,
1728                             Geometry::wkb_point));
1729            }
1730          | MULTIPOLYGON '(' expr_list ')'
1731            {
1732 -            $$= GEOM_NEW(YYTHD,
1733 +            $$= GEOM_NEW(thd,
1734                           Item_func_spatial_collection(* $3,
1735                             Geometry::wkb_multipolygon,
1736                             Geometry::wkb_polygon));
1737            }
1738          | POINT_SYM '(' expr ',' expr ')'
1739            {
1740 -            $$= GEOM_NEW(YYTHD, Item_func_point($3,$5));
1741 +            $$= GEOM_NEW(thd, Item_func_point($3,$5));
1742            }
1743          | POLYGON '(' expr_list ')'
1744            {
1745 -            $$= GEOM_NEW(YYTHD,
1746 +            $$= GEOM_NEW(thd,
1747                           Item_func_spatial_collection(* $3,
1748                             Geometry::wkb_polygon,
1749                             Geometry::wkb_linestring));
1750 @@ -8043,7 +8013,6 @@
1751            }
1752            opt_udf_expr_list ')'
1753            {
1754 -            THD *thd= YYTHD;
1755              Create_func *builder;
1756              Item *item= NULL;
1757  
1758 @@ -8097,7 +8066,6 @@
1759            }
1760          | ident '.' ident '(' opt_expr_list ')'
1761            {
1762 -            THD *thd= YYTHD;
1763              Create_qfunc *builder;
1764              Item *item= NULL;
1765  
1766 @@ -8161,7 +8129,7 @@
1767  udf_expr_list:
1768            udf_expr
1769            {
1770 -            $$= new (YYTHD->mem_root) List<Item>;
1771 +            $$= new (thd->mem_root) List<Item>;
1772              if ($$ == NULL)
1773                MYSQL_YYABORT;
1774              $$->push_back($1);
1775 @@ -8194,7 +8162,7 @@
1776                 remember_name we may get quoted or escaped names.
1777              */
1778              else if ($2->type() != Item::FIELD_ITEM)
1779 -              $2->set_name($1, (uint) ($3 - $1), YYTHD->charset());
1780 +              $2->set_name($1, (uint) ($3 - $1), thd->charset());
1781              $$= $2;
1782            }
1783          ;
1784 @@ -8202,46 +8170,46 @@
1785  sum_expr:
1786            AVG_SYM '(' in_sum_expr ')'
1787            {
1788 -            $$= new (YYTHD->mem_root) Item_sum_avg($3);
1789 +            $$= new (thd->mem_root) Item_sum_avg($3);
1790              if ($$ == NULL)
1791                MYSQL_YYABORT;
1792            }
1793          | AVG_SYM '(' DISTINCT in_sum_expr ')'
1794            {
1795 -            $$= new (YYTHD->mem_root) Item_sum_avg_distinct($4);
1796 +            $$= new (thd->mem_root) Item_sum_avg_distinct($4);
1797              if ($$ == NULL)
1798                MYSQL_YYABORT;
1799            }
1800          | BIT_AND  '(' in_sum_expr ')'
1801            {
1802 -            $$= new (YYTHD->mem_root) Item_sum_and($3);
1803 +            $$= new (thd->mem_root) Item_sum_and($3);
1804              if ($$ == NULL)
1805                MYSQL_YYABORT;
1806            }
1807          | BIT_OR  '(' in_sum_expr ')'
1808            {
1809 -            $$= new (YYTHD->mem_root) Item_sum_or($3);
1810 +            $$= new (thd->mem_root) Item_sum_or($3);
1811              if ($$ == NULL)
1812                MYSQL_YYABORT;
1813            }
1814          | BIT_XOR  '(' in_sum_expr ')'
1815            {
1816 -            $$= new (YYTHD->mem_root) Item_sum_xor($3);
1817 +            $$= new (thd->mem_root) Item_sum_xor($3);
1818              if ($$ == NULL)
1819                MYSQL_YYABORT;
1820            }
1821          | COUNT_SYM '(' opt_all '*' ')'
1822            {
1823 -            Item *item= new (YYTHD->mem_root) Item_int((int32) 0L,1);
1824 +            Item *item= new (thd->mem_root) Item_int((int32) 0L,1);
1825              if (item == NULL)
1826                MYSQL_YYABORT;
1827 -            $$= new (YYTHD->mem_root) Item_sum_count(item);
1828 +            $$= new (thd->mem_root) Item_sum_count(item);
1829              if ($$ == NULL)
1830                MYSQL_YYABORT;
1831            }
1832          | COUNT_SYM '(' in_sum_expr ')'
1833            {
1834 -            $$= new (YYTHD->mem_root) Item_sum_count($3);
1835 +            $$= new (thd->mem_root) Item_sum_count($3);
1836              if ($$ == NULL)
1837                MYSQL_YYABORT;
1838            }
1839 @@ -8251,13 +8219,13 @@
1840            { Select->in_sum_expr--; }
1841            ')'
1842            {
1843 -            $$= new (YYTHD->mem_root) Item_sum_count_distinct(* $5);
1844 +            $$= new (thd->mem_root) Item_sum_count_distinct(* $5);
1845              if ($$ == NULL)
1846                MYSQL_YYABORT;
1847            }
1848          | MIN_SYM '(' in_sum_expr ')'
1849            {
1850 -            $$= new (YYTHD->mem_root) Item_sum_min($3);
1851 +            $$= new (thd->mem_root) Item_sum_min($3);
1852              if ($$ == NULL)
1853                MYSQL_YYABORT;
1854            }
1855 @@ -8268,55 +8236,55 @@
1856          */
1857          | MIN_SYM '(' DISTINCT in_sum_expr ')'
1858            {
1859 -            $$= new (YYTHD->mem_root) Item_sum_min($4);
1860 +            $$= new (thd->mem_root) Item_sum_min($4);
1861              if ($$ == NULL)
1862                MYSQL_YYABORT;
1863            }
1864          | MAX_SYM '(' in_sum_expr ')'
1865            {
1866 -            $$= new (YYTHD->mem_root) Item_sum_max($3);
1867 +            $$= new (thd->mem_root) Item_sum_max($3);
1868              if ($$ == NULL)
1869                MYSQL_YYABORT;
1870            }
1871          | MAX_SYM '(' DISTINCT in_sum_expr ')'
1872            {
1873 -            $$= new (YYTHD->mem_root) Item_sum_max($4);
1874 +            $$= new (thd->mem_root) Item_sum_max($4);
1875              if ($$ == NULL)
1876                MYSQL_YYABORT;
1877            }
1878          | STD_SYM '(' in_sum_expr ')'
1879            {
1880 -            $$= new (YYTHD->mem_root) Item_sum_std($3, 0);
1881 +            $$= new (thd->mem_root) Item_sum_std($3, 0);
1882              if ($$ == NULL)
1883                MYSQL_YYABORT;
1884            }
1885          | VARIANCE_SYM '(' in_sum_expr ')'
1886            {
1887 -            $$= new (YYTHD->mem_root) Item_sum_variance($3, 0);
1888 +            $$= new (thd->mem_root) Item_sum_variance($3, 0);
1889              if ($$ == NULL)
1890                MYSQL_YYABORT;
1891            }
1892          | STDDEV_SAMP_SYM '(' in_sum_expr ')'
1893            {
1894 -            $$= new (YYTHD->mem_root) Item_sum_std($3, 1);
1895 +            $$= new (thd->mem_root) Item_sum_std($3, 1);
1896              if ($$ == NULL)
1897                MYSQL_YYABORT;
1898            }
1899          | VAR_SAMP_SYM '(' in_sum_expr ')'
1900            {
1901 -            $$= new (YYTHD->mem_root) Item_sum_variance($3, 1);
1902 +            $$= new (thd->mem_root) Item_sum_variance($3, 1);
1903              if ($$ == NULL)
1904                MYSQL_YYABORT;
1905            }
1906          | SUM_SYM '(' in_sum_expr ')'
1907            {
1908 -            $$= new (YYTHD->mem_root) Item_sum_sum($3);
1909 +            $$= new (thd->mem_root) Item_sum_sum($3);
1910              if ($$ == NULL)
1911                MYSQL_YYABORT;
1912            }
1913          | SUM_SYM '(' DISTINCT in_sum_expr ')'
1914            {
1915 -            $$= new (YYTHD->mem_root) Item_sum_sum_distinct($4);
1916 +            $$= new (thd->mem_root) Item_sum_sum_distinct($4);
1917              if ($$ == NULL)
1918                MYSQL_YYABORT;
1919            }
1920 @@ -8328,7 +8296,7 @@
1921            {
1922              SELECT_LEX *sel= Select;
1923              sel->in_sum_expr--;
1924 -            $$= new (YYTHD->mem_root)
1925 +            $$= new (thd->mem_root)
1926                    Item_func_group_concat(Lex->current_context(), $3, $5,
1927                                           sel->gorder_list, $7);
1928              if ($$ == NULL)
1929 @@ -8357,7 +8325,7 @@
1930            ident_or_text SET_VAR expr
1931            {
1932              Item_func_set_user_var *item;
1933 -            $$= item= new (YYTHD->mem_root) Item_func_set_user_var($1, $3);
1934 +            $$= item= new (thd->mem_root) Item_func_set_user_var($1, $3);
1935              if ($$ == NULL)
1936                MYSQL_YYABORT;
1937              LEX *lex= Lex;
1938 @@ -8366,7 +8334,7 @@
1939            }
1940          | ident_or_text
1941            {
1942 -            $$= new (YYTHD->mem_root) Item_func_get_user_var($1);
1943 +            $$= new (thd->mem_root) Item_func_get_user_var($1);
1944              if ($$ == NULL)
1945                MYSQL_YYABORT;
1946              LEX *lex= Lex;
1947 @@ -8380,7 +8348,7 @@
1948                my_parse_error(ER(ER_SYNTAX_ERROR));
1949                MYSQL_YYABORT;
1950              }
1951 -            if (!($$= get_system_var(YYTHD, $2, $3, $4)))
1952 +            if (!($$= get_system_var(thd, $2, $3, $4)))
1953                MYSQL_YYABORT;
1954              if (!((Item_func_get_system_var*) $$)->is_written_to_binlog())
1955                Lex->set_stmt_unsafe();
1956 @@ -8395,7 +8363,7 @@
1957  opt_gconcat_separator:
1958            /* empty */
1959            {
1960 -            $$= new (YYTHD->mem_root) String(",", 1, &my_charset_latin1);
1961 +            $$= new (thd->mem_root) String(",", 1, &my_charset_latin1);
1962              if ($$ == NULL)
1963                MYSQL_YYABORT;
1964            }
1965 @@ -8422,9 +8390,9 @@
1966  
1967  gorder_list:
1968            gorder_list ',' order_ident order_dir
1969 -          { if (add_gorder_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; }
1970 +          { if (add_gorder_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; }
1971          | order_ident order_dir
1972 -          { if (add_gorder_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; }
1973 +          { if (add_gorder_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; }
1974          ;
1975  
1976  in_sum_expr:
1977 @@ -8477,7 +8445,7 @@
1978  expr_list:
1979            expr
1980            {
1981 -            $$= new (YYTHD->mem_root) List<Item>;
1982 +            $$= new (thd->mem_root) List<Item>;
1983              if ($$ == NULL)
1984                MYSQL_YYABORT;
1985              $$->push_back($1);
1986 @@ -8497,7 +8465,7 @@
1987  ident_list:
1988            simple_ident
1989            {
1990 -            $$= new (YYTHD->mem_root) List<Item>;
1991 +            $$= new (thd->mem_root) List<Item>;
1992              if ($$ == NULL)
1993                MYSQL_YYABORT;
1994              $$->push_back($1);
1995 @@ -8595,7 +8563,7 @@
1996            {
1997              MYSQL_YYABORT_UNLESS($1 && $3);
1998              /* Change the current name resolution context to a local context. */
1999 -            if (push_new_name_resolution_context(YYTHD, $1, $3))
2000 +            if (push_new_name_resolution_context(thd, $1, $3))
2001                MYSQL_YYABORT;
2002              Select->parsing_place= IN_ON;
2003            }
2004 @@ -8610,7 +8578,7 @@
2005            {
2006              MYSQL_YYABORT_UNLESS($1 && $3);
2007              /* Change the current name resolution context to a local context. */
2008 -            if (push_new_name_resolution_context(YYTHD, $1, $3))
2009 +            if (push_new_name_resolution_context(thd, $1, $3))
2010                MYSQL_YYABORT;
2011              Select->parsing_place= IN_ON;
2012            }
2013 @@ -8640,7 +8608,7 @@
2014            {
2015              MYSQL_YYABORT_UNLESS($1 && $5);
2016              /* Change the current name resolution context to a local context. */
2017 -            if (push_new_name_resolution_context(YYTHD, $1, $5))
2018 +            if (push_new_name_resolution_context(thd, $1, $5))
2019                MYSQL_YYABORT;
2020              Select->parsing_place= IN_ON;
2021            }
2022 @@ -8676,7 +8644,7 @@
2023            {
2024              MYSQL_YYABORT_UNLESS($1 && $5);
2025              /* Change the current name resolution context to a local context. */
2026 -            if (push_new_name_resolution_context(YYTHD, $1, $5))
2027 +            if (push_new_name_resolution_context(thd, $1, $5))
2028                MYSQL_YYABORT;
2029              Select->parsing_place= IN_ON;
2030            }
2031 @@ -8724,7 +8692,7 @@
2032            }
2033            table_ident opt_table_alias opt_key_definition
2034            {
2035 -            if (!($$= Select->add_table_to_list(YYTHD, $2, $3,
2036 +            if (!($$= Select->add_table_to_list(thd, $2, $3,
2037                                                  Select->get_table_join_options(),
2038                                                  Lex->lock_option,
2039                                                  Select->pop_index_hints())))
2040 @@ -8922,7 +8890,7 @@
2041  
2042  opt_index_hints_list:
2043            /* empty */
2044 -        | { Select->alloc_index_hints(YYTHD); } index_hints_list
2045 +        | { Select->alloc_index_hints(thd); } index_hints_list
2046          ;
2047  
2048  opt_key_definition:
2049 @@ -8931,15 +8899,15 @@
2050          ;
2051  
2052  opt_key_usage_list:
2053 -          /* empty */ { Select->add_index_hint(YYTHD, NULL, 0); }
2054 +          /* empty */ { Select->add_index_hint(thd, NULL, 0); }
2055          | key_usage_list {}
2056          ;
2057  
2058  key_usage_element:
2059            ident
2060 -          { Select->add_index_hint(YYTHD, $1.str, $1.length); }
2061 +          { Select->add_index_hint(thd, $1.str, $1.length); }
2062          | PRIMARY_SYM
2063 -          { Select->add_index_hint(YYTHD, (char *)"PRIMARY", 7); }
2064 +          { Select->add_index_hint(thd, (char *)"PRIMARY", 7); }
2065          ;
2066  
2067  key_usage_list:
2068 @@ -8952,7 +8920,7 @@
2069            {
2070              if (!($$= new List<String>))
2071                MYSQL_YYABORT;
2072 -            String *s= new (YYTHD->mem_root) String((const char *) $1.str,
2073 +            String *s= new (thd->mem_root) String((const char *) $1.str,
2074                                                      $1.length,
2075                                                      system_charset_info);
2076              if (s == NULL)
2077 @@ -8961,7 +8929,7 @@
2078            }
2079          | using_list ',' ident
2080            {
2081 -            String *s= new (YYTHD->mem_root) String((const char *) $3.str,
2082 +            String *s= new (thd->mem_root) String((const char *) $3.str,
2083                                                      $3.length,
2084                                                      system_charset_info);
2085              if (s == NULL)
2086 @@ -9002,7 +8970,7 @@
2087                                      implementation without changing its
2088                                      resolution.
2089                                    */
2090 -                                  WARN_DEPRECATED(yythd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
2091 +                                  WARN_DEPRECATED(thd, VER_CELOSIA, "FRAC_SECOND", "MICROSECOND");
2092                                  }
2093         ;
2094  
2095 @@ -9086,7 +9054,6 @@
2096            }
2097          | /* empty */
2098            {
2099 -            THD *thd= YYTHD;
2100              Lex->escape_used= FALSE;
2101              $$= ((thd->variables.sql_mode & MODE_NO_BACKSLASH_ESCAPES) ?
2102                   new (thd->mem_root) Item_string("", 0, &my_charset_latin1) :
2103 @@ -9107,9 +9074,9 @@
2104  
2105  group_list:
2106            group_list ',' order_ident order_dir
2107 -          { if (add_group_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; }
2108 +          { if (add_group_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; }
2109          | order_ident order_dir
2110 -          { if (add_group_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; }
2111 +          { if (add_group_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; }
2112          ;
2113  
2114  olap_opt:
2115 @@ -9156,7 +9123,6 @@
2116  alter_order_item:
2117            simple_ident_nospvar order_dir
2118            {
2119 -            THD *thd= YYTHD;
2120              bool ascending= ($2 == 1) ? true : false;
2121              if (add_order_to_list(thd, $1, ascending))
2122                MYSQL_YYABORT;
2123 @@ -9209,9 +9175,9 @@
2124  
2125  order_list:
2126            order_list ',' order_ident order_dir
2127 -          { if (add_order_to_list(YYTHD, $3,(bool) $4)) MYSQL_YYABORT; }
2128 +          { if (add_order_to_list(thd, $3,(bool) $4)) MYSQL_YYABORT; }
2129          | order_ident order_dir
2130 -          { if (add_order_to_list(YYTHD, $1,(bool) $2)) MYSQL_YYABORT; }
2131 +          { if (add_order_to_list(thd, $1,(bool) $2)) MYSQL_YYABORT; }
2132          ;
2133  
2134  order_dir:
2135 @@ -9271,19 +9237,19 @@
2136          }
2137          | ULONGLONG_NUM
2138            {
2139 -            $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length);
2140 +            $$= new (thd->mem_root) Item_uint($1.str, $1.length);
2141              if ($$ == NULL)
2142                MYSQL_YYABORT;
2143            }
2144          | LONG_NUM
2145            {
2146 -            $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length);
2147 +            $$= new (thd->mem_root) Item_uint($1.str, $1.length);
2148              if ($$ == NULL)
2149                MYSQL_YYABORT;
2150            }
2151          | NUM
2152            {
2153 -            $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length);
2154 +            $$= new (thd->mem_root) Item_uint($1.str, $1.length);
2155              if ($$ == NULL)
2156                MYSQL_YYABORT;
2157            }
2158 @@ -9365,7 +9331,7 @@
2159              lex->proc_list.elements=0;
2160              lex->proc_list.first=0;
2161              lex->proc_list.next= &lex->proc_list.first;
2162 -            Item_field *item= new (YYTHD->mem_root)
2163 +            Item_field *item= new (thd->mem_root)
2164                                  Item_field(&lex->current_select->context,
2165                                             NULL, NULL, $2.str);
2166              if (item == NULL)
2167 @@ -9390,8 +9356,7 @@
2168  procedure_item:
2169            remember_name expr remember_end
2170            {
2171 -            THD *thd= YYTHD;
2172 -
2173 +            
2174              if (add_proc_to_list(thd, $2))
2175                MYSQL_YYABORT;
2176              if (!$2->name)
2177 @@ -9560,7 +9525,6 @@
2178            }
2179          | DROP FUNCTION_SYM if_exists ident '.' ident
2180            {
2181 -            THD *thd= YYTHD;
2182              LEX *lex= thd->lex;
2183              sp_name *spname;
2184              if ($4.str && check_db_name(&$4))
2185 @@ -9583,7 +9547,6 @@
2186            }
2187          | DROP FUNCTION_SYM if_exists ident
2188            {
2189 -            THD *thd= YYTHD;
2190              LEX *lex= thd->lex;
2191              LEX_STRING db= {0, 0};
2192              sp_name *spname;
2193 @@ -9664,7 +9627,7 @@
2194  table_name:
2195            table_ident
2196            {
2197 -            if (!Select->add_table_to_list(YYTHD, $1, NULL, TL_OPTION_UPDATING))
2198 +            if (!Select->add_table_to_list(thd, $1, NULL, TL_OPTION_UPDATING))
2199                MYSQL_YYABORT;
2200            }
2201          ;
2202 @@ -9677,7 +9640,7 @@
2203  table_alias_ref:
2204            table_ident_opt_wild
2205            {
2206 -            if (!Select->add_table_to_list(YYTHD, $1, NULL,
2207 +            if (!Select->add_table_to_list(thd, $1, NULL,
2208                                             TL_OPTION_UPDATING | TL_OPTION_ALIAS,
2209                                             Lex->lock_option ))
2210                MYSQL_YYABORT;
2211 @@ -9868,7 +9831,7 @@
2212            expr { $$= $1;}
2213          | DEFAULT
2214            {
2215 -            $$= new (YYTHD->mem_root) Item_default_value(Lex->current_context());
2216 +            $$= new (thd->mem_root) Item_default_value(Lex->current_context());
2217              if ($$ == NULL)
2218                MYSQL_YYABORT;
2219            }
2220 @@ -9922,7 +9885,7 @@
2221  update_elem:
2222            simple_ident_nospvar equal expr_or_default
2223            {
2224 -            if (add_item_to_list(YYTHD, $1) || add_value_to_list(YYTHD, $3))
2225 +            if (add_item_to_list(thd, $1) || add_value_to_list(thd, $3))
2226                MYSQL_YYABORT;
2227            }
2228          ;
2229 @@ -9965,7 +9928,7 @@
2230  single_multi:
2231            FROM table_ident
2232            {
2233 -            if (!Select->add_table_to_list(YYTHD, $2, NULL, TL_OPTION_UPDATING,
2234 +            if (!Select->add_table_to_list(thd, $2, NULL, TL_OPTION_UPDATING,
2235                                             Lex->lock_option))
2236                MYSQL_YYABORT;
2237            }
2238 @@ -9998,7 +9961,7 @@
2239              Table_ident *ti= new Table_ident($1);
2240              if (ti == NULL)
2241                MYSQL_YYABORT;
2242 -            if (!Select->add_table_to_list(YYTHD,
2243 +            if (!Select->add_table_to_list(thd,
2244                                             ti,
2245                                             $3,
2246                                             TL_OPTION_UPDATING | TL_OPTION_ALIAS,
2247 @@ -10007,10 +9970,10 @@
2248            }
2249          | ident '.' ident opt_wild opt_table_alias
2250            {
2251 -            Table_ident *ti= new Table_ident(YYTHD, $1, $3, 0);
2252 +            Table_ident *ti= new Table_ident(thd, $1, $3, 0);
2253              if (ti == NULL)
2254                MYSQL_YYABORT;
2255 -            if (!Select->add_table_to_list(YYTHD,
2256 +            if (!Select->add_table_to_list(thd,
2257                                             ti,
2258                                             $5, 
2259                                             TL_OPTION_UPDATING | TL_OPTION_ALIAS,
2260 @@ -10130,7 +10093,7 @@
2261             {
2262               LEX *lex= Lex;
2263               lex->sql_command= SQLCOM_SHOW_DATABASES;
2264 -             if (prepare_schema_table(YYTHD, lex, 0, SCH_SCHEMATA))
2265 +             if (prepare_schema_table(thd, lex, 0, SCH_SCHEMATA))
2266                 MYSQL_YYABORT;
2267             }
2268           | opt_full TABLES opt_db wild_and_where
2269 @@ -10138,7 +10101,7 @@
2270               LEX *lex= Lex;
2271               lex->sql_command= SQLCOM_SHOW_TABLES;
2272               lex->select_lex.db= $3;
2273 -             if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_NAMES))
2274 +             if (prepare_schema_table(thd, lex, 0, SCH_TABLE_NAMES))
2275                 MYSQL_YYABORT;
2276             }
2277           | opt_full TRIGGERS_SYM opt_db wild_and_where
2278 @@ -10146,7 +10109,7 @@
2279               LEX *lex= Lex;
2280               lex->sql_command= SQLCOM_SHOW_TRIGGERS;
2281               lex->select_lex.db= $3;
2282 -             if (prepare_schema_table(YYTHD, lex, 0, SCH_TRIGGERS))
2283 +             if (prepare_schema_table(thd, lex, 0, SCH_TRIGGERS))
2284                 MYSQL_YYABORT;
2285             }
2286           | EVENTS_SYM opt_db wild_and_where
2287 @@ -10154,7 +10117,7 @@
2288               LEX *lex= Lex;
2289               lex->sql_command= SQLCOM_SHOW_EVENTS;
2290               lex->select_lex.db= $2;
2291 -             if (prepare_schema_table(YYTHD, lex, 0, SCH_EVENTS))
2292 +             if (prepare_schema_table(thd, lex, 0, SCH_EVENTS))
2293                 MYSQL_YYABORT;
2294             }
2295           | TABLE_SYM STATUS_SYM opt_db wild_and_where
2296 @@ -10162,7 +10125,7 @@
2297               LEX *lex= Lex;
2298               lex->sql_command= SQLCOM_SHOW_TABLE_STATUS;
2299               lex->select_lex.db= $3;
2300 -             if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLES))
2301 +             if (prepare_schema_table(thd, lex, 0, SCH_TABLES))
2302                 MYSQL_YYABORT;
2303             }
2304          | OPEN_SYM TABLES opt_db wild_and_where
2305 @@ -10170,22 +10133,22 @@
2306              LEX *lex= Lex;
2307              lex->sql_command= SQLCOM_SHOW_OPEN_TABLES;
2308              lex->select_lex.db= $3;
2309 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_OPEN_TABLES))
2310 +            if (prepare_schema_table(thd, lex, 0, SCH_OPEN_TABLES))
2311                MYSQL_YYABORT;
2312            }
2313          | opt_full PLUGIN_SYM
2314            {
2315              LEX *lex= Lex;
2316 -            WARN_DEPRECATED(yythd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
2317 +            WARN_DEPRECATED(thd, "6.0", "SHOW PLUGIN", "'SHOW PLUGINS'");
2318              lex->sql_command= SQLCOM_SHOW_PLUGINS;
2319 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS))
2320 +            if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS))
2321                MYSQL_YYABORT;
2322            }
2323          | PLUGINS_SYM
2324            {
2325              LEX *lex= Lex;
2326              lex->sql_command= SQLCOM_SHOW_PLUGINS;
2327 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_PLUGINS))
2328 +            if (prepare_schema_table(thd, lex, 0, SCH_PLUGINS))
2329                MYSQL_YYABORT;
2330            }
2331          | ENGINE_SYM known_storage_engines show_engine_param
2332 @@ -10198,7 +10161,7 @@
2333              lex->sql_command= SQLCOM_SHOW_FIELDS;
2334              if ($5)
2335                $4->change_db($5);
2336 -            if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS))
2337 +            if (prepare_schema_table(thd, lex, $4, SCH_COLUMNS))
2338                MYSQL_YYABORT;
2339            }
2340          | NEW_SYM MASTER_SYM FOR_SYM SLAVE
2341 @@ -10233,7 +10196,7 @@
2342              lex->sql_command= SQLCOM_SHOW_KEYS;
2343              if ($4)
2344                $3->change_db($4);
2345 -            if (prepare_schema_table(YYTHD, lex, $3, SCH_STATISTICS))
2346 +            if (prepare_schema_table(thd, lex, $3, SCH_STATISTICS))
2347                MYSQL_YYABORT;
2348            }
2349          | COLUMN_SYM TYPES_SYM
2350 @@ -10245,15 +10208,15 @@
2351            {
2352              LEX *lex=Lex;
2353              lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES;
2354 -            WARN_DEPRECATED(yythd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
2355 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES))
2356 +            WARN_DEPRECATED(thd, "6.0", "SHOW TABLE TYPES", "'SHOW [STORAGE] ENGINES'");
2357 +            if (prepare_schema_table(thd, lex, 0, SCH_ENGINES))
2358                MYSQL_YYABORT;
2359            }
2360          | opt_storage ENGINES_SYM
2361            {
2362              LEX *lex=Lex;
2363              lex->sql_command= SQLCOM_SHOW_STORAGE_ENGINES;
2364 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_ENGINES))
2365 +            if (prepare_schema_table(thd, lex, 0, SCH_ENGINES))
2366                MYSQL_YYABORT;
2367            }
2368          | AUTHORS_SYM
2369 @@ -10285,7 +10248,7 @@
2370            { 
2371              LEX *lex= Lex;
2372              lex->sql_command= SQLCOM_SHOW_PROFILE;
2373 -            if (prepare_schema_table(YYTHD, lex, NULL, SCH_PROFILES) != 0)
2374 +            if (prepare_schema_table(thd, lex, NULL, SCH_PROFILES) != 0)
2375                YYABORT;
2376            }
2377          | opt_var_type STATUS_SYM wild_and_where
2378 @@ -10293,7 +10256,7 @@
2379              LEX *lex= Lex;
2380              lex->sql_command= SQLCOM_SHOW_STATUS;
2381              lex->option_type= $1;
2382 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_STATUS))
2383 +            if (prepare_schema_table(thd, lex, 0, SCH_STATUS))
2384                MYSQL_YYABORT;
2385            }
2386          | INNOBASE_SYM STATUS_SYM
2387 @@ -10301,24 +10264,24 @@
2388              LEX *lex= Lex;
2389              lex->sql_command = SQLCOM_SHOW_ENGINE_STATUS;
2390              if (!(lex->create_info.db_type=
2391 -                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
2392 +                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
2393              {
2394                my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
2395                MYSQL_YYABORT;
2396              }
2397 -            WARN_DEPRECATED(yythd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
2398 +            WARN_DEPRECATED(thd, "6.0", "SHOW INNODB STATUS", "'SHOW ENGINE INNODB STATUS'");
2399            }
2400          | MUTEX_SYM STATUS_SYM
2401            {
2402              LEX *lex= Lex;
2403              lex->sql_command = SQLCOM_SHOW_ENGINE_MUTEX;
2404              if (!(lex->create_info.db_type=
2405 -                  ha_resolve_by_legacy_type(YYTHD, DB_TYPE_INNODB)))
2406 +                  ha_resolve_by_legacy_type(thd, DB_TYPE_INNODB)))
2407              {
2408                my_error(ER_UNKNOWN_STORAGE_ENGINE, MYF(0), "InnoDB");
2409                MYSQL_YYABORT;
2410              }
2411 -            WARN_DEPRECATED(yythd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
2412 +            WARN_DEPRECATED(thd, "6.0", "SHOW MUTEX STATUS", "'SHOW ENGINE INNODB MUTEX'");
2413            }
2414          | opt_full PROCESSLIST_SYM
2415            { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;}
2416 @@ -10327,21 +10290,21 @@
2417              LEX *lex= Lex;
2418              lex->sql_command= SQLCOM_SHOW_VARIABLES;
2419              lex->option_type= $1;
2420 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_VARIABLES))
2421 +            if (prepare_schema_table(thd, lex, 0, SCH_VARIABLES))
2422                MYSQL_YYABORT;
2423            }
2424          | charset wild_and_where
2425            {
2426              LEX *lex= Lex;
2427              lex->sql_command= SQLCOM_SHOW_CHARSETS;
2428 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_CHARSETS))
2429 +            if (prepare_schema_table(thd, lex, 0, SCH_CHARSETS))
2430                MYSQL_YYABORT;
2431            }
2432          | COLLATION_SYM wild_and_where
2433            {
2434              LEX *lex= Lex;
2435              lex->sql_command= SQLCOM_SHOW_COLLATIONS;
2436 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_COLLATIONS))
2437 +            if (prepare_schema_table(thd, lex, 0, SCH_COLLATIONS))
2438                MYSQL_YYABORT;
2439            }
2440          | GRANTS
2441 @@ -10371,7 +10334,7 @@
2442            {
2443              LEX *lex= Lex;
2444              lex->sql_command = SQLCOM_SHOW_CREATE;
2445 -            if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL,0))
2446 +            if (!lex->select_lex.add_table_to_list(thd, $3, NULL,0))
2447                MYSQL_YYABORT;
2448              lex->only_view= 0;
2449              lex->create_info.storage_media= HA_SM_DEFAULT;
2450 @@ -10380,7 +10343,7 @@
2451            {
2452              LEX *lex= Lex;
2453              lex->sql_command = SQLCOM_SHOW_CREATE;
2454 -            if (!lex->select_lex.add_table_to_list(YYTHD, $3, NULL, 0))
2455 +            if (!lex->select_lex.add_table_to_list(thd, $3, NULL, 0))
2456                MYSQL_YYABORT;
2457              lex->only_view= 1;
2458            }
2459 @@ -10416,14 +10379,14 @@
2460            {
2461              LEX *lex= Lex;
2462              lex->sql_command= SQLCOM_SHOW_STATUS_PROC;
2463 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES))
2464 +            if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES))
2465                MYSQL_YYABORT;
2466            }
2467          | FUNCTION_SYM STATUS_SYM wild_and_where
2468            {
2469              LEX *lex= Lex;
2470              lex->sql_command= SQLCOM_SHOW_STATUS_FUNC;
2471 -            if (prepare_schema_table(YYTHD, lex, 0, SCH_PROCEDURES))
2472 +            if (prepare_schema_table(thd, lex, 0, SCH_PROCEDURES))
2473                MYSQL_YYABORT;
2474            }
2475          | PROCEDURE CODE_SYM sp_name
2476 @@ -10501,7 +10464,7 @@
2477            /* empty */
2478          | LIKE TEXT_STRING_sys
2479            {
2480 -            Lex->wild= new (YYTHD->mem_root) String($2.str, $2.length,
2481 +            Lex->wild= new (thd->mem_root) String($2.str, $2.length,
2482                                                      system_charset_info);
2483              if (Lex->wild == NULL)
2484                MYSQL_YYABORT;
2485 @@ -10525,7 +10488,7 @@
2486              lex->sql_command= SQLCOM_SHOW_FIELDS;
2487              lex->select_lex.db= 0;
2488              lex->verbose= 0;
2489 -            if (prepare_schema_table(YYTHD, lex, $2, SCH_COLUMNS))
2490 +            if (prepare_schema_table(thd, lex, $2, SCH_COLUMNS))
2491                MYSQL_YYABORT;
2492            }
2493            opt_describe_column {}
2494 @@ -10554,7 +10517,7 @@
2495          | text_string { Lex->wild= $1; }
2496          | ident
2497            {
2498 -            Lex->wild= new (YYTHD->mem_root) String((const char*) $1.str,
2499 +            Lex->wild= new (thd->mem_root) String((const char*) $1.str,
2500                                                      $1.length,
2501                                                      system_charset_info);
2502              if (Lex->wild == NULL)
2503 @@ -10697,7 +10660,6 @@
2504  load:
2505            LOAD DATA_SYM
2506            {
2507 -            THD *thd= YYTHD;
2508              LEX *lex= thd->lex;
2509  
2510              if (lex->sphead)
2511 @@ -10711,7 +10673,7 @@
2512          | LOAD TABLE_SYM table_ident FROM MASTER_SYM
2513            {
2514              LEX *lex=Lex;
2515 -            WARN_DEPRECATED(yythd, "6.0", "LOAD TABLE FROM MASTER",
2516 +            WARN_DEPRECATED(thd, "6.0", "LOAD TABLE FROM MASTER",
2517                              "MySQL Administrator (mysqldump, mysql)");
2518              if (lex->sphead)
2519              {
2520 @@ -10719,7 +10681,7 @@
2521                MYSQL_YYABORT;
2522              }
2523              lex->sql_command = SQLCOM_LOAD_MASTER_TABLE;
2524 -            if (!Select->add_table_to_list(YYTHD, $3, NULL, TL_OPTION_UPDATING))
2525 +            if (!Select->add_table_to_list(thd, $3, NULL, TL_OPTION_UPDATING))
2526                MYSQL_YYABORT;
2527            }
2528          ;
2529 @@ -10739,7 +10701,7 @@
2530            opt_duplicate INTO TABLE_SYM table_ident
2531            {
2532              LEX *lex=Lex;
2533 -            if (!Select->add_table_to_list(YYTHD, $9, NULL, TL_OPTION_UPDATING,
2534 +            if (!Select->add_table_to_list(thd, $9, NULL, TL_OPTION_UPDATING,
2535                                             lex->lock_option))
2536                MYSQL_YYABORT;
2537              lex->field_list.empty();
2538 @@ -10754,7 +10716,7 @@
2539          | FROM MASTER_SYM
2540            {
2541              Lex->sql_command = SQLCOM_LOAD_MASTER_DATA;
2542 -            WARN_DEPRECATED(yythd, "6.0", "LOAD DATA FROM MASTER",
2543 +            WARN_DEPRECATED(thd, "6.0", "LOAD DATA FROM MASTER",
2544                              "mysqldump or future "
2545                              "BACKUP/RESTORE DATABASE facility");
2546            }
2547 @@ -10872,7 +10834,7 @@
2548            simple_ident_nospvar {$$= $1;}
2549          | '@' ident_or_text
2550            {
2551 -            $$= new (YYTHD->mem_root) Item_user_var_as_out_param($2);
2552 +            $$= new (thd->mem_root) Item_user_var_as_out_param($2);
2553              if ($$ == NULL)
2554                MYSQL_YYABORT;
2555            }
2556 @@ -10889,7 +10851,6 @@
2557            TEXT_STRING
2558            {
2559              LEX_STRING tmp;
2560 -            THD *thd= YYTHD;
2561              CHARSET_INFO *cs_con= thd->variables.collation_connection;
2562              CHARSET_INFO *cs_cli= thd->variables.character_set_client;
2563              uint repertoire= thd->lex->text_string_is_7bit &&
2564 @@ -10915,7 +10876,7 @@
2565              uint repertoire= Lex->text_string_is_7bit ?
2566                               MY_REPERTOIRE_ASCII : MY_REPERTOIRE_UNICODE30;
2567              DBUG_ASSERT(my_charset_is_ascii_based(national_charset_info));
2568 -            $$= new (YYTHD->mem_root) Item_string($1.str, $1.length,
2569 +            $$= new (thd->mem_root) Item_string($1.str, $1.length,
2570                                                    national_charset_info,
2571                                                    DERIVATION_COERCIBLE,
2572                                                    repertoire);
2573 @@ -10924,7 +10885,7 @@
2574            }
2575          | UNDERSCORE_CHARSET TEXT_STRING
2576            {
2577 -            Item_string *str= new (YYTHD->mem_root) Item_string($2.str,
2578 +            Item_string *str= new (thd->mem_root) Item_string($2.str,
2579                                                                  $2.length, $1);
2580              if (str == NULL)
2581                MYSQL_YYABORT;
2582 @@ -10943,7 +10904,7 @@
2583                   If the string has been pure ASCII so far,
2584                   check the new part.
2585                */
2586 -              CHARSET_INFO *cs= YYTHD->variables.collation_connection;
2587 +              CHARSET_INFO *cs= thd->variables.collation_connection;
2588                item->collation.repertoire|= my_string_repertoire(cs,
2589                                                                  $2.str,
2590                                                                  $2.length);
2591 @@ -10954,15 +10915,15 @@
2592  text_string:
2593            TEXT_STRING_literal
2594            {
2595 -            $$= new (YYTHD->mem_root) String($1.str,
2596 +            $$= new (thd->mem_root) String($1.str,
2597                                               $1.length,
2598 -                                             YYTHD->variables.collation_connection);
2599 +                                             thd->variables.collation_connection);
2600              if ($$ == NULL)
2601                MYSQL_YYABORT;
2602            }
2603          | HEX_NUM
2604            {
2605 -            Item *tmp= new (YYTHD->mem_root) Item_hex_string($1.str, $1.length);
2606 +            Item *tmp= new (thd->mem_root) Item_hex_string($1.str, $1.length);
2607              if (tmp == NULL)
2608                MYSQL_YYABORT;
2609              /*
2610 @@ -10974,7 +10935,7 @@
2611            }
2612          | BIN_NUM
2613            {
2614 -            Item *tmp= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length);
2615 +            Item *tmp= new (thd->mem_root) Item_bin_string($1.str, $1.length);
2616              if (tmp == NULL)
2617                MYSQL_YYABORT;
2618              /*
2619 @@ -10989,7 +10950,6 @@
2620  param_marker:
2621            PARAM_MARKER
2622            {
2623 -            THD *thd= YYTHD;
2624              LEX *lex= thd->lex;
2625              Lex_input_stream *lip= YYLIP;
2626              Item_param *item;
2627 @@ -11022,38 +10982,38 @@
2628          | NUM_literal { $$ = $1; }
2629          | NULL_SYM
2630            {
2631 -            $$ = new (YYTHD->mem_root) Item_null();
2632 +            $$ = new (thd->mem_root) Item_null();
2633              if ($$ == NULL)
2634                MYSQL_YYABORT;
2635              YYLIP->next_state= MY_LEX_OPERATOR_OR_IDENT;
2636            }
2637          | FALSE_SYM
2638            {
2639 -            $$= new (YYTHD->mem_root) Item_int((char*) "FALSE",0,1);
2640 +            $$= new (thd->mem_root) Item_int((char*) "FALSE",0,1);
2641              if ($$ == NULL)
2642                MYSQL_YYABORT;
2643            }
2644          | TRUE_SYM
2645            {
2646 -            $$= new (YYTHD->mem_root) Item_int((char*) "TRUE",1,1);
2647 +            $$= new (thd->mem_root) Item_int((char*) "TRUE",1,1);
2648              if ($$ == NULL)
2649                MYSQL_YYABORT;
2650            }
2651          | HEX_NUM
2652            {
2653 -            $$ = new (YYTHD->mem_root) Item_hex_string($1.str, $1.length);
2654 +            $$ = new (thd->mem_root) Item_hex_string($1.str, $1.length);
2655              if ($$ == NULL)
2656                MYSQL_YYABORT;
2657            }
2658          | BIN_NUM
2659            {
2660 -            $$= new (YYTHD->mem_root) Item_bin_string($1.str, $1.length);
2661 +            $$= new (thd->mem_root) Item_bin_string($1.str, $1.length);
2662              if ($$ == NULL)
2663                MYSQL_YYABORT;
2664            }
2665          | UNDERSCORE_CHARSET HEX_NUM
2666            {
2667 -            Item *tmp= new (YYTHD->mem_root) Item_hex_string($2.str, $2.length);
2668 +            Item *tmp= new (thd->mem_root) Item_hex_string($2.str, $2.length);
2669              if (tmp == NULL)
2670                MYSQL_YYABORT;
2671              /*
2672 @@ -11064,7 +11024,7 @@
2673              String *str= tmp->val_str((String*) 0);
2674  
2675              Item_string *item_str;
2676 -            item_str= new (YYTHD->mem_root)
2677 +            item_str= new (thd->mem_root)
2678                          Item_string(NULL, /* name will be set in select_item */
2679                                      str ? str->ptr() : "",
2680                                      str ? str->length() : 0,
2681 @@ -11082,7 +11042,7 @@
2682            }
2683          | UNDERSCORE_CHARSET BIN_NUM
2684            {
2685 -            Item *tmp= new (YYTHD->mem_root) Item_bin_string($2.str, $2.length);
2686 +            Item *tmp= new (thd->mem_root) Item_bin_string($2.str, $2.length);
2687              if (tmp == NULL)
2688                MYSQL_YYABORT;
2689              /*
2690 @@ -11093,7 +11053,7 @@
2691              String *str= tmp->val_str((String*) 0);
2692  
2693              Item_string *item_str;
2694 -            item_str= new (YYTHD->mem_root)
2695 +            item_str= new (thd->mem_root)
2696                          Item_string(NULL, /* name will be set in select_item */
2697                                      str ? str->ptr() : "",
2698                                      str ? str->length() : 0,
2699 @@ -11117,7 +11077,7 @@
2700            NUM
2701            {
2702              int error;
2703 -            $$= new (YYTHD->mem_root)
2704 +            $$= new (thd->mem_root)
2705                    Item_int($1.str,
2706                             (longlong) my_strtoll10($1.str, NULL, &error),
2707                             $1.length);
2708 @@ -11127,7 +11087,7 @@
2709          | LONG_NUM
2710            {
2711              int error;
2712 -            $$= new (YYTHD->mem_root)
2713 +            $$= new (thd->mem_root)
2714                    Item_int($1.str,
2715                             (longlong) my_strtoll10($1.str, NULL, &error),
2716                             $1.length);
2717 @@ -11136,23 +11096,23 @@
2718            }
2719          | ULONGLONG_NUM
2720            {
2721 -            $$= new (YYTHD->mem_root) Item_uint($1.str, $1.length);
2722 +            $$= new (thd->mem_root) Item_uint($1.str, $1.length);
2723              if ($$ == NULL)
2724                MYSQL_YYABORT;
2725            }
2726          | DECIMAL_NUM
2727            {
2728 -            $$= new (YYTHD->mem_root) Item_decimal($1.str, $1.length,
2729 -                                                   YYTHD->charset());
2730 -            if (($$ == NULL) || (YYTHD->is_error()))
2731 +            $$= new (thd->mem_root) Item_decimal($1.str, $1.length,
2732 +                                                   thd->charset());
2733 +            if (($$ == NULL) || (thd->is_error()))
2734              {
2735                MYSQL_YYABORT;
2736              }
2737            }
2738          | FLOAT_NUM
2739            {
2740 -            $$= new (YYTHD->mem_root) Item_float($1.str, $1.length);
2741 -            if (($$ == NULL) || (YYTHD->is_error()))
2742 +            $$= new (thd->mem_root) Item_float($1.str, $1.length);
2743 +            if (($$ == NULL) || (thd->is_error()))
2744              {
2745                MYSQL_YYABORT;
2746              }
2747 @@ -11172,7 +11132,7 @@
2748            ident '.' '*'
2749            {
2750              SELECT_LEX *sel= Select;
2751 -            $$= new (YYTHD->mem_root) Item_field(Lex->current_context(),
2752 +            $$= new (thd->mem_root) Item_field(Lex->current_context(),
2753                                                   NullS, $1.str, "*");
2754              if ($$ == NULL)
2755                MYSQL_YYABORT;
2756 @@ -11180,7 +11140,6 @@
2757            }
2758          | ident '.' ident '.' '*'
2759            {
2760 -            THD *thd= YYTHD;
2761              SELECT_LEX *sel= Select;
2762              const char* schema= thd->client_capabilities & CLIENT_NO_SCHEMA ?
2763                                    NullS : $1.str;
2764 @@ -11200,7 +11159,6 @@
2765  simple_ident:
2766            ident
2767            {
2768 -            THD *thd= YYTHD;
2769              LEX *lex= thd->lex;
2770              Lex_input_stream *lip= YYLIP;
2771              sp_variable_t *spv;
2772 @@ -11251,7 +11209,6 @@
2773  simple_ident_nospvar:
2774            ident
2775            {
2776 -            THD *thd= YYTHD;
2777              SELECT_LEX *sel=Select;
2778              if ((sel->parsing_place != IN_HAVING) ||
2779                  (sel->get_in_sum_expr() > 0))
2780 @@ -11273,7 +11230,6 @@
2781  simple_ident_q:
2782            ident '.' ident
2783            {
2784 -            THD *thd= YYTHD;
2785              LEX *lex= thd->lex;
2786  
2787              /*
2788 @@ -11352,7 +11308,6 @@
2789            }
2790          | '.' ident '.' ident
2791            {
2792 -            THD *thd= YYTHD;
2793              LEX *lex= thd->lex;
2794              SELECT_LEX *sel= lex->current_select;
2795              if (sel->no_table_names_allowed)
2796 @@ -11377,7 +11332,6 @@
2797            }
2798          | ident '.' ident '.' ident
2799            {
2800 -            THD *thd= YYTHD;
2801              LEX *lex= thd->lex;
2802              SELECT_LEX *sel= lex->current_select;
2803              const char* schema= (thd->client_capabilities & CLIENT_NO_SCHEMA ?
2804 @@ -11445,7 +11399,7 @@
2805            }
2806          | ident '.' ident
2807            {
2808 -            $$= new Table_ident(YYTHD, $1,$3,0);
2809 +            $$= new Table_ident(thd, $1,$3,0);
2810              if ($$ == NULL)
2811                MYSQL_YYABORT;
2812            }
2813 @@ -11467,7 +11421,7 @@
2814            }
2815          | ident '.' ident opt_wild
2816            {
2817 -            $$= new Table_ident(YYTHD, $1,$3,0);
2818 +            $$= new Table_ident(thd, $1,$3,0);
2819              if ($$ == NULL)
2820                MYSQL_YYABORT;
2821            }
2822 @@ -11477,7 +11431,7 @@
2823            ident
2824            {
2825              LEX_STRING db={(char*) any_db,3};
2826 -            $$= new Table_ident(YYTHD, db,$1,0);
2827 +            $$= new Table_ident(thd, db,$1,0);
2828              if ($$ == NULL)
2829                MYSQL_YYABORT;
2830            }
2831 @@ -11487,8 +11441,7 @@
2832            IDENT { $$= $1; }
2833          | IDENT_QUOTED
2834            {
2835 -            THD *thd= YYTHD;
2836 -
2837 +            
2838              if (thd->charset_is_system_charset)
2839              {
2840                CHARSET_INFO *cs= system_charset_info;
2841 @@ -11516,8 +11469,6 @@
2842  TEXT_STRING_sys:
2843            TEXT_STRING
2844            {
2845 -            THD *thd= YYTHD;
2846 -
2847              if (thd->charset_is_system_charset)
2848                $$= $1;
2849              else
2850 @@ -11532,8 +11483,6 @@
2851  TEXT_STRING_literal:
2852            TEXT_STRING
2853            {
2854 -            THD *thd= YYTHD;
2855 -
2856              if (thd->charset_is_collation_connection)
2857                $$= $1;
2858              else
2859 @@ -11548,8 +11497,6 @@
2860  TEXT_STRING_filesystem:
2861            TEXT_STRING
2862            {
2863 -            THD *thd= YYTHD;
2864 -
2865              if (thd->charset_is_character_set_filesystem)
2866                $$= $1;
2867              else
2868 @@ -11566,7 +11513,6 @@
2869            IDENT_sys    { $$=$1; }
2870          | keyword
2871            {
2872 -            THD *thd= YYTHD;
2873              $$.str= thd->strmake($1.str, $1.length);
2874              if ($$.str == NULL)
2875                MYSQL_YYABORT;
2876 @@ -11578,7 +11524,6 @@
2877            IDENT_sys    { $$=$1; }
2878          | keyword_sp
2879            {
2880 -            THD *thd= YYTHD;
2881              $$.str= thd->strmake($1.str, $1.length);
2882              if ($$.str == NULL)
2883                MYSQL_YYABORT;
2884 @@ -11595,7 +11540,6 @@
2885  user:
2886            ident_or_text
2887            {
2888 -            THD *thd= YYTHD;
2889              if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
2890                MYSQL_YYABORT;
2891              $$->user = $1;
2892 @@ -11609,7 +11553,6 @@
2893            }
2894          | ident_or_text '@' ident_or_text
2895            {
2896 -            THD *thd= YYTHD;
2897              if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
2898                MYSQL_YYABORT;
2899              $$->user = $1; $$->host=$3;
2900 @@ -11628,7 +11571,7 @@
2901            }
2902          | CURRENT_USER optional_braces
2903            {
2904 -            if (!($$=(LEX_USER*) YYTHD->alloc(sizeof(st_lex_user))))
2905 +            if (!($$=(LEX_USER*) thd->alloc(sizeof(st_lex_user))))
2906                MYSQL_YYABORT;
2907              /* 
2908                empty LEX_USER means current_user and 
2909 @@ -11991,7 +11934,6 @@
2910  
2911  option_type_value:
2912            {
2913 -            THD *thd= YYTHD;
2914              LEX *lex= thd->lex;
2915              Lex_input_stream *lip= YYLIP;
2916  
2917 @@ -12022,7 +11964,6 @@
2918            }
2919            ext_option_value
2920            {
2921 -            THD *thd= YYTHD;
2922              LEX *lex= thd->lex;
2923              Lex_input_stream *lip= YYLIP;
2924  
2925 @@ -12105,7 +12046,6 @@
2926  sys_option_value:
2927            option_type internal_variable_name equal set_expr_or_default
2928            {
2929 -            THD *thd= YYTHD;
2930              LEX *lex= Lex;
2931              LEX_STRING *name= &$2.base_name;
2932  
2933 @@ -12117,7 +12057,7 @@
2934                  my_parse_error(ER(ER_SYNTAX_ERROR));
2935                  MYSQL_YYABORT;
2936                }
2937 -              if (set_trigger_new_row(YYTHD, name, $4))
2938 +              if (set_trigger_new_row(thd, name, $4))
2939                  MYSQL_YYABORT;
2940              }
2941              else if ($2.var)
2942 @@ -12147,7 +12087,6 @@
2943            }
2944          | option_type TRANSACTION_SYM ISOLATION LEVEL_SYM isolation_types
2945            {
2946 -            THD *thd= YYTHD;
2947              LEX *lex=Lex;
2948              lex->option_type= $1;
2949              Item *item= new (thd->mem_root) Item_int((int32) $5);
2950 @@ -12167,7 +12106,7 @@
2951            '@' ident_or_text equal expr
2952            {
2953              Item_func_set_user_var *item;
2954 -            item= new (YYTHD->mem_root) Item_func_set_user_var($2, $4);
2955 +            item= new (thd->mem_root) Item_func_set_user_var($2, $4);
2956              if (item == NULL)
2957                MYSQL_YYABORT;
2958              set_var_user *var= new set_var_user(item);
2959 @@ -12177,7 +12116,6 @@
2960            }
2961          | '@' '@' opt_var_ident_type internal_variable_name equal set_expr_or_default
2962            {
2963 -            THD *thd= YYTHD;
2964              struct sys_var_with_base tmp= $4;
2965              /* Lookup if necessary: must be a system variable. */
2966              if (tmp.var == NULL)
2967 @@ -12190,7 +12128,6 @@
2968            }
2969          | charset old_or_new_charset_name_or_default
2970            {
2971 -            THD *thd= YYTHD;
2972              LEX *lex= thd->lex;
2973              CHARSET_INFO *cs2;
2974              cs2= $2 ? $2: global_system_variables.character_set_client;
2975 @@ -12238,7 +12175,6 @@
2976            }
2977          | PASSWORD equal text_or_password
2978            {
2979 -            THD *thd= YYTHD;
2980              LEX *lex= thd->lex;
2981              LEX_USER *user;
2982              sp_pcontext *spc= lex->spcont;
2983 @@ -12278,7 +12214,6 @@
2984  internal_variable_name:
2985            ident
2986            {
2987 -            THD *thd= YYTHD;
2988              sp_pcontext *spc= thd->lex->spcont;
2989              sp_variable_t *spv;
2990  
2991 @@ -12337,7 +12272,7 @@
2992              }
2993              else
2994              {
2995 -              sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length);
2996 +              sys_var *tmp=find_sys_var(thd, $3.str, $3.length);
2997                if (!tmp)
2998                  MYSQL_YYABORT;
2999                if (!tmp->is_struct())
3000 @@ -12348,7 +12283,7 @@
3001            }
3002          | DEFAULT '.' ident
3003            {
3004 -            sys_var *tmp=find_sys_var(YYTHD, $3.str, $3.length);
3005 +            sys_var *tmp=find_sys_var(thd, $3.str, $3.length);
3006              if (!tmp)
3007                MYSQL_YYABORT;
3008              if (!tmp->is_struct())
3009 @@ -12370,16 +12305,16 @@
3010            TEXT_STRING { $$=$1.str;}
3011          | PASSWORD '(' TEXT_STRING ')'
3012            {
3013 -            $$= $3.length ? YYTHD->variables.old_passwords ?
3014 -              Item_func_old_password::alloc(YYTHD, $3.str, $3.length) :
3015 -              Item_func_password::alloc(YYTHD, $3.str, $3.length) :
3016 +            $$= $3.length ? thd->variables.old_passwords ?
3017 +              Item_func_old_password::alloc(thd, $3.str, $3.length) :
3018 +              Item_func_password::alloc(thd, $3.str, $3.length) :
3019                $3.str;
3020              if ($$ == NULL)
3021                MYSQL_YYABORT;
3022            }
3023          | OLD_PASSWORD '(' TEXT_STRING ')'
3024            {
3025 -            $$= $3.length ? Item_func_old_password::alloc(YYTHD, $3.str,
3026 +            $$= $3.length ? Item_func_old_password::alloc(thd, $3.str,
3027                                                            $3.length) :
3028                $3.str;
3029              if ($$ == NULL)
3030 @@ -12393,19 +12328,19 @@
3031          | DEFAULT { $$=0; }
3032          | ON
3033            {
3034 -            $$=new (YYTHD->mem_root) Item_string("ON",  2, system_charset_info);
3035 +            $$=new (thd->mem_root) Item_string("ON",  2, system_charset_info);
3036              if ($$ == NULL)
3037                MYSQL_YYABORT;
3038            }
3039          | ALL
3040            {
3041 -            $$=new (YYTHD->mem_root) Item_string("ALL", 3, system_charset_info);
3042 +            $$=new (thd->mem_root) Item_string("ALL", 3, system_charset_info);
3043              if ($$ == NULL)
3044                MYSQL_YYABORT;
3045            }
3046          | BINARY
3047            {
3048 -            $$=new (YYTHD->mem_root) Item_string("binary", 6, system_charset_info);
3049 +            $$=new (thd->mem_root) Item_string("binary", 6, system_charset_info);
3050              if ($$ == NULL)
3051                MYSQL_YYABORT;
3052            }
3053 @@ -12443,7 +12378,7 @@
3054            table_ident opt_table_alias lock_option
3055            {
3056              thr_lock_type lock_type= (thr_lock_type) $3;
3057 -            if (!Select->add_table_to_list(YYTHD, $1, $2, 0, lock_type))
3058 +            if (!Select->add_table_to_list(thd, $1, $2, 0, lock_type))
3059                MYSQL_YYABORT;
3060              /* If table is to be write locked, protect from a impending GRL. */
3061              if (lock_type >= TL_WRITE_ALLOW_WRITE)
3062 @@ -12514,7 +12449,7 @@
3063              lex->expr_allows_subselect= FALSE;
3064              lex->sql_command = SQLCOM_HA_READ;
3065              lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */
3066 -            Item *one= new (YYTHD->mem_root) Item_int((int32) 1);
3067 +            Item *one= new (thd->mem_root) Item_int((int32) 1);
3068              if (one == NULL)
3069                MYSQL_YYABORT;
3070              lex->current_select->select_limit= one;
3071 @@ -12836,10 +12771,10 @@
3072              $$=$1; $1->password=$4;
3073              if ($4.length)
3074              {
3075 -              if (YYTHD->variables.old_passwords)
3076 +              if (thd->variables.old_passwords)
3077                {
3078                  char *buff= 
3079 -                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
3080 +                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH_323+1);
3081                  if (buff == NULL)
3082                    MYSQL_YYABORT;
3083                  my_make_scrambled_password_323(buff, $4.str, $4.length);
3084 @@ -12849,7 +12784,7 @@
3085                else
3086                {
3087                  char *buff= 
3088 -                  (char *) YYTHD->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
3089 +                  (char *) thd->alloc(SCRAMBLED_PASSWORD_CHAR_LENGTH+1);
3090                  if (buff == NULL)
3091                    MYSQL_YYABORT;
3092                  my_make_scrambled_password(buff, $4.str, $4.length);
3093 @@ -12881,7 +12816,7 @@
3094  column_list_id:
3095            ident
3096            {
3097 -            String *new_str = new (YYTHD->mem_root) String((const char*) $1.str,$1.length,system_charset_info);
3098 +            String *new_str = new (thd->mem_root) String((const char*) $1.str,$1.length,system_charset_info);
3099              if (new_str == NULL)
3100                MYSQL_YYABORT;
3101              List_iterator <LEX_COLUMN> iter(Lex->columns);
3102 @@ -12981,14 +12916,14 @@
3103  
3104  opt_chain:
3105            /* empty */
3106 -          { $$= (YYTHD->variables.completion_type == 1); }
3107 +          { $$= (thd->variables.completion_type == 1); }
3108          | AND_SYM NO_SYM CHAIN_SYM { $$=0; }
3109          | AND_SYM CHAIN_SYM        { $$=1; }
3110          ;
3111  
3112  opt_release:
3113            /* empty */
3114 -          { $$= (YYTHD->variables.completion_type == 2); }
3115 +          { $$= (thd->variables.completion_type == 2); }
3116          | RELEASE_SYM        { $$=1; }
3117          | NO_SYM RELEASE_SYM { $$=0; }
3118  ;
3119 @@ -13102,7 +13037,6 @@
3120  
3121  union_order_or_limit:
3122            {
3123 -            THD *thd= YYTHD;
3124              LEX *lex= thd->lex;
3125              DBUG_ASSERT(lex->current_select->linkage != GLOBAL_OPTIONS_TYPE);
3126              SELECT_LEX *sel= lex->current_select;
3127 @@ -13118,7 +13052,6 @@
3128            }
3129            order_or_limit
3130            {
3131 -            THD *thd= YYTHD;
3132              thd->lex->current_select->no_table_names_allowed= 0;
3133              thd->where= "";
3134            }
3135 @@ -13255,14 +13188,14 @@
3136                from older master servers (i.e. to create non-suid trigger in this
3137                case).
3138              */
3139 -            YYTHD->lex->definer= 0;
3140 +            thd->lex->definer= 0;
3141            }
3142          ;
3143  
3144  definer:
3145            DEFINER_SYM EQ user
3146            {
3147 -            YYTHD->lex->definer= get_current_user(YYTHD, $3);
3148 +            thd->lex->definer= get_current_user(thd, $3);
3149            }
3150          ;
3151  
3152 @@ -13307,7 +13240,6 @@
3153  view_tail:
3154            view_suid VIEW_SYM table_ident
3155            {
3156 -            THD *thd= YYTHD;
3157              LEX *lex= thd->lex;
3158              lex->sql_command= SQLCOM_CREATE_VIEW;
3159              /* first table in list is target VIEW name */
3160 @@ -13347,7 +13279,6 @@
3161            }
3162            view_select_aux view_check_option
3163            {
3164 -            THD *thd= YYTHD;
3165              LEX *lex= Lex;
3166              uint len= YYLIP->get_cpp_ptr() - lex->create_view_select.str;
3167              void *create_view_select= thd->memdup(lex->create_view_select.str, len);
3168 @@ -13403,7 +13334,6 @@
3169            EACH_SYM
3170            ROW_SYM
3171            { /* $15 */
3172 -            THD *thd= YYTHD;
3173              LEX *lex= thd->lex;
3174              Lex_input_stream *lip= YYLIP;
3175              sp_head *sp;
3176 @@ -13437,8 +13367,8 @@
3177              sp_head *sp= lex->sphead;
3178  
3179              lex->sql_command= SQLCOM_CREATE_TRIGGER;
3180 -            sp->set_stmt_end(YYTHD);
3181 -            sp->restore_thd_mem_root(YYTHD);
3182 +            sp->set_stmt_end(thd);
3183 +            sp->restore_thd_mem_root(thd);
3184  
3185              if (sp->is_not_allowed_in_function("trigger"))
3186                MYSQL_YYABORT;
3187 @@ -13448,7 +13378,7 @@
3188                sp_proc_stmt alternatives are not saving/restoring LEX, so
3189                lex->query_tables can be wiped out.
3190              */
3191 -            if (!lex->select_lex.add_table_to_list(YYTHD, $9,
3192 +            if (!lex->select_lex.add_table_to_list(thd, $9,
3193                                                     (LEX_STRING*) 0,
3194                                                     TL_OPTION_UPDATING,
3195                                                     TL_IGNORE))
3196 @@ -13466,7 +13396,6 @@
3197            AGGREGATE_SYM remember_name FUNCTION_SYM ident
3198            RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys
3199            {
3200 -            THD *thd= YYTHD;
3201              LEX *lex= thd->lex;
3202              if (is_native_function(thd, & $4))
3203              {
3204 @@ -13484,7 +13413,6 @@
3205          | remember_name FUNCTION_SYM ident
3206            RETURNS_SYM udf_type SONAME_SYM TEXT_STRING_sys
3207            {
3208 -            THD *thd= YYTHD;
3209              LEX *lex= thd->lex;
3210              if (is_native_function(thd, & $3))
3211              {
3212 @@ -13507,7 +13435,6 @@
3213            sp_name /* $3 */
3214            '(' /* $4 */
3215            { /* $5 */
3216 -            THD *thd= YYTHD;
3217              LEX *lex= thd->lex;
3218              Lex_input_stream *lip= YYLIP;
3219              sp_head *sp;
3220 @@ -13565,7 +13492,7 @@
3221                MYSQL_YYABORT;
3222              }
3223  
3224 -            if (sp->fill_field_definition(YYTHD, lex,
3225 +            if (sp->fill_field_definition(thd, lex,
3226                                            (enum enum_field_types) $11,
3227                                            &sp->m_return_field_def))
3228                MYSQL_YYABORT;
3229 @@ -13574,7 +13501,6 @@
3230            }
3231            sp_c_chistics /* $13 */
3232            { /* $14 */
3233 -            THD *thd= YYTHD;
3234              LEX *lex= thd->lex;
3235              Lex_input_stream *lip= YYLIP;
3236  
3237 @@ -13583,7 +13509,6 @@
3238            }
3239            sp_proc_stmt /* $15 */
3240            {
3241 -            THD *thd= YYTHD;
3242              LEX *lex= thd->lex;
3243              sp_head *sp= lex->sphead;
3244  
3245 @@ -13654,10 +13579,10 @@
3246              sp= new sp_head();
3247              if (sp == NULL)
3248                MYSQL_YYABORT;
3249 -            sp->reset_thd_mem_root(YYTHD);
3250 +            sp->reset_thd_mem_root(thd);
3251              sp->init(lex);
3252              sp->m_type= TYPE_ENUM_PROCEDURE;
3253 -            sp->init_sp_name(YYTHD, $3);
3254 +            sp->init_sp_name(thd, $3);
3255  
3256              lex->sphead= sp;
3257            }
3258 @@ -13672,7 +13597,6 @@
3259            sp_pdparam_list
3260            ')'
3261            {
3262 -            THD *thd= YYTHD;
3263              LEX *lex= thd->lex;
3264  
3265              lex->sphead->m_param_end= YYLIP->get_cpp_tok_start();
3266 @@ -13680,7 +13604,6 @@
3267            }
3268            sp_c_chistics
3269            {
3270 -            THD *thd= YYTHD;
3271              LEX *lex= thd->lex;
3272  
3273              lex->sphead->m_chistics= &lex->sp_chistics;
3274 @@ -13691,9 +13614,9 @@
3275              LEX *lex= Lex;
3276              sp_head *sp= lex->sphead;
3277  
3278 -            sp->set_stmt_end(YYTHD);
3279 +            sp->set_stmt_end(thd);
3280              lex->sql_command= SQLCOM_CREATE_PROCEDURE;
3281 -            sp->restore_thd_mem_root(YYTHD);
3282 +            sp->restore_thd_mem_root(thd);
3283            }
3284          ;
3285  
3286 @@ -13730,21 +13653,21 @@
3287            text_string
3288            {
3289              MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE);
3290 -            if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID))))
3291 +            if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID))))
3292                MYSQL_YYABORT;
3293              Lex->xid->set(1L, $1->ptr(), $1->length(), 0, 0);
3294            }
3295            | text_string ',' text_string
3296            {
3297              MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE);
3298 -            if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID))))
3299 +            if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID))))
3300                MYSQL_YYABORT;
3301              Lex->xid->set(1L, $1->ptr(), $1->length(), $3->ptr(), $3->length());
3302            }
3303            | text_string ',' text_string ',' ulong_num
3304            {
3305              MYSQL_YYABORT_UNLESS($1->length() <= MAXGTRIDSIZE && $3->length() <= MAXBQUALSIZE);
3306 -            if (!(Lex->xid=(XID *)YYTHD->alloc(sizeof(XID))))
3307 +            if (!(Lex->xid=(XID *)thd->alloc(sizeof(XID))))
3308                MYSQL_YYABORT;
3309              Lex->xid->set($5, $1->ptr(), $1->length(), $3->ptr(), $3->length());
3310            }