Loading sql/sql_lex.cc +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ void lex_start(THD *thd, const uchar *buf, uint length) lex->proc_list.first= 0; lex->escape_used= FALSE; lex->reset_query_tables_list(FALSE); lex->expr_allows_subselect= TRUE; lex->name= 0; lex->event_parse_data= NULL; Loading sql/sql_lex.h +8 −0 Original line number Diff line number Diff line Loading @@ -958,6 +958,14 @@ typedef struct st_lex : public Query_tables_list */ nesting_map allow_sum_func; enum_sql_command sql_command; /* Usually `expr` rule of yacc is quite reused but some commands better not support subqueries which comes standard with this rule, like KILL, HA_READ, CREATE/ALTER EVENT etc. Set this to `false` to get syntax error back. */ bool expr_allows_subselect; thr_lock_type lock_option; enum SSL_type ssl_type; /* defined in violite.h */ enum my_lex_states next_state; Loading sql/sql_yacc.yy +20 −12 Original line number Diff line number Diff line Loading @@ -1302,8 +1302,9 @@ event_tail: $<ulong_num>$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; YYTHD->client_capabilities &= (~CLIENT_MULTI_QUERIES); /* We need that for disallowing subqueries */ Lex->sql_command= SQLCOM_CREATE_EVENT; /* We need that for disallowing subqueries */ Lex->expr_allows_subselect= FALSE; } ON SCHEDULE_SYM ev_schedule_time opt_ev_on_completion Loading @@ -1325,6 +1326,7 @@ event_tail: can overwrite it */ Lex->sql_command= SQLCOM_CREATE_EVENT; Lex->expr_allows_subselect= TRUE; } Loading Loading @@ -4697,8 +4699,9 @@ alter: $<ulong_num>$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; YYTHD->client_capabilities &= ~CLIENT_MULTI_QUERIES; /* we need that for disallowing subqueries */ Lex->sql_command= SQLCOM_ALTER_EVENT; /* we need that for disallowing subqueries */ Lex->expr_allows_subselect= FALSE; } ev_alter_on_schedule_completion opt_ev_rename_to Loading @@ -4724,6 +4727,7 @@ alter: can overwrite it */ Lex->sql_command= SQLCOM_ALTER_EVENT; Lex->expr_allows_subselect= TRUE; } | ALTER TABLESPACE alter_tablespace_info { Loading Loading @@ -7048,10 +7052,7 @@ select_derived2: { LEX *lex= Lex; lex->derived_tables|= DERIVED_SUBQUERY; if (lex->sql_command == SQLCOM_HA_READ || lex->sql_command == SQLCOM_KILL || lex->sql_command == SQLCOM_CREATE_EVENT || lex->sql_command == SQLCOM_ALTER_EVENT) if (!lex->expr_allows_subselect) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; Loading Loading @@ -8554,11 +8555,17 @@ purge_option: /* kill threads */ kill: KILL_SYM { Lex->sql_command= SQLCOM_KILL; } kill_option expr KILL_SYM { Lex->sql_command= SQLCOM_KILL; Lex->expr_allows_subselect= FALSE; } kill_option expr { LEX *lex=Lex; lex->value_list.empty(); lex->value_list.push_front($4); Lex->expr_allows_subselect= TRUE; }; kill_option: Loading Loading @@ -10038,6 +10045,7 @@ handler: my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); YYABORT; } lex->expr_allows_subselect= FALSE; lex->sql_command = SQLCOM_HA_READ; lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */ lex->current_select->select_limit= new Item_int((int32) 1); Loading @@ -10045,7 +10053,10 @@ handler: if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) YYABORT; } handler_read_or_scan where_clause opt_limit_clause {} handler_read_or_scan where_clause opt_limit_clause { Lex->expr_allows_subselect= TRUE; } ; handler_read_or_scan: Loading Loading @@ -10670,10 +10681,7 @@ subselect_start: '(' SELECT_SYM { LEX *lex=Lex; if (lex->sql_command == SQLCOM_HA_READ || lex->sql_command == SQLCOM_KILL || lex->sql_command == SQLCOM_CREATE_EVENT || lex->sql_command == SQLCOM_ALTER_EVENT) if (!lex->expr_allows_subselect) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; Loading Loading
sql/sql_lex.cc +1 −0 Original line number Diff line number Diff line Loading @@ -175,6 +175,7 @@ void lex_start(THD *thd, const uchar *buf, uint length) lex->proc_list.first= 0; lex->escape_used= FALSE; lex->reset_query_tables_list(FALSE); lex->expr_allows_subselect= TRUE; lex->name= 0; lex->event_parse_data= NULL; Loading
sql/sql_lex.h +8 −0 Original line number Diff line number Diff line Loading @@ -958,6 +958,14 @@ typedef struct st_lex : public Query_tables_list */ nesting_map allow_sum_func; enum_sql_command sql_command; /* Usually `expr` rule of yacc is quite reused but some commands better not support subqueries which comes standard with this rule, like KILL, HA_READ, CREATE/ALTER EVENT etc. Set this to `false` to get syntax error back. */ bool expr_allows_subselect; thr_lock_type lock_option; enum SSL_type ssl_type; /* defined in violite.h */ enum my_lex_states next_state; Loading
sql/sql_yacc.yy +20 −12 Original line number Diff line number Diff line Loading @@ -1302,8 +1302,9 @@ event_tail: $<ulong_num>$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; YYTHD->client_capabilities &= (~CLIENT_MULTI_QUERIES); /* We need that for disallowing subqueries */ Lex->sql_command= SQLCOM_CREATE_EVENT; /* We need that for disallowing subqueries */ Lex->expr_allows_subselect= FALSE; } ON SCHEDULE_SYM ev_schedule_time opt_ev_on_completion Loading @@ -1325,6 +1326,7 @@ event_tail: can overwrite it */ Lex->sql_command= SQLCOM_CREATE_EVENT; Lex->expr_allows_subselect= TRUE; } Loading Loading @@ -4697,8 +4699,9 @@ alter: $<ulong_num>$= YYTHD->client_capabilities & CLIENT_MULTI_QUERIES; YYTHD->client_capabilities &= ~CLIENT_MULTI_QUERIES; /* we need that for disallowing subqueries */ Lex->sql_command= SQLCOM_ALTER_EVENT; /* we need that for disallowing subqueries */ Lex->expr_allows_subselect= FALSE; } ev_alter_on_schedule_completion opt_ev_rename_to Loading @@ -4724,6 +4727,7 @@ alter: can overwrite it */ Lex->sql_command= SQLCOM_ALTER_EVENT; Lex->expr_allows_subselect= TRUE; } | ALTER TABLESPACE alter_tablespace_info { Loading Loading @@ -7048,10 +7052,7 @@ select_derived2: { LEX *lex= Lex; lex->derived_tables|= DERIVED_SUBQUERY; if (lex->sql_command == SQLCOM_HA_READ || lex->sql_command == SQLCOM_KILL || lex->sql_command == SQLCOM_CREATE_EVENT || lex->sql_command == SQLCOM_ALTER_EVENT) if (!lex->expr_allows_subselect) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; Loading Loading @@ -8554,11 +8555,17 @@ purge_option: /* kill threads */ kill: KILL_SYM { Lex->sql_command= SQLCOM_KILL; } kill_option expr KILL_SYM { Lex->sql_command= SQLCOM_KILL; Lex->expr_allows_subselect= FALSE; } kill_option expr { LEX *lex=Lex; lex->value_list.empty(); lex->value_list.push_front($4); Lex->expr_allows_subselect= TRUE; }; kill_option: Loading Loading @@ -10038,6 +10045,7 @@ handler: my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER"); YYABORT; } lex->expr_allows_subselect= FALSE; lex->sql_command = SQLCOM_HA_READ; lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */ lex->current_select->select_limit= new Item_int((int32) 1); Loading @@ -10045,7 +10053,10 @@ handler: if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0)) YYABORT; } handler_read_or_scan where_clause opt_limit_clause {} handler_read_or_scan where_clause opt_limit_clause { Lex->expr_allows_subselect= TRUE; } ; handler_read_or_scan: Loading Loading @@ -10670,10 +10681,7 @@ subselect_start: '(' SELECT_SYM { LEX *lex=Lex; if (lex->sql_command == SQLCOM_HA_READ || lex->sql_command == SQLCOM_KILL || lex->sql_command == SQLCOM_CREATE_EVENT || lex->sql_command == SQLCOM_ALTER_EVENT) if (!lex->expr_allows_subselect) { yyerror(ER(ER_SYNTAX_ERROR)); YYABORT; Loading