From 9cf44b3092890553a50b7038a4d7f480293bcace Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Thu, 26 Apr 2018 13:03:54 +0300 Subject: [PATCH] MXS-1829 Recognise PREVIOUS in addition to NEXT Earlier only "SELECT NEXT VALUE FOR SEQ" was parsed properly, while "SELECT PREVIOUS VALUE FOR SEQ" was not. Now the latter statement is also parsed properly. --- query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y | 6 +++++- .../qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y index a765bec97..d4498cf37 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/src/parse.y @@ -626,6 +626,7 @@ columnid(A) ::= nm(X). { NAMES NEXT NO OF OFFSET OPEN + PREVIOUS QUICK RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESTRICT ROLLBACK ROLLUP ROW SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SLAVE /*START*/ STATUS @@ -1207,7 +1208,10 @@ selcollist(A) ::= sclp(P) nm(X) DOT STAR(Y). { A = sqlite3ExprListAppend(pParse,P, pDot); } %ifdef MAXSCALE -selcollist(A) ::= sclp(P) NEXT VALUE FOR nm(X) as(Y). { +next_or_previous(A) ::= NEXT(X). {A = X;} +next_or_previous(A) ::= PREVIOUS(X). {A = X;} + +selcollist(A) ::= sclp(P) next_or_previous VALUE FOR nm(X) as(Y). { Expr* pSeq = sqlite3PExpr(pParse, TK_ID, 0, 0, &X); ExprList* pArgs = sqlite3ExprListAppend(pParse, NULL, pSeq); Token nextval = { "nextval", 7 }; diff --git a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c index d8723ea16..5d51ea86a 100644 --- a/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c +++ b/query_classifier/qc_sqlite/sqlite-src-3110100/tool/mkkeywordhash.c @@ -383,6 +383,7 @@ static Keyword aKeywordTable[] = { #ifdef MAXSCALE { "PRECEDING", "TK_PRECEDING", ALWAYS }, { "PREPARE", "TK_PREPARE", ALWAYS }, + { "PREVIOUS", "TK_PREVIOUS", ALWAYS }, #endif { "PRIMARY", "TK_PRIMARY", ALWAYS }, #ifdef MAXSCALE