MXS-3404 Fix problem by extending parser
This commit is contained in:
@ -646,7 +646,7 @@ columnid(A) ::= nm(X). {
|
||||
QUERY QUICK
|
||||
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW
|
||||
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SHARE SLAVE /*START*/ STATEMENT STATUS
|
||||
TABLES TEMP TEMPTABLE /*TRIGGER*/
|
||||
TABLES TEMP TEMPTABLE /*TRIGGER*/ TRIM TRIM_ARG
|
||||
/*TRUNCATE*/
|
||||
// TODO: UNSIGNED 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.
|
||||
@ -2130,6 +2130,17 @@ expr(A) ::= keyword_as_function(X) LP distinct(D) exprlist(Y) RP(E). {
|
||||
A.pExpr->flags |= EP_Distinct;
|
||||
}
|
||||
}
|
||||
|
||||
trim_arg1_opt ::= TRIM_ARG.
|
||||
trim_arg1_opt ::= .
|
||||
|
||||
trim_arg2 ::= INTEGER|STRING.
|
||||
|
||||
expr(A) ::= TRIM(X) LP trim_arg1_opt trim_arg2 FROM expr(Y) RP(Z). {
|
||||
ExprList* pArgs = sqlite3ExprListAppend(pParse, NULL, Y.pExpr);
|
||||
A.pExpr = sqlite3ExprFunction(pParse, pArgs, &X);
|
||||
spanSet(&A, &X, &Z);
|
||||
}
|
||||
%endif
|
||||
expr(A) ::= id(X) LP STAR RP(E) wf_opt. {
|
||||
A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
|
||||
|
@ -176,6 +176,7 @@ static Keyword aKeywordTable[] = {
|
||||
{ "BETWEEN", "TK_BETWEEN", ALWAYS },
|
||||
#ifdef MAXSCALE
|
||||
{ "BINARY", "TK_BINARY", ALWAYS },
|
||||
{ "BOTH", "TK_TRIM_ARG", ALWAYS },
|
||||
#endif
|
||||
{ "BY", "TK_BY", ALWAYS },
|
||||
#ifdef MAXSCALE
|
||||
@ -336,6 +337,7 @@ static Keyword aKeywordTable[] = {
|
||||
{ "KEY", "TK_KEY", ALWAYS },
|
||||
#ifdef MAXSCALE
|
||||
{ "KEYS", "TK_KEYS", ALWAYS },
|
||||
{ "LEADING", "TK_TRIM_ARG" , ALWAYS },
|
||||
#endif
|
||||
{ "LEFT", "TK_JOIN_KW", ALWAYS },
|
||||
{ "LIKE", "TK_LIKE_KW", ALWAYS },
|
||||
@ -479,9 +481,13 @@ static Keyword aKeywordTable[] = {
|
||||
{ "TIES", "TK_TIES", ANALYZE },
|
||||
#endif
|
||||
{ "TO", "TK_TO", ALWAYS },
|
||||
#ifdef MAXSCALE
|
||||
{ "TRAILING", "TK_TRIM_ARG", ALWAYS },
|
||||
#endif
|
||||
{ "TRANSACTION", "TK_TRANSACTION", ALWAYS },
|
||||
{ "TRIGGER", "TK_TRIGGER", TRIGGER },
|
||||
#ifdef MAXSCALE
|
||||
{ "TRIM", "TK_TRIM", ALWAYS },
|
||||
{ "TRUNCATE", "TK_TRUNCATE", ALWAYS },
|
||||
{ "UNBOUNDED", "TK_UNBOUNDED", ALWAYS },
|
||||
#endif
|
||||
|
@ -165,4 +165,5 @@ OPTIMIZE LOCAL TABLE t WAIT 42;
|
||||
USE `test`;
|
||||
|
||||
# MXS-3404
|
||||
SELECT rdba_test() AS crmid, trim(LEADING 0 FROM @@server_id);
|
||||
# qc_mysqlembedded claims that "trim(LEADING ...)" is ltrim, to avoid that we use BOTH.
|
||||
SELECT rdba_test() AS crmid, trim(BOTH 0 FROM @@server_id);
|
||||
|
Reference in New Issue
Block a user