Commit 3ef655ac authored by pem@mysql.com's avatar pem@mysql.com

Pass thd as an argument to yyparse(), getting rid of all current_thd in the parser.

parent e8c7830e
...@@ -562,3 +562,8 @@ bkpull.log.2 ...@@ -562,3 +562,8 @@ bkpull.log.2
bkpull.log.3 bkpull.log.3
build.log build.log
sql/safe_to_cache_query.txt sql/safe_to_cache_query.txt
bkpull.log.4
bkpull.log.5
bkpull.log.6
bkpush.log
sql/sql_yacc.output
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
#define TRANS_MEM_ROOT_BLOCK_SIZE 4096 #define TRANS_MEM_ROOT_BLOCK_SIZE 4096
#define TRANS_MEM_ROOT_PREALLOC 4096 #define TRANS_MEM_ROOT_PREALLOC 4096
extern int yyparse(void); extern int yyparse(void *thd);
extern "C" pthread_mutex_t THR_LOCK_keycache; extern "C" pthread_mutex_t THR_LOCK_keycache;
#ifdef SOLARIS #ifdef SOLARIS
extern "C" int gethostname(char *name, int namelen); extern "C" int gethostname(char *name, int namelen);
...@@ -2951,7 +2951,7 @@ mysql_parse(THD *thd, char *inBuf, uint length) ...@@ -2951,7 +2951,7 @@ mysql_parse(THD *thd, char *inBuf, uint length)
if (query_cache_send_result_to_client(thd, inBuf, length) <= 0) if (query_cache_send_result_to_client(thd, inBuf, length) <= 0)
{ {
LEX *lex=lex_start(thd, (uchar*) inBuf, length); LEX *lex=lex_start(thd, (uchar*) inBuf, length);
if (!yyparse() && ! thd->fatal_error) if (!yyparse((void *)thd) && ! thd->fatal_error)
{ {
if (mqh_used && thd->user_connect && if (mqh_used && thd->user_connect &&
check_mqh(thd, lex->sql_command)) check_mqh(thd, lex->sql_command))
......
...@@ -56,7 +56,7 @@ Long data handling: ...@@ -56,7 +56,7 @@ Long data handling:
#define IS_PARAM_NULL(pos, param_no) pos[param_no/8] & (1 << param_no & 7) #define IS_PARAM_NULL(pos, param_no) pos[param_no/8] & (1 << param_no & 7)
extern int yyparse(void); extern int yyparse(void *thd);
/* /*
Find prepared statement in thd Find prepared statement in thd
...@@ -605,7 +605,7 @@ static bool parse_prepare_query(PREP_STMT *stmt, ...@@ -605,7 +605,7 @@ static bool parse_prepare_query(PREP_STMT *stmt,
LEX *lex=lex_start(thd, (uchar*) packet, length); LEX *lex=lex_start(thd, (uchar*) packet, length);
lex->safe_to_cache_query= 0; lex->safe_to_cache_query= 0;
if (!yyparse() && !thd->fatal_error) if (!yyparse((void *)thd) && !thd->fatal_error)
error= send_prepare_results(stmt); error= send_prepare_results(stmt);
lex_end(lex); lex_end(lex);
DBUG_RETURN(error); DBUG_RETURN(error);
......
...@@ -17,10 +17,16 @@ ...@@ -17,10 +17,16 @@
/* sql_yacc.yy */ /* sql_yacc.yy */
%{ %{
/* Pass thd as an arg to yyparse(). The type will be void*, so it
** must be cast to (THD*) when used. Use the YYTHD macro for this.
*/
#define YYPARSE_PARAM yythd
#define YYTHD ((THD *)yythd)
#define MYSQL_YACC #define MYSQL_YACC
#define YYINITDEPTH 100 #define YYINITDEPTH 100
#define YYMAXDEPTH 3200 /* Because of 64K stack */ #define YYMAXDEPTH 3200 /* Because of 64K stack */
#define Lex current_lex #define Lex (&(YYTHD->lex))
#define Select Lex->current_select #define Select Lex->current_select
#include "mysql_priv.h" #include "mysql_priv.h"
#include "slave.h" #include "slave.h"
...@@ -35,9 +41,9 @@ int yylex(void *yylval); ...@@ -35,9 +41,9 @@ int yylex(void *yylval);
#define yyoverflow(A,B,C,D,E,F) if (my_yyoverflow((B),(D),(int*) (F))) { yyerror((char*) (A)); return 2; } #define yyoverflow(A,B,C,D,E,F) if (my_yyoverflow((B),(D),(int*) (F))) { yyerror((char*) (A)); return 2; }
inline Item *or_or_concat(Item* A, Item* B) inline Item *or_or_concat(THD *thd, Item* A, Item* B)
{ {
return (current_thd->sql_mode & MODE_PIPES_AS_CONCAT ? return (thd->sql_mode & MODE_PIPES_AS_CONCAT ?
(Item*) new Item_func_concat(A,B) : (Item*) new Item_cond_or(A,B)); (Item*) new Item_func_concat(A,B) : (Item*) new Item_cond_or(A,B));
} }
...@@ -661,11 +667,11 @@ END_OF_INPUT ...@@ -661,11 +667,11 @@ END_OF_INPUT
query: query:
END_OF_INPUT END_OF_INPUT
{ {
THD *thd=current_thd; THD *thd= YYTHD;
if (!thd->bootstrap && if (!thd->bootstrap &&
(!(thd->lex.select_lex.options & OPTION_FOUND_COMMENT))) (!(thd->lex.select_lex.options & OPTION_FOUND_COMMENT)))
{ {
send_error(current_thd,ER_EMPTY_QUERY); send_error(thd,ER_EMPTY_QUERY);
YYABORT; YYABORT;
} }
else else
...@@ -791,7 +797,7 @@ master_def: ...@@ -791,7 +797,7 @@ master_def:
create: create:
CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident CREATE opt_table_options TABLE_SYM opt_if_not_exists table_ident
{ {
THD *thd=current_thd; THD *thd= YYTHD;
LEX *lex=Lex; LEX *lex=Lex;
lex->sql_command= SQLCOM_CREATE_TABLE; lex->sql_command= SQLCOM_CREATE_TABLE;
if (!lex->select_lex.add_table_to_list($5, if (!lex->select_lex.add_table_to_list($5,
...@@ -1075,7 +1081,7 @@ type: ...@@ -1075,7 +1081,7 @@ type:
| TIME_SYM { $$=FIELD_TYPE_TIME; } | TIME_SYM { $$=FIELD_TYPE_TIME; }
| TIMESTAMP | TIMESTAMP
{ {
if (current_thd->sql_mode & MODE_SAPDB) if (YYTHD->sql_mode & MODE_SAPDB)
$$=FIELD_TYPE_DATETIME; $$=FIELD_TYPE_DATETIME;
else else
$$=FIELD_TYPE_TIMESTAMP; $$=FIELD_TYPE_TIMESTAMP;
...@@ -1146,7 +1152,7 @@ int_type: ...@@ -1146,7 +1152,7 @@ int_type:
| BIGINT { $$=FIELD_TYPE_LONGLONG; }; | BIGINT { $$=FIELD_TYPE_LONGLONG; };
real_type: real_type:
REAL { $$= current_thd->sql_mode & MODE_REAL_AS_FLOAT ? REAL { $$= YYTHD->sql_mode & MODE_REAL_AS_FLOAT ?
FIELD_TYPE_FLOAT : FIELD_TYPE_DOUBLE; } FIELD_TYPE_FLOAT : FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM { $$=FIELD_TYPE_DOUBLE; } | DOUBLE_SYM { $$=FIELD_TYPE_DOUBLE; }
| DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; }; | DOUBLE_SYM PRECISION { $$=FIELD_TYPE_DOUBLE; };
...@@ -1211,7 +1217,7 @@ charset_name: ...@@ -1211,7 +1217,7 @@ charset_name:
{ {
if (!($$=get_charset_by_name("binary",MYF(0)))) if (!($$=get_charset_by_name("binary",MYF(0))))
{ {
net_printf(current_thd,ER_UNKNOWN_CHARACTER_SET,"binary"); net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,"binary");
YYABORT; YYABORT;
} }
} }
...@@ -1219,7 +1225,7 @@ charset_name: ...@@ -1219,7 +1225,7 @@ charset_name:
{ {
if (!($$=get_charset_by_name($1.str,MYF(0)))) if (!($$=get_charset_by_name($1.str,MYF(0))))
{ {
net_printf(current_thd,ER_UNKNOWN_CHARACTER_SET,$1.str); net_printf(YYTHD,ER_UNKNOWN_CHARACTER_SET,$1.str);
YYABORT; YYABORT;
} }
}; };
...@@ -1247,6 +1253,7 @@ opt_binary: ...@@ -1247,6 +1253,7 @@ opt_binary:
opt_primary: opt_primary:
/* empty */ /* empty */
| PRIMARY_SYM | PRIMARY_SYM
;
references: references:
REFERENCES table_ident REFERENCES table_ident
...@@ -1347,7 +1354,7 @@ string_list: ...@@ -1347,7 +1354,7 @@ string_list:
alter: alter:
ALTER opt_ignore TABLE_SYM table_ident ALTER opt_ignore TABLE_SYM table_ident
{ {
THD *thd=current_thd; THD *thd= YYTHD;
LEX *lex=&thd->lex; LEX *lex=&thd->lex;
lex->sql_command = SQLCOM_ALTER_TABLE; lex->sql_command = SQLCOM_ALTER_TABLE;
lex->name=0; lex->name=0;
...@@ -1776,7 +1783,7 @@ expr_expr: ...@@ -1776,7 +1783,7 @@ expr_expr:
{ $$= new Item_func_between($1,$3,$5); } { $$= new Item_func_between($1,$3,$5); }
| expr NOT BETWEEN_SYM no_and_expr AND expr | expr NOT BETWEEN_SYM no_and_expr AND expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); } { $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); } | expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
| expr OR expr { $$= new Item_cond_or($1,$3); } | expr OR expr { $$= new Item_cond_or($1,$3); }
| expr XOR expr { $$= new Item_cond_xor($1,$3); } | expr XOR expr { $$= new Item_cond_xor($1,$3); }
| expr AND expr { $$= new Item_cond_and($1,$3); } | expr AND expr { $$= new Item_cond_and($1,$3); }
...@@ -1818,7 +1825,7 @@ no_in_expr: ...@@ -1818,7 +1825,7 @@ no_in_expr:
{ $$= new Item_func_between($1,$3,$5); } { $$= new Item_func_between($1,$3,$5); }
| no_in_expr NOT BETWEEN_SYM no_and_expr AND expr | no_in_expr NOT BETWEEN_SYM no_and_expr AND expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); } { $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_in_expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); } | no_in_expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
| no_in_expr OR expr { $$= new Item_cond_or($1,$3); } | no_in_expr OR expr { $$= new Item_cond_or($1,$3); }
| no_in_expr XOR expr { $$= new Item_cond_xor($1,$3); } | no_in_expr XOR expr { $$= new Item_cond_xor($1,$3); }
| no_in_expr AND expr { $$= new Item_cond_and($1,$3); } | no_in_expr AND expr { $$= new Item_cond_and($1,$3); }
...@@ -1863,7 +1870,7 @@ no_and_expr: ...@@ -1863,7 +1870,7 @@ no_and_expr:
{ $$= new Item_func_between($1,$3,$5); } { $$= new Item_func_between($1,$3,$5); }
| no_and_expr NOT BETWEEN_SYM no_and_expr AND expr | no_and_expr NOT BETWEEN_SYM no_and_expr AND expr
{ $$= new Item_func_not(new Item_func_between($1,$4,$6)); } { $$= new Item_func_not(new Item_func_between($1,$4,$6)); }
| no_and_expr OR_OR_CONCAT expr { $$= or_or_concat($1,$3); } | no_and_expr OR_OR_CONCAT expr { $$= or_or_concat(YYTHD, $1,$3); }
| no_and_expr OR expr { $$= new Item_cond_or($1,$3); } | no_and_expr OR expr { $$= new Item_cond_or($1,$3); }
| no_and_expr XOR expr { $$= new Item_cond_xor($1,$3); } | no_and_expr XOR expr { $$= new Item_cond_xor($1,$3); }
| no_and_expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4); } | no_and_expr LIKE simple_expr opt_escape { $$= new Item_func_like($1,$3,$4); }
...@@ -3009,7 +3016,7 @@ update_list: ...@@ -3009,7 +3016,7 @@ update_list:
}; };
opt_low_priority: opt_low_priority:
/* empty */ { $$= current_thd->update_lock_default; } /* empty */ { $$= YYTHD->update_lock_default; }
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }; | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; };
/* Delete rows from a table */ /* Delete rows from a table */
...@@ -3193,7 +3200,7 @@ show_param: ...@@ -3193,7 +3200,7 @@ show_param:
{ Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;} { Lex->sql_command= SQLCOM_SHOW_PROCESSLIST;}
| opt_var_type VARIABLES wild | opt_var_type VARIABLES wild
{ {
THD *thd= current_thd; THD *thd= YYTHD;
thd->lex.sql_command= SQLCOM_SHOW_VARIABLES; thd->lex.sql_command= SQLCOM_SHOW_VARIABLES;
thd->lex.option_type= (enum_var_type) $1; thd->lex.option_type= (enum_var_type) $1;
} }
...@@ -3404,7 +3411,7 @@ opt_local: ...@@ -3404,7 +3411,7 @@ opt_local:
| LOCAL_SYM { $$=1;}; | LOCAL_SYM { $$=1;};
load_data_lock: load_data_lock:
/* empty */ { $$= current_thd->update_lock_default; } /* empty */ { $$= YYTHD->update_lock_default; }
| CONCURRENT { $$= TL_WRITE_CONCURRENT_INSERT ; } | CONCURRENT { $$= TL_WRITE_CONCURRENT_INSERT ; }
| LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; }; | LOW_PRIORITY { $$= TL_WRITE_LOW_PRIORITY; };
...@@ -3453,13 +3460,13 @@ opt_ignore_lines: ...@@ -3453,13 +3460,13 @@ opt_ignore_lines:
/* Common definitions */ /* Common definitions */
text_literal: text_literal:
TEXT_STRING { $$ = new Item_string($1.str,$1.length,current_thd->thd_charset); } TEXT_STRING { $$ = new Item_string($1.str,$1.length,YYTHD->thd_charset); }
| UNDERSCORE_CHARSET TEXT_STRING { $$ = new Item_string($2.str,$2.length,Lex->charset); } | UNDERSCORE_CHARSET TEXT_STRING { $$ = new Item_string($2.str,$2.length,Lex->charset); }
| text_literal TEXT_STRING | text_literal TEXT_STRING
{ ((Item_string*) $1)->append($2.str,$2.length); }; { ((Item_string*) $1)->append($2.str,$2.length); };
text_string: text_string:
TEXT_STRING { $$= new String($1.str,$1.length,current_thd->thd_charset); } TEXT_STRING { $$= new String($1.str,$1.length,YYTHD->thd_charset); }
| HEX_NUM | HEX_NUM
{ {
Item *tmp = new Item_varbinary($1.str,$1.length); Item *tmp = new Item_varbinary($1.str,$1.length);
...@@ -3469,7 +3476,7 @@ param_marker: ...@@ -3469,7 +3476,7 @@ param_marker:
'?' '?'
{ {
LEX *lex=Lex; LEX *lex=Lex;
if (current_thd->prepare_command) if (YYTHD->prepare_command)
{ {
lex->param_list.push_back($$=new Item_param()); lex->param_list.push_back($$=new Item_param());
lex->param_count++; lex->param_count++;
...@@ -3505,7 +3512,7 @@ insert_ident: ...@@ -3505,7 +3512,7 @@ insert_ident:
table_wild: table_wild:
ident '.' '*' { $$ = new Item_field(NullS,$1.str,"*"); } ident '.' '*' { $$ = new Item_field(NullS,$1.str,"*"); }
| ident '.' ident '.' '*' | ident '.' ident '.' '*'
{ $$ = new Item_field((current_thd->client_capabilities & { $$ = new Item_field((YYTHD->client_capabilities &
CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); }; CLIENT_NO_SCHEMA ? NullS : $1.str),$3.str,"*"); };
order_ident: order_ident:
...@@ -3530,7 +3537,7 @@ simple_ident: ...@@ -3530,7 +3537,7 @@ simple_ident:
| ident '.' ident '.' ident | ident '.' ident '.' ident
{ {
SELECT_LEX_NODE *sel=Select; SELECT_LEX_NODE *sel=Select;
$$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((current_thd->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str); $$ = !sel->create_refs || sel->get_in_sum_expr() > 0 ? (Item*) new Item_field((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str) : (Item*) new Item_ref((YYTHD->client_capabilities & CLIENT_NO_SCHEMA ? NullS :$1.str),$3.str,$5.str);
}; };
...@@ -3813,7 +3820,7 @@ option_value: ...@@ -3813,7 +3820,7 @@ option_value:
} }
| PASSWORD equal text_or_password | PASSWORD equal text_or_password
{ {
THD *thd=current_thd; THD *thd=YYTHD;
LEX_USER *user; LEX_USER *user;
if (!(user=(LEX_USER*) sql_alloc(sizeof(LEX_USER)))) if (!(user=(LEX_USER*) sql_alloc(sizeof(LEX_USER))))
YYABORT; YYABORT;
...@@ -3895,7 +3902,7 @@ table_lock: ...@@ -3895,7 +3902,7 @@ table_lock:
lock_option: lock_option:
READ_SYM { $$=TL_READ_NO_INSERT; } READ_SYM { $$=TL_READ_NO_INSERT; }
| WRITE_SYM { $$=current_thd->update_lock_default; } | WRITE_SYM { $$=YYTHD->update_lock_default; }
| LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; } | LOW_PRIORITY WRITE_SYM { $$=TL_WRITE_LOW_PRIORITY; }
| READ_SYM LOCAL_SYM { $$= TL_READ; } | READ_SYM LOCAL_SYM { $$= TL_READ; }
; ;
...@@ -4332,7 +4339,7 @@ singleval_subselect: ...@@ -4332,7 +4339,7 @@ singleval_subselect:
singleval_subselect_init: singleval_subselect_init:
select_init select_init
{ {
$$= new Item_singleval_subselect(current_thd, $$= new Item_singleval_subselect(YYTHD,
Lex->current_select->master_unit()-> Lex->current_select->master_unit()->
first_select()); first_select());
}; };
...@@ -4347,7 +4354,7 @@ exists_subselect: ...@@ -4347,7 +4354,7 @@ exists_subselect:
exists_subselect_init: exists_subselect_init:
select_init select_init
{ {
$$= new Item_exists_subselect(current_thd, $$= new Item_exists_subselect(YYTHD,
Lex->current_select->master_unit()-> Lex->current_select->master_unit()->
first_select()); first_select());
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment