[feature](fe) support ANSI standard keyword for CURRENT_XXX #30550

support ANSI standard keywords:

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
LOCALTIME
LOCALTIMESTAMP
CURRENT_USER
mysql> SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP, CURRENT_USER;
+--------------+--------------+---------------------+-----------+---------------------+--------------+
| CURRENT_DATE | CURRENT_TIME | CURRENT_TIMESTAMP   | LOCALTIME | LOCALTIMESTAMP      | CURRENT_USER |
+--------------+--------------+---------------------+-----------+---------------------+--------------+
| 2024-01-31   | 03:53:20     | 2024-01-31 03:53:20 | 03:53:20  | 2024-01-31 03:53:20 | 'root'@'%'   |
+--------------+--------------+---------------------+-----------+---------------------+--------------+
1 row in set (0.07 sec)
This commit is contained in:
yangshijie
2024-01-31 13:33:27 +08:00
committed by yiguolei
parent 9eeb7dc9e4
commit 71fd3a6b12
4 changed files with 55 additions and 3 deletions

View File

@ -175,6 +175,8 @@ CROSS: 'CROSS';
CUBE: 'CUBE';
CURRENT: 'CURRENT';
CURRENT_CATALOG: 'CURRENT_CATALOG';
CURRENT_DATE: 'CURRENT_DATE';
CURRENT_TIME: 'CURRENT_TIME';
CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP';
CURRENT_USER: 'CURRENT_USER';
DATA: 'DATA';
@ -332,6 +334,8 @@ LINK: 'LINK';
LIST: 'LIST';
LOAD: 'LOAD';
LOCAL: 'LOCAL';
LOCALTIME: 'LOCALTIME';
LOCALTIMESTAMP: 'LOCALTIMESTAMP';
LOCATION: 'LOCATION';
LOCK: 'LOCK';
LOGICAL: 'LOGICAL';

View File

@ -663,6 +663,12 @@ primaryExpression
(INTERVAL unitsAmount=valueExpression unit=datetimeUnit
| unitsAmount=valueExpression)
RIGHT_PAREN #dateCeil
| name=CURRENT_DATE #currentDate
| name=CURRENT_TIME #currentTime
| name=CURRENT_TIMESTAMP #currentTimestamp
| name=LOCALTIME #localTime
| name=LOCALTIMESTAMP #localTimestamp
| name=CURRENT_USER #currentUser
| CASE whenClause+ (ELSE elseExpression=expression)? END #searchedCase
| CASE value=expression whenClause+ (ELSE elseExpression=expression)? END #simpleCase
| name=CAST LEFT_PAREN expression AS dataType RIGHT_PAREN #cast
@ -947,7 +953,10 @@ nonReserved
| CREATION
| CRON
| CURRENT_CATALOG
| CURRENT_DATE
| CURRENT_TIME
| CURRENT_TIMESTAMP
| CURRENT_USER
| DATA
| DATE
| DATE_ADD
@ -1036,6 +1045,8 @@ nonReserved
| LINES
| LINK
| LOCAL
| LOCALTIME
| LOCALTIMESTAMP
| LOCATION
| LOCK
| LOGICAL

View File

@ -262,6 +262,9 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.Array;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ArraySlice;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Char;
import org.apache.doris.nereids.trees.expressions.functions.scalar.ConvertTo;
import org.apache.doris.nereids.trees.expressions.functions.scalar.CurrentDate;
import org.apache.doris.nereids.trees.expressions.functions.scalar.CurrentTime;
import org.apache.doris.nereids.trees.expressions.functions.scalar.CurrentUser;
import org.apache.doris.nereids.trees.expressions.functions.scalar.DayCeil;
import org.apache.doris.nereids.trees.expressions.functions.scalar.DayFloor;
import org.apache.doris.nereids.trees.expressions.functions.scalar.DaysAdd;
@ -285,6 +288,7 @@ import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthFloor;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsAdd;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsDiff;
import org.apache.doris.nereids.trees.expressions.functions.scalar.MonthsSub;
import org.apache.doris.nereids.trees.expressions.functions.scalar.Now;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondCeil;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondFloor;
import org.apache.doris.nereids.trees.expressions.functions.scalar.SecondsAdd;
@ -1751,6 +1755,36 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> {
+ ", supported time unit: YEAR/MONTH/WEEK/DAY/HOUR/MINUTE/SECOND", ctx);
}
@Override
public Expression visitCurrentDate(DorisParser.CurrentDateContext ctx) {
return new CurrentDate().alias("CURRENT_DATE");
}
@Override
public Expression visitCurrentTime(DorisParser.CurrentTimeContext ctx) {
return new CurrentTime().alias("CURRENT_TIME");
}
@Override
public Expression visitCurrentTimestamp(DorisParser.CurrentTimestampContext ctx) {
return new Now().alias("CURRENT_TIMESTAMP");
}
@Override
public Expression visitLocalTime(DorisParser.LocalTimeContext ctx) {
return new CurrentTime().alias("LOCALTIME");
}
@Override
public Expression visitLocalTimestamp(DorisParser.LocalTimestampContext ctx) {
return new Now().alias("LOCALTIMESTAMP");
}
@Override
public Expression visitCurrentUser(DorisParser.CurrentUserContext ctx) {
return new CurrentUser().alias("CURRENT_USER");
}
@Override
public Expression visitDoublePipes(DorisParser.DoublePipesContext ctx) {
return ParserUtils.withOrigin(ctx, () -> {