This is an automated email from the ASF dual-hosted git repository. yiguolei pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
commit 71fd3a6b12a59da574140bf748ad009be2dbe802 Author: yangshijie <sjyang2...@zju.edu.cn> AuthorDate: Wed Jan 31 13:33:27 2024 +0800 [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) --- .../antlr4/org/apache/doris/nereids/DorisLexer.g4 | 4 +++ .../antlr4/org/apache/doris/nereids/DorisParser.g4 | 11 +++++++ .../doris/nereids/parser/LogicalPlanBuilder.java | 34 ++++++++++++++++++++++ .../nereids_p0/datatype/test_date_acquire.groovy | 9 ++++-- 4 files changed, 55 insertions(+), 3 deletions(-) diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 index 4519e9eac55..8f3991084c7 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 @@ -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'; diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index 2afcc4d524f..3f2ae5a87d6 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -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 diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 6da5a04fe1f..e427931d5ee 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -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, () -> { diff --git a/regression-test/suites/nereids_p0/datatype/test_date_acquire.groovy b/regression-test/suites/nereids_p0/datatype/test_date_acquire.groovy index b71c3711918..a3545f74022 100644 --- a/regression-test/suites/nereids_p0/datatype/test_date_acquire.groovy +++ b/regression-test/suites/nereids_p0/datatype/test_date_acquire.groovy @@ -20,9 +20,12 @@ suite("test_date_acquire") { sql 'set enable_fallback_to_original_planner=false' sql 'set enable_fold_nondeterministic_fn=true' - String res = sql 'explain select now(), now(3), curdate(), current_date(), current_timestamp(), current_timestamp(3)' - res = res.split('VUNION')[1] - assertFalse(res.contains("()") || res.contains("(3)")) + String res1 = sql 'explain select now(), now(3), curdate(), current_date(), current_timestamp(), current_timestamp(3)' + res1 = res1.split('VUNION')[1] + assertFalse(res1.contains("()") || res1.contains("(3)")) + + String res2 = sql 'explain select CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIME, LOCALTIMESTAMP, CURRENT_USER' + assertTrue(res2.contains("CURRENT_DATE") || res2.contains("CURRENT_TIME") || res2.contains("CURRENT_TIMESTAMP") || res2.contains("LOCALTIME") || res2.contains("LOCALTIMESTAMP") || res2.contains("CURRENT_USER")) sql "set enable_fold_constant_by_be=true" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org