[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:
@ -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';
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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, () -> {
|
||||
|
||||
Reference in New Issue
Block a user