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

Reply via email to