MXS-3404 Fix problem by extending parser
This commit is contained in:
@ -646,7 +646,7 @@ columnid(A) ::= nm(X). {
|
|||||||
QUERY QUICK
|
QUERY QUICK
|
||||||
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW
|
RAISE RECURSIVE /*REINDEX*/ RELEASE /*RENAME*/ /*REPLACE*/ RESET RESTRICT ROLLBACK ROLLUP ROW
|
||||||
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SHARE SLAVE /*START*/ STATEMENT STATUS
|
SAVEPOINT SELECT_OPTIONS_KW /*SEQUENCE*/ SHARE SLAVE /*START*/ STATEMENT STATUS
|
||||||
TABLES TEMP TEMPTABLE /*TRIGGER*/
|
TABLES TEMP TEMPTABLE /*TRIGGER*/ TRIM TRIM_ARG
|
||||||
/*TRUNCATE*/
|
/*TRUNCATE*/
|
||||||
// TODO: UNSIGNED is a reserved word and should not automatically convert into an identifer.
|
// 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.
|
// 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;
|
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
|
%endif
|
||||||
expr(A) ::= id(X) LP STAR RP(E) wf_opt. {
|
expr(A) ::= id(X) LP STAR RP(E) wf_opt. {
|
||||||
A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
|
A.pExpr = sqlite3ExprFunction(pParse, 0, &X);
|
||||||
|
@ -176,6 +176,7 @@ static Keyword aKeywordTable[] = {
|
|||||||
{ "BETWEEN", "TK_BETWEEN", ALWAYS },
|
{ "BETWEEN", "TK_BETWEEN", ALWAYS },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
{ "BINARY", "TK_BINARY", ALWAYS },
|
{ "BINARY", "TK_BINARY", ALWAYS },
|
||||||
|
{ "BOTH", "TK_TRIM_ARG", ALWAYS },
|
||||||
#endif
|
#endif
|
||||||
{ "BY", "TK_BY", ALWAYS },
|
{ "BY", "TK_BY", ALWAYS },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
@ -336,6 +337,7 @@ static Keyword aKeywordTable[] = {
|
|||||||
{ "KEY", "TK_KEY", ALWAYS },
|
{ "KEY", "TK_KEY", ALWAYS },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
{ "KEYS", "TK_KEYS", ALWAYS },
|
{ "KEYS", "TK_KEYS", ALWAYS },
|
||||||
|
{ "LEADING", "TK_TRIM_ARG" , ALWAYS },
|
||||||
#endif
|
#endif
|
||||||
{ "LEFT", "TK_JOIN_KW", ALWAYS },
|
{ "LEFT", "TK_JOIN_KW", ALWAYS },
|
||||||
{ "LIKE", "TK_LIKE_KW", ALWAYS },
|
{ "LIKE", "TK_LIKE_KW", ALWAYS },
|
||||||
@ -479,9 +481,13 @@ static Keyword aKeywordTable[] = {
|
|||||||
{ "TIES", "TK_TIES", ANALYZE },
|
{ "TIES", "TK_TIES", ANALYZE },
|
||||||
#endif
|
#endif
|
||||||
{ "TO", "TK_TO", ALWAYS },
|
{ "TO", "TK_TO", ALWAYS },
|
||||||
|
#ifdef MAXSCALE
|
||||||
|
{ "TRAILING", "TK_TRIM_ARG", ALWAYS },
|
||||||
|
#endif
|
||||||
{ "TRANSACTION", "TK_TRANSACTION", ALWAYS },
|
{ "TRANSACTION", "TK_TRANSACTION", ALWAYS },
|
||||||
{ "TRIGGER", "TK_TRIGGER", TRIGGER },
|
{ "TRIGGER", "TK_TRIGGER", TRIGGER },
|
||||||
#ifdef MAXSCALE
|
#ifdef MAXSCALE
|
||||||
|
{ "TRIM", "TK_TRIM", ALWAYS },
|
||||||
{ "TRUNCATE", "TK_TRUNCATE", ALWAYS },
|
{ "TRUNCATE", "TK_TRUNCATE", ALWAYS },
|
||||||
{ "UNBOUNDED", "TK_UNBOUNDED", ALWAYS },
|
{ "UNBOUNDED", "TK_UNBOUNDED", ALWAYS },
|
||||||
#endif
|
#endif
|
||||||
|
@ -165,4 +165,5 @@ OPTIMIZE LOCAL TABLE t WAIT 42;
|
|||||||
USE `test`;
|
USE `test`;
|
||||||
|
|
||||||
# MXS-3404
|
# 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