diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 539bb90d9074ad887b4915b2115d16fff63a36e5..33951ea33a49904cdff12fe21255b3f2202349e1 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -668,12 +668,12 @@ bool my_yyoverflow(short **a, YYSTYPE **b,int *yystacksize); %type <NONE> query verb_clause create change select do drop insert replace insert2 insert_values update delete truncate rename - show describe load alter optimize preload flush + show describe load alter optimize keycache preload flush reset purge begin commit rollback savepoint slave master_def master_defs repair restore backup analyze check start field_list field_list_item field_spec kill column_def key_def - preload_list preload_keys + keycache_list assign_to_keycache preload_list preload_keys select_item_list select_item values_list no_braces opt_limit_clause delete_limit_clause fields opt_values values procedure_list procedure_list2 procedure_item @@ -742,6 +742,7 @@ verb_clause: | lock | kill | optimize + | keycache | preload | purge | rename @@ -1879,6 +1880,45 @@ table_to_table: YYABORT; }; +keycache: + CACHE_SYM INDEX + { + LEX *lex=Lex; + lex->sql_command=SQLCOM_ASSIGN_TO_KEYCACHE; + } + keycache_list + {} + ; + +keycache_list: + assign_to_keycache + | keycache_list ',' assign_to_keycache; + +assign_to_keycache: + table_ident cache_keys_spec IN_SYM ident + { + LEX *lex=Lex; + SELECT_LEX *sel= &lex->select_lex; + if (!sel->add_table_to_list(lex->thd, $1, NULL, 0, + TL_READ, + sel->get_use_index(), + (List<String> *)0, + &($4))) + YYABORT; + } + | + table_ident cache_keys_spec IN_SYM DEFAULT + { + LEX *lex=Lex; + SELECT_LEX *sel= &lex->select_lex; + if (!sel->add_table_to_list(lex->thd, $1, NULL, 0, + TL_READ, + sel->get_use_index(), + (List<String> *)0)) + YYABORT; + } + ; + preload: LOAD INDEX INTO CACHE_SYM { @@ -1894,7 +1934,7 @@ preload_list: | preload_list ',' preload_keys; preload_keys: - table_ident preload_keys_spec opt_ignore_leaves + table_ident cache_keys_spec opt_ignore_leaves { LEX *lex=Lex; SELECT_LEX *sel= &lex->select_lex; @@ -1908,7 +1948,7 @@ preload_keys: preload_keys_spec: keys_or_index { Select->interval_list.empty(); } - preload_key_list_or_empty + cache_key_list_or_empty { LEX *lex=Lex; SELECT_LEX *sel= &lex->select_lex; @@ -1917,7 +1957,7 @@ preload_keys_spec: } ; -preload_key_list_or_empty: +cache_key_list_or_empty: /* empty */ | '(' key_usage_list2 ')' {} ;