MXS-2432 Recognize RESET

RESET QUERY CACHE is reported to be a session command, which will
cause it to be sent to all servers. RESET [MASTER|SLAVE] are
classified as write, which will cause them to be sent to the master.

It could be argued that RESET [MASTER|SLAVE] should cause an error
to be sent to the client.
This commit is contained in:
Johan Wikman
2019-04-12 14:27:06 +03:00
parent 3127aa85c5
commit d2c71472b0
5 changed files with 66 additions and 4 deletions

View File

@ -125,6 +125,7 @@ extern void maxscaleLock(Parse*, mxs_lock_t, SrcList*);
extern void maxscalePrepare(Parse*, Token* pName, Expr* pStmt);
extern void maxscalePrivileges(Parse*, int kind);
extern void maxscaleRenameTable(Parse*, SrcList* pTables);
extern void maxscaleReset(Parse*, int what);
extern void maxscaleSet(Parse*, int scope, mxs_set_t kind, ExprList*);
extern void maxscaleShow(Parse*, MxsShow* pShow);
extern void maxscaleTruncate(Parse*, Token* pDatabase, Token* pName);
@ -614,7 +615,7 @@ columnid(A) ::= nm(X). {
// TODO: BINARY is a reserved word and should not automatically convert into an identifer.
// TODO: However, if not here then rules such as CAST need to be modified.
BINARY
/*CASCADE*/ CAST CLOSE COLUMNKW COLUMNS COMMENT CONCURRENT /*CONFLICT*/
CACHE /*CASCADE*/ CAST CLOSE COLUMNKW COLUMNS COMMENT CONCURRENT /*CONFLICT*/
DATA DATABASE DEALLOCATE DEFERRED /*DESC*/ /*DETACH*/ DUMPFILE
/*EACH*/ END ENGINE ENUM EXCLUSIVE /*EXPLAIN*/
FIRST FLUSH /*FOR*/ FORMAT
@ -628,8 +629,8 @@ columnid(A) ::= nm(X). {
NO
OF OFFSET OPEN
PREVIOUS
QUICK
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESTRICT ROLLBACK ROLLUP ROW
QUERY QUICK
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATEMENT STATUS
TABLES TEMP TEMPTABLE /*TRIGGER*/
/*TRUNCATE*/
@ -3079,6 +3080,12 @@ rename ::= RENAME TABLE tables_to_rename(X). {
maxscaleRenameTable(pParse, X);
}
//////////////////////// The RESET statement ////////////////////////////////////
//
cmd ::= RESET QUERY CACHE. {
maxscaleReset(pParse, MXS_RESET_QUERY_CACHE);
}
//////////////////////// The SET statement ////////////////////////////////////
//
%type set_scope {int}

View File

@ -4099,6 +4099,11 @@ typedef enum mxs_drop
MXS_DROP_SEQUENCE,
} mxs_drop_t;
typedef enum mxs_reset
{
MXS_RESET_QUERY_CACHE
} mxs_reset_t;
typedef enum mxs_set
{
MXS_SET_VARIABLES,

View File

@ -180,6 +180,7 @@ static Keyword aKeywordTable[] = {
{ "BY", "TK_BY", ALWAYS },
#ifdef MAXSCALE
{ "CALL", "TK_CALL", ALWAYS },
{ "CACHE", "TK_CACHE", ALWAYS },
#endif
{ "CASCADE", "TK_CASCADE", FKEY },
{ "CASE", "TK_CASE", ALWAYS },
@ -391,7 +392,9 @@ static Keyword aKeywordTable[] = {
#ifdef MAXSCALE
{ "PROCEDURE", "TK_FUNCTION_KW", ALWAYS },
#endif
#ifndef MAXSCALE
#ifdef MAXSCALE
{ "QUERY", "TK_QUERY", ALWAYS },
#else
{ "QUERY", "TK_QUERY", EXPLAIN },
#endif
#ifdef MAXSCALE
@ -409,6 +412,9 @@ static Keyword aKeywordTable[] = {
{ "RELEASE", "TK_RELEASE", ALWAYS },
{ "RENAME", "TK_RENAME", ALTER },
{ "REPLACE", "TK_REPLACE", CONFLICT },
#ifdef MAXSCALE
{ "RESET", "TK_RESET", ALWAYS },
#endif
{ "RESTRICT", "TK_RESTRICT", FKEY },
#ifdef MAXSCALE
{ "REVOKE", "TK_REVOKE", ALWAYS },