This is an automated email from the ASF dual-hosted git repository.

morrysnow pushed a commit to branch 2.0.1-rc04-patch
in repository https://gitbox.apache.org/repos/asf/doris.git

commit c019309d9b4a8b1e86001ff711d563b514146928
Author: morrySnow <morrys...@126.com>
AuthorDate: Mon Sep 11 13:55:33 2023 +0800

    [opt](Nereids) let keywords list same with legacy planner
---
 .../antlr4/org/apache/doris/nereids/DorisLexer.g4  | 360 +++++++++++------
 .../antlr4/org/apache/doris/nereids/DorisParser.g4 | 432 +++++++++++----------
 .../doris/nereids/parser/LogicalPlanBuilder.java   |  18 +-
 .../org/apache/doris/nereids/types/DataType.java   |  12 +-
 4 files changed, 493 insertions(+), 329 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 dee87743bb..34ce6f3a4b 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
@@ -89,322 +89,445 @@ RIGHT_BRACKET: ']';
 // Start of the keywords list
 //============================
 //--DORIS-KEYWORD-LIST-START
+ACCOUNT_LOCK: 'ACCOUNT_LOCK';
+ACCOUNT_UNLOCK: 'ACCOUNT_UNLOCK';
 ADD: 'ADD';
 ADDDATE:'ADDDATE';
+ADMIN: 'ADMIN';
 AFTER: 'AFTER';
+AGG_STATE: 'AGG_STATE';
+AGGREGATE: 'AGGREGATE';
+ALIAS: 'ALIAS';
 ALL: 'ALL';
 ALTER: 'ALTER';
 ANALYZE: 'ANALYZE';
 ANALYZED: 'ANALYZED';
 AND: 'AND';
 ANTI: 'ANTI';
-ANY: 'ANY';
-ARCHIVE: 'ARCHIVE';
+APPEND: 'APPEND';
 ARRAY: 'ARRAY';
 AS: 'AS';
 ASC: 'ASC';
 AT: 'AT';
-AUTHORIZATION: 'AUTHORIZATION';
-AVG: 'AVG';
+AUTHORS: 'AUTHORS';
+AUTO: 'AUTO';
+AUTO_INCREMENT: 'AUTO_INCREMENT';
+BACKEND: 'BACKEND';
+BACKENDS: 'BACKENDS';
+BACKUP: 'BACKUP';
+BEGIN: 'BEGIN';
 BETWEEN: 'BETWEEN';
+BIGINT: 'BIGINT';
+BIN: 'BIN';
+BINLOG: 'BINLOG';
 BITAND: 'BITAND';
+BITMAP: 'BITMAP';
+BITMAP_UNION: 'BITMAP_UNION';
 BITOR: 'BITOR';
 BITXOR: 'BITXOR';
-BOTH: 'BOTH';
-BUCKET: 'BUCKET';
+BLOB: 'BLOB';
+BOOLEAN: 'BOOLEAN';
+BRIEF: 'BRIEF';
+BROKER: 'BROKER';
 BUCKETS: 'BUCKETS';
+BUILD: 'BUILD';
+BUILTIN: 'BUILTIN';
 BY: 'BY';
-CACHE: 'CACHE';
-CASCADE: 'CASCADE';
+CACHED: 'CACHED';
+CANCEL: 'CANCEL';
 CASE: 'CASE';
 CAST: 'CAST';
 CATALOG: 'CATALOG';
 CATALOGS: 'CATALOGS';
-CHANGE: 'CHANGE';
+CHAIN: 'CHAIN';
+CHAR: 'CHAR' | 'CHARACTER';
+CHARSET: 'CHARSET';
 CHECK: 'CHECK';
-CLEAR: 'CLEAR';
+CLEAN: 'CLEAN';
 CLUSTER: 'CLUSTER';
-CLUSTERED: 'CLUSTERED';
-CODEGEN: 'CODEGEN';
+CLUSTERS: 'CLUSTERS';
 COLLATE: 'COLLATE';
-COLLECTION: 'COLLECTION';
+COLLATION: 'COLLATION';
 COLUMN: 'COLUMN';
 COLUMNS: 'COLUMNS';
 COMMENT: 'COMMENT';
 COMMIT: 'COMMIT';
+COMMITTED: 'COMMITTED';
 COMPACT: 'COMPACT';
-COMPACTIONS: 'COMPACTIONS';
-COMPUTE: 'COMPUTE';
-CONCATENATE: 'CONCATENATE';
-CONSTRAINT: 'CONSTRAINT';
-COST: 'COST';
+COMPLETE: 'COMPLETE';
+CONFIG: 'CONFIG';
+CONNECTION: 'CONNECTION';
+CONNECTION_ID: 'CONNECTION_ID';
+CONSISTENT: 'CONSISTENT';
+CONVERT: 'CONVERT';
+COPY: 'COPY';
+COUNT: 'COUNT';
 CREATE: 'CREATE';
+CREATION: 'CREATION';
+CRON: 'CRON';
 CROSS: 'CROSS';
 CUBE: 'CUBE';
 CURRENT: 'CURRENT';
-CURRENT_DATE: 'CURRENT_DATE';
-CURRENT_TIME: 'CURRENT_TIME';
+CURRENT_CATALOG: 'CURRENT_CATALOG';
 CURRENT_TIMESTAMP: 'CURRENT_TIMESTAMP';
 CURRENT_USER: 'CURRENT_USER';
-DAY: 'DAY';
-DAYS_ADD: 'DAYS_ADD';
-DAYS_SUB: 'DAYS_SUB';
 DATA: 'DATA';
 DATABASE: 'DATABASE';
 DATABASES: 'DATABASES';
 DATE: 'DATE';
-DATEADD: 'DATEADD';
-DATEDIFF: 'DATEDIFF';
 DATE_ADD: 'DATE_ADD';
-DATE_SUB: 'DATE_SUB';
+DATE_CEIL: 'DATE_CEIL';
 DATE_DIFF: 'DATE_DIFF';
-DBPROPERTIES: 'DBPROPERTIES';
+DATE_FLOOR: 'DATE_FLOOR';
+DATE_SUB: 'DATE_SUB';
+DATEADD: 'DATEADD';
+DATEDIFF: 'DATEDIFF';
+DATETIME: 'DATETIME';
+DATETIMEV2: 'DATETIMEV2';
+DATEV2: 'DATEV2';
+DAY: 'DAY';
+DAYS_ADD: 'DAYS_ADD';
+DAYS_SUB: 'DAYS_SUB';
+DECIMAL: 'DECIMAL';
+DECIMALV3: 'DECIMALV3';
+DECOMMISSION: 'DECOMMISSION';
 DEFAULT: 'DEFAULT';
-DEFINED: 'DEFINED';
+DEFERRED: 'DEFERRED';
 DELETE: 'DELETE';
-DELIMITED: 'DELIMITED';
+DEMAND: 'DEMAND';
 DESC: 'DESC';
 DESCRIBE: 'DESCRIBE';
-DFS: 'DFS';
-DIRECTORIES: 'DIRECTORIES';
-DIRECTORY: 'DIRECTORY';
+DIAGNOSE: 'DIAGNOSE';
+DISK: 'DISK';
 DISTINCT: 'DISTINCT';
-DISTRIBUTE: 'DISTRIBUTE';
+DISTINCTPC: 'DISTINCTPC';
+DISTINCTPCSA: 'DISTINCTPCSA';
+DISTRIBUTED: 'DISTRIBUTED';
+DISTRIBUTION: 'DISTRIBUTION';
 DIV: 'DIV';
+DO: 'DO';
+DOUBLE: 'DOUBLE';
 DROP: 'DROP';
+DROPP: 'DROPP';
+DUPLICATE: 'DUPLICATE';
+DYNAMIC: 'DYNAMIC';
 ELSE: 'ELSE';
+ENABLE: 'ENABLE';
+ENCRYPTKEY: 'ENCRYPTKEY';
+ENCRYPTKEYS: 'ENCRYPTKEYS';
 END: 'END';
-ESCAPE: 'ESCAPE';
-ESCAPED: 'ESCAPED';
+ENDS: 'ENDS';
+ENGINE: 'ENGINE';
+ENGINES: 'ENGINES';
+ENTER: 'ENTER';
+ERRORS: 'ERRORS';
+EVENTS: 'EVENTS';
+EVERY: 'EVERY';
 EXCEPT: 'EXCEPT';
-EXCHANGE: 'EXCHANGE';
+EXCLUDE: 'EXCLUDE';
+EXECUTE: 'EXECUTE';
 EXISTS: 'EXISTS';
+EXPIRED: 'EXPIRED';
 EXPLAIN: 'EXPLAIN';
 EXPORT: 'EXPORT';
 EXTENDED: 'EXTENDED';
 EXTERNAL: 'EXTERNAL';
 EXTRACT: 'EXTRACT';
+FAILED_LOGIN_ATTEMPTS: 'FAILED_LOGIN_ATTEMPTS';
 FALSE: 'FALSE';
-FETCH: 'FETCH';
+FAST: 'FAST';
+FEATURE: 'FEATURE';
 FIELDS: 'FIELDS';
+FILE: 'FILE';
 FILTER: 'FILTER';
-FILEFORMAT: 'FILEFORMAT';
 FIRST: 'FIRST';
+FLOAT: 'FLOAT';
+FOLLOWER: 'FOLLOWER';
 FOLLOWING: 'FOLLOWING';
 FOR: 'FOR';
-FOREIGN: 'FOREIGN';
+FORCE: 'FORCE';
 FORMAT: 'FORMAT';
-FORMATTED: 'FORMATTED';
+FREE: 'FREE';
 FROM: 'FROM';
+FRONTEND: 'FRONTEND';
+FRONTENDS: 'FRONTENDS';
 FULL: 'FULL';
 FUNCTION: 'FUNCTION';
 FUNCTIONS: 'FUNCTIONS';
 GLOBAL: 'GLOBAL';
 GRANT: 'GRANT';
+GRANTS: 'GRANTS';
 GRAPH: 'GRAPH';
 GROUP: 'GROUP';
 GROUPING: 'GROUPING';
+GROUPS: 'GROUPS';
+HASH: 'HASH';
 HAVING: 'HAVING';
+HDFS: 'HDFS';
+HELP: 'HELP';
+HISTOGRAM: 'HISTOGRAM';
+HLL: 'HLL';
+HLL_UNION: 'HLL_UNION';
+HOSTNAME: 'HOSTNAME';
 HOUR: 'HOUR';
+HUB: 'HUB';
+IDENTIFIED: 'IDENTIFIED';
 IF: 'IF';
 IGNORE: 'IGNORE';
-IMPORT: 'IMPORT';
+IMMEDIATE: 'IMMEDIATE';
 IN: 'IN';
+INCREMENTAL: 'INCREMENTAL';
 INDEX: 'INDEX';
 INDEXES: 'INDEXES';
+INFILE: 'INFILE';
 INNER: 'INNER';
-INPATH: 'INPATH';
-INPUTFORMAT: 'INPUTFORMAT';
 INSERT: 'INSERT';
+INSTALL: 'INSTALL';
+INT: 'INT';
+INTEGER: 'INTEGER';
+INTERMEDIATE: 'INTERMEDIATE';
 INTERSECT: 'INTERSECT';
 INTERVAL: 'INTERVAL';
 INTO: 'INTO';
+INVERTED: 'INVERTED';
 IS: 'IS';
-ISNULL: 'ISNULL';
-IS_NULL_PRED: 'IS_NULL_PRED';
 IS_NOT_NULL_PRED: 'IS_NOT_NULL_PRED';
-ITEMS: 'ITEMS';
+IS_NULL_PRED: 'IS_NULL_PRED';
+ISNULL: 'ISNULL';
+ISOLATION: 'ISOLATION';
+JOB: 'JOB';
+JOBS: 'JOBS';
 JOIN: 'JOIN';
+JSON: 'JSON';
+JSONB: 'JSONB';
+KEY: 'KEY';
 KEYS: 'KEYS';
+KILL: 'KILL';
 LABEL: 'LABEL';
+LARGEINT: 'LARGEINT';
 LAST: 'LAST';
 LATERAL: 'LATERAL';
-LAZY: 'LAZY';
-LEADING: 'LEADING';
+LDAP: 'LDAP';
+LDAP_ADMIN_PASSWORD: 'LDAP_ADMIN_PASSWORD';
 LEFT: 'LEFT';
+LESS: 'LESS';
+LEVEL: 'LEVEL';
 LIKE: 'LIKE';
-ILIKE: 'ILIKE';
 LIMIT: 'LIMIT';
-OFFSET: 'OFFSET';
 LINES: 'LINES';
+LINK: 'LINK';
 LIST: 'LIST';
 LOAD: 'LOAD';
 LOCAL: 'LOCAL';
 LOCATION: 'LOCATION';
 LOCK: 'LOCK';
-LOCKS: 'LOCKS';
 LOGICAL: 'LOGICAL';
-MACRO: 'MACRO';
+LOW_PRIORITY: 'LOW_PRIORITY';
 MAP: 'MAP';
 MATCH: 'MATCH';
-MATCH_ANY: 'MATCH_ANY';
 MATCH_ALL: 'MATCH_ALL';
+MATCH_ANY: 'MATCH_ANY';
+MATCH_ELEMENT_EQ: 'ELEMENT_EQ';
+MATCH_ELEMENT_GE: 'ELEMENT_GE';
+MATCH_ELEMENT_GT: 'ELEMENT_GT';
+MATCH_ELEMENT_LE: 'ELEMENT_LE';
+MATCH_ELEMENT_LT: 'ELEMENT_LT';
 MATCH_PHRASE: 'MATCH_PHRASE';
-MATCHED: 'MATCHED';
+MATERIALIZED: 'MATERIALIZED';
+MAX: 'MAX';
+MAX_VALUE: 'MAXVALUE';
 MEMO:'MEMO';
 MERGE: 'MERGE';
+MIGRATE: 'MIGRATE';
+MIGRATIONS: 'MIGRATIONS';
+MIN: 'MIN';
+MINUS: 'MINUS';
 MINUTE: 'MINUTE';
+MODIFY: 'MODIFY';
 MONTH: 'MONTH';
-MSCK: 'MSCK';
-NAMESPACE: 'NAMESPACE';
-NAMESPACES: 'NAMESPACES';
+MTMV: 'MTMV';
+NAME: 'NAME';
+NAMES: 'NAMES';
 NATURAL: 'NATURAL';
+NEGATIVE: 'NEGATIVE';
+NEVER: 'NEVER';
+NEXT: 'NEXT';
+NGRAM_BF: 'NGRAM_BF';
 NO: 'NO';
-NOT: 'NOT' | '!';
+NOT: 'NOT';
 NULL: 'NULL';
 NULLS: 'NULLS';
+OBSERVER: 'OBSERVER';
 OF: 'OF';
+OFFSET: 'OFFSET';
 ON: 'ON';
 ONLY: 'ONLY';
+OPEN: 'OPEN';
 OPTIMIZED: 'OPTIMIZED';
-OPTION: 'OPTION';
-OPTIONS: 'OPTIONS';
 OR: 'OR';
 ORDER: 'ORDER';
-OUT: 'OUT';
 OUTER: 'OUTER';
 OUTFILE: 'OUTFILE';
-OUTPUTFORMAT: 'OUTPUTFORMAT';
 OVER: 'OVER';
-OVERLAPS: 'OVERLAPS';
-OVERLAY: 'OVERLAY';
 OVERWRITE: 'OVERWRITE';
+PARAMETER: 'PARAMETER';
 PARSED: 'PARSED';
 PARTITION: 'PARTITION';
-PARTITIONED: 'PARTITIONED';
 PARTITIONS: 'PARTITIONS';
-PERCENTILE_CONT: 'PERCENTILE_CONT';
-PERCENTLIT: 'PERCENT';
+PASSWORD: 'PASSWORD';
+PASSWORD_EXPIRE: 'PASSWORD_EXPIRE';
+PASSWORD_HISTORY: 'PASSWORD_HISTORY';
+PASSWORD_LOCK_TIME: 'PASSWORD_LOCK_TIME';
+PASSWORD_REUSE: 'PASSWORD_REUSE';
+PATH: 'PATH';
+PAUSE: 'PAUSE';
+PERCENT: 'PERCENT';
+PERIOD: 'PERIOD';
 PERMISSIVE: 'PERMISSIVE';
 PHYSICAL: 'PHYSICAL';
-PIVOT: 'PIVOT';
-PLACING: 'PLACING';
 PLAN: 'PLAN';
+PLUGIN: 'PLUGIN';
+PLUGINS: 'PLUGINS';
 POLICY: 'POLICY';
-POSITION: 'POSITION';
 PRECEDING: 'PRECEDING';
-PRIMARY: 'PRIMARY';
-PRINCIPALS: 'PRINCIPALS';
+PREPARE: 'PREPARE';
+PROC: 'PROC';
+PROCEDURE: 'PROCEDURE';
+PROCESSLIST: 'PROCESSLIST';
+PROFILE: 'PROFILE';
 PROPERTIES: 'PROPERTIES';
-PURGE: 'PURGE';
+PROPERTY: 'PROPERTY';
+QUANTILE_STATE: 'QUANTILE_STATE';
+QUANTILE_UNION: 'QUANTILE_UNION';
 QUERY: 'QUERY';
+QUOTA: 'QUOTA';
+RANDOM: 'RANDOM';
 RANGE: 'RANGE';
-RECORDREADER: 'RECORDREADER';
-RECORDWRITER: 'RECORDWRITER';
+READ: 'READ';
+REAL: 'REAL';
+REBALANCE: 'REBALANCE';
 RECOVER: 'RECOVER';
-REDUCE: 'REDUCE';
-REFERENCES: 'REFERENCES';
+RECYCLE: 'RECYCLE';
 REFRESH: 'REFRESH';
 REGEXP: 'REGEXP';
+RELEASE: 'RELEASE';
 RENAME: 'RENAME';
 REPAIR: 'REPAIR';
 REPEATABLE: 'REPEATABLE';
 REPLACE: 'REPLACE';
-RESET: 'RESET';
-RESPECT: 'RESPECT';
-RESTRICT: 'RESTRICT';
+REPLACE_IF_NOT_NULL: 'REPLACE_IF_NOT_NULL';
+REPLICA: 'REPLICA';
+REPOSITORIES: 'REPOSITORIES';
+REPOSITORY: 'REPOSITORY';
+RESOURCE: 'RESOURCE';
+RESOURCES: 'RESOURCES';
+RESTORE: 'RESTORE';
 RESTRICTIVE: 'RESTRICTIVE';
+RESUME: 'RESUME';
+RETURNS: 'RETURNS';
 REVOKE: 'REVOKE';
 REWRITTEN: 'REWRITTEN';
 RIGHT: 'RIGHT';
-// original optimizer only support REGEXP, the new optimizer should be 
consistent with it
 RLIKE: 'RLIKE';
 ROLE: 'ROLE';
 ROLES: 'ROLES';
 ROLLBACK: 'ROLLBACK';
 ROLLUP: 'ROLLUP';
+ROUTINE: 'ROUTINE';
 ROW: 'ROW';
 ROWS: 'ROWS';
-SECOND: 'SECOND';
+S3: 'S3';
+SAMPLE: 'SAMPLE';
+SCHEDULER: 'SCHEDULER';
 SCHEMA: 'SCHEMA';
 SCHEMAS: 'SCHEMAS';
+SECOND: 'SECOND';
 SELECT: 'SELECT';
 SEMI: 'SEMI';
-SEPARATED: 'SEPARATED';
-SERDE: 'SERDE';
-SERDEPROPERTIES: 'SERDEPROPERTIES';
+SERIALIZABLE: 'SERIALIZABLE';
 SESSION: 'SESSION';
-SESSION_USER: 'SESSION_USER';
 SET: 'SET';
-SETMINUS: 'MINUS';
 SETS: 'SETS';
 SHAPE: 'SHAPE';
 SHOW: 'SHOW';
-SKEWED: 'SKEWED';
-SOME: 'SOME';
-SORT: 'SORT';
-SORTED: 'SORTED';
+SIGNED: 'SIGNED';
+SKEW: 'SKEW';
+SMALLINT: 'SMALLINT';
+SNAPSHOT: 'SNAPSHOT';
+SONAME: 'SONAME';
+SPLIT: 'SPLIT';
+SQL_BLOCK_RULE: 'SQL_BLOCK_RULE';
 START: 'START';
-STATISTICS: 'STATISTICS';
+STARTS: 'STARTS';
+STATS: 'STATS';
+STATUS: 'STATUS';
+STOP: 'STOP';
 STORAGE: 'STORAGE';
-STORED: 'STORED';
-STRATIFY: 'STRATIFY';
+STREAM: 'STREAM';
+STREAMING: 'STREAMING';
+STRING: 'STRING';
 STRUCT: 'STRUCT';
 SUBDATE: 'SUBDATE';
+SUM: 'SUM';
+SUPERUSER: 'SUPERUSER';
+SWITCH: 'SWITCH';
 SYNC: 'SYNC';
-SYSTEM_TIME: 'SYSTEM_TIME';
-SYSTEM_VERSION: 'SYSTEM_VERSION';
+SYSTEM: 'SYSTEM';
 TABLE: 'TABLE';
 TABLES: 'TABLES';
 TABLESAMPLE: 'TABLESAMPLE';
-TBLPROPERTIES: 'TBLPROPERTIES';
-TEMPORARY: 'TEMPORARY' | 'TEMP';
+TABLET: 'TABLET';
+TABLETS: 'TABLETS';
+TASK: 'TASK';
+TASKS: 'TASKS';
+TEMPORARY: 'TEMPORARY';
 TERMINATED: 'TERMINATED';
+TEXT: 'TEXT';
+THAN: 'THAN';
 THEN: 'THEN';
 TIME: 'TIME';
 TIMESTAMP: 'TIMESTAMP';
 TIMESTAMPADD: 'TIMESTAMPADD';
 TIMESTAMPDIFF: 'TIMESTAMPDIFF';
+TINYINT: 'TINYINT';
 TO: 'TO';
-TOUCH: 'TOUCH';
-TRAILING: 'TRAILING';
 TRANSACTION: 'TRANSACTION';
-TRANSACTIONS: 'TRANSACTIONS';
-TRANSFORM: 'TRANSFORM';
+TRASH: 'TRASH';
+TRIGGERS: 'TRIGGERS';
 TRIM: 'TRIM';
 TRUE: 'TRUE';
 TRUNCATE: 'TRUNCATE';
-TRY_CAST: 'TRY_CAST';
 TYPE: 'TYPE';
-UNARCHIVE: 'UNARCHIVE';
+TYPECAST: 'TYPE_CAST';
+TYPES: 'TYPES';
 UNBOUNDED: 'UNBOUNDED';
-UNCACHE: 'UNCACHE';
+UNCOMMITTED: 'UNCOMMITTED';
+UNINSTALL: 'UNINSTALL';
 UNION: 'UNION';
 UNIQUE: 'UNIQUE';
-UNKNOWN: 'UNKNOWN';
 UNLOCK: 'UNLOCK';
-UNSET: 'UNSET';
+UNSIGNED: 'UNSIGNED';
 UPDATE: 'UPDATE';
 USE: 'USE';
 USER: 'USER';
 USING: 'USING';
+VALUE: 'VALUE';
 VALUES: 'VALUES';
+VARCHAR: 'VARCHAR';
+VARIABLES: 'VARIABLES';
 VERBOSE: 'VERBOSE';
 VERSION: 'VERSION';
 VIEW: 'VIEW';
-VIEWS: 'VIEWS';
+WARNINGS: 'WARNINGS';
 WEEK: 'WEEK';
 WHEN: 'WHEN';
 WHERE: 'WHERE';
-WINDOW: 'WINDOW';
+WHITELIST: 'WHITELIST';
 WITH: 'WITH';
-WITHIN: 'WITHIN';
+WORK: 'WORK';
+WORKLOAD: 'WORKLOAD';
+WRITE: 'WRITE';
 YEAR: 'YEAR';
-ZONE: 'ZONE';
-DATEV2: 'DATEV2';
-S3: 'S3';
-HDFS: 'HDFS';
-BROKER: 'BROKER';
 //--DORIS-KEYWORD-LIST-END
 //============================
 // End of the keywords list
@@ -419,13 +542,14 @@ GT  : '>';
 GTE : '>=' | '!<';
 
 PLUS: '+';
-MINUS: '-';
+SUBTRACT: '-';
 ASTERISK: '*';
 SLASH: '/';
-PERCENT: '%';
+MOD: '%';
 TILDE: '~';
 AMPERSAND: '&';
 LOGICALAND: '&&';
+LOGICALNOT: '!';
 PIPE: '|';
 DOUBLEPIPES: '||';
 HAT: '^';
@@ -436,7 +560,7 @@ HINT_END: '*/';
 ATSIGN: '@';
 DOUBLEATSIGN: '@@';
 
-STRING
+STRING_LITERAL
     : '\'' ( ~('\''|'\\') | ('\\' .) )* '\''
     | '"' ( ~('"'|'\\') | ('\\' .) )* '"'
     | 'R\'' (~'\'')* '\''
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 03e6fa0ace..363b5b0e35 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
@@ -59,7 +59,7 @@ statement
 
 identifierOrText
     : errorCapturingIdentifier
-    | STRING
+    | STRING_LITERAL
     ;
 
 userIdentify
@@ -323,7 +323,7 @@ expression
     ;
 
 booleanExpression
-    : NOT booleanExpression                                                    
     #logicalNot
+    : (LOGICALNOT | NOT) booleanExpression                                     
     #logicalNot
     | EXISTS LEFT_PAREN query RIGHT_PAREN                                      
     #exist
     | (ISNULL | IS_NULL_PRED) LEFT_PAREN valueExpression RIGHT_PAREN           
     #isnull
     | IS_NOT_NULL_PRED LEFT_PAREN valueExpression RIGHT_PAREN                  
     #is_not_null_pred
@@ -344,9 +344,9 @@ predicate
 
 valueExpression
     : primaryExpression                                                        
              #valueExpressionDefault
-    | operator=(MINUS | PLUS | TILDE) valueExpression                          
              #arithmeticUnary
-    | left=valueExpression operator=(ASTERISK | SLASH | PERCENT) 
right=valueExpression       #arithmeticBinary
-    | left=valueExpression operator=(PLUS | MINUS | DIV | HAT | PIPE | 
AMPERSAND)
+    | operator=(SUBTRACT | PLUS | TILDE) valueExpression                       
              #arithmeticUnary
+    | left=valueExpression operator=(ASTERISK | SLASH | MOD) 
right=valueExpression           #arithmeticBinary
+    | left=valueExpression operator=(PLUS | SUBTRACT | DIV | HAT | PIPE | 
AMPERSAND)
                            right=valueExpression                               
              #arithmeticBinary
     | left=valueExpression comparisonOperator right=valueExpression            
              #comparison
     | operator=(BITAND | BITOR | BITXOR) LEFT_PAREN left = valueExpression
@@ -410,6 +410,20 @@ functionIdentifier
 functionNameIdentifier
     : identifier
     | LEFT | RIGHT
+    | ADD
+    | CONNECTION_ID
+    | CURRENT_CATALOG
+    | CURRENT_USER
+    | DATABASE
+    | IF
+    | LEFT
+    | LIKE
+    | PASSWORD
+    | REGEXP
+    | RIGHT
+    | SCHEMA
+    | TRIM
+    | USER
     ;
 
 windowSpec
@@ -451,10 +465,10 @@ specifiedPartition
 constant
     : NULL                                                                     
                #nullLiteral
     | interval                                                                 
                #intervalLiteral
-    | type=(DATE | DATEV2 | TIMESTAMP) STRING                                  
                #typeConstructor
+    | type=(DATE | DATEV2 | TIMESTAMP) STRING_LITERAL                          
                #typeConstructor
     | number                                                                   
                #numericLiteral
     | booleanValue                                                             
                #booleanLiteral
-    | STRING                                                                   
                #stringLiteral
+    | STRING_LITERAL                                                           
                #stringLiteral
     ;
 
 comparisonOperator
@@ -478,8 +492,37 @@ unitIdentifier
     ;
 
 dataType
-    : identifier (LEFT_PAREN INTEGER_VALUE
-      (COMMA INTEGER_VALUE)* RIGHT_PAREN)?                      
#primitiveDataType
+    : primitiveColType (LEFT_PAREN (INTEGER_VALUE | ASTERISK)
+      (COMMA INTEGER_VALUE)* RIGHT_PAREN)?                          
#primitiveDataType
+    ;
+
+primitiveColType:
+    | type=TINYINT
+    | type=SMALLINT
+    | (SIGNED | UNSIGNED)? type=INT
+    | type=BIGINT
+    | type=LARGEINT
+    | type=BOOLEAN
+    | type=FLOAT
+    | type=DOUBLE
+    | type=DATE
+    | type=DATETIME
+    | type=TIME
+    | type=DATEV2
+    | type=DATETIMEV2
+    | type=BITMAP
+    | type=QUANTILE_STATE
+    | type=HLL
+    | type=AGG_STATE
+    | type=STRING
+    | type=JSON
+    | type=JSONB
+    | type=TEXT
+    | type=VARCHAR
+    | type=CHAR
+    | type=DECIMAL
+    | type=DECIMALV3
+    | type=ALL
     ;
 
 // this rule is used for explicitly capturing wrong identifiers such as 
test-table, which should actually be `test-table`
@@ -491,7 +534,7 @@ errorCapturingIdentifier
 
 // extra left-factoring grammar
 errorCapturingIdentifierExtra
-    : (MINUS identifier)+    #errorIdent
+    : (SUBTRACT identifier)+    #errorIdent
     |                        #realIdent
     ;
 
@@ -510,8 +553,8 @@ quotedIdentifier
     ;
 
 number
-    : MINUS? INTEGER_VALUE            #integerLiteral
-    | MINUS? (EXPONENT_VALUE | DECIMAL_VALUE) #decimalLiteral
+    : SUBTRACT? INTEGER_VALUE            #integerLiteral
+    | SUBTRACT? (EXPONENT_VALUE | DECIMAL_VALUE) #decimalLiteral
     ;
 
 // there are 1 kinds of keywords in Doris.
@@ -521,278 +564,267 @@ number
 // TODO: need to stay consistent with the legacy
 nonReserved
 //--DEFAULT-NON-RESERVED-START
-    : ADD
+    : ADDDATE
     | AFTER
-    | ALL
-    | ALTER
-    | ANALYZE
+    | AGG_STATE
+    | AGGREGATE
+    | ALIAS
     | ANALYZED
-    | AND
-    | ANY
-    | ARCHIVE
     | ARRAY
-    | ASC
     | AT
-    | AUTHORIZATION
-    | AVG
-    | BETWEEN
-    | BOTH
-    | BUCKET
+    | AUTHORS
+    | BACKENDS
+    | BACKUP
+    | BEGIN
+    | BIN
+    | BITAND
+    | BITMAP
+    | BITMAP_UNION
+    | BITOR
+    | BITXOR
+    | BLOB
+    | BOOLEAN
+    | BRIEF
+    | BROKER
     | BUCKETS
-    | BY
-    | CACHE
-    | CASCADE
-    | CASE
-    | CAST
+    | BUILD
+    | BUILTIN
+    | CACHED
     | CATALOG
     | CATALOGS
-    | CHANGE
+    | CHAIN
+    | CHAR
+    | CHARSET
     | CHECK
-    | CLEAR
     | CLUSTER
-    | CLUSTERED
-    | CODEGEN
-    | COLLATE
-    | COLLECTION
-    | COLUMN
+    | CLUSTERS
+    | COLLATION
     | COLUMNS
     | COMMENT
     | COMMIT
+    | COMMITTED
     | COMPACT
-    | COMPACTIONS
-    | COMPUTE
-    | CONCATENATE
-    | CONSTRAINT
-    | COST
-    | CREATE
-    | CUBE
-    | CURRENT
-    | CURRENT_DATE
-    | CURRENT_TIME
+    | COMPLETE
+    | CONFIG
+    | CONNECTION
+    | CONNECTION_ID
+    | CONSISTENT
+    | CONVERT
+    | COPY
+    | COUNT
+    | CREATION
+    | CRON
+    | CURRENT_CATALOG
     | CURRENT_TIMESTAMP
-    | CURRENT_USER
     | DATA
-    | DATABASE
-    | DATABASES
     | DATE
-    | DATEV2
     | DATE_ADD
-    | DATEDIFF
+    | DATE_CEIL
     | DATE_DIFF
+    | DATE_FLOOR
+    | DATE_SUB
+    | DATEADD
+    | DATEDIFF
+    | DATETIME
+    | DATETIMEV2
+    | DATEV2
     | DAY
-    | DBPROPERTIES
-    | DEFINED
-    | DELETE
-    | DELIMITED
-    | DESC
-    | DESCRIBE
-    | DFS
-    | DIRECTORIES
-    | DIRECTORY
-    | DISTINCT
-    | DISTRIBUTE
-    | DIV
-    | DROP
-    | ELSE
+    | DAYS_ADD
+    | DAYS_SUB
+    | DECIMAL
+    | DECIMALV3
+    | DEFERRED
+    | DEMAND
+    | DIAGNOSE
+    | DISTINCTPC
+    | DISTINCTPCSA
+    | DO
+    | DYNAMIC
+    | ENABLE
+    | ENCRYPTKEY
+    | ENCRYPTKEYS
     | END
-    | ESCAPE
-    | ESCAPED
-    | EXCHANGE
-    | EXISTS
-    | EXPLAIN
-    | EXPORT
-    | EXTENDED
+    | ENDS
+    | ENGINE
+    | ENGINES
+    | ERRORS
+    | EVENTS
+    | EVERY
+    | EXCLUDE
+    | EXPIRED
     | EXTERNAL
-    | EXTRACT
-    | FALSE
-    | FETCH
-    | FILTER
+    | FAILED_LOGIN_ATTEMPTS
+    | FAST
+    | FEATURE
     | FIELDS
-    | FILEFORMAT
+    | FILE
+    | FILTER
     | FIRST
-    | FOLLOWING
-    | FOR
-    | FOREIGN
     | FORMAT
-    | FORMATTED
-    | FROM
+    | FREE
+    | FRONTENDS
     | FUNCTION
-    | FUNCTIONS
     | GLOBAL
-    | GRANT
     | GRAPH
-    | GROUP
     | GROUPING
-    | HAVING
+    | GROUPS
+    | HASH
+    | HDFS
+    | HELP
+    | HISTOGRAM
+    | HLL_UNION
+    | HOSTNAME
     | HOUR
-    | IF
+    | HUB
+    | IDENTIFIED
     | IGNORE
-    | IMPORT
-    | IN
-    | INDEX
+    | IMMEDIATE
+    | INCREMENTAL
     | INDEXES
-    | INPATH
-    | INPUTFORMAT
-    | INSERT
-    | INTERVAL
-    | INTO
-    | IS
-    | ITEMS
-    | KEYS
+    | INVERTED
+    | IS_NOT_NULL_PRED
+    | IS_NULL_PRED
+    | ISNULL
+    | ISOLATION
+    | JOB
+    | JOBS
+    | JSON
+    | JSONB
     | LABEL
     | LAST
-    | LAZY
-    | LEADING
-    | LIKE
-    | ILIKE
-    | LIMIT
+    | LDAP
+    | LDAP_ADMIN_PASSWORD
+    | LESS
+    | LEVEL
     | LINES
-    | LIST
-    | LOAD
+    | LINK
     | LOCAL
     | LOCATION
     | LOCK
-    | LOCKS
     | LOGICAL
-    | MACRO
     | MAP
-    | MATCHED
+    | MATERIALIZED
+    | MAX
+    | MEMO
     | MERGE
+    | MIGRATE
+    | MIGRATIONS
+    | MIN
     | MINUTE
+    | MODIFY
     | MONTH
-    | MSCK
-    | NAMESPACE
-    | NAMESPACES
+    | MTMV
+    | NAME
+    | NAMES
+    | NEGATIVE
+    | NEVER
+    | NEXT
+    | NGRAM_BF
     | NO
-    | NOT
-    | NULL
     | NULLS
     | OF
+    | OFFSET
     | ONLY
+    | OPEN
     | OPTIMIZED
-    | OPTION
-    | OPTIONS
-    | OR
-    | ORDER
-    | OUT
-    | OUTER
-    | OUTPUTFORMAT
-    | OVERLAPS
-    | OVERLAY
-    | OVERWRITE
+    | PARAMETER
     | PARSED
-    | PARTITION
-    | PARTITIONED
     | PARTITIONS
-    | PERCENTILE_CONT
-    | PERCENTLIT
+    | PASSWORD
+    | PASSWORD_EXPIRE
+    | PASSWORD_HISTORY
+    | PASSWORD_LOCK_TIME
+    | PASSWORD_REUSE
+    | PATH
+    | PAUSE
+    | PERCENT
+    | PERIOD
     | PERMISSIVE
     | PHYSICAL
-    | PIVOT
-    | PLACING
     | PLAN
+    | PLUGIN
+    | PLUGINS
     | POLICY
-    | POSITION
-    | PRECEDING
-    | PRIMARY
-    | PRINCIPALS
+    | PROC
+    | PROCESSLIST
+    | PROFILE
     | PROPERTIES
-    | PURGE
+    | PROPERTY
+    | QUANTILE_STATE
+    | QUANTILE_UNION
     | QUERY
-    | RANGE
-    | RECORDREADER
-    | RECORDWRITER
+    | QUOTA
+    | RANDOM
     | RECOVER
-    | REDUCE
-    | REFERENCES
+    | RECYCLE
     | REFRESH
-    | RENAME
-    | REPAIR
     | REPEATABLE
     | REPLACE
-    | RESET
-    | RESPECT
-    | RESTRICT
+    | REPLACE_IF_NOT_NULL
+    | REPOSITORIES
+    | REPOSITORY
+    | RESOURCE
+    | RESOURCES
+    | RESTORE
     | RESTRICTIVE
-    | REVOKE
+    | RESUME
+    | RETURNS
     | REWRITTEN
     | RLIKE
-    | ROLE
-    | ROLES
     | ROLLBACK
     | ROLLUP
-    | ROWS
+    | ROUTINE
+    | S3
+    | SAMPLE
+    | SCHEDULER
     | SCHEMA
-    | SCHEMAS
     | SECOND
-    | SELECT
-    | SEPARATED
-    | SERDE
-    | SERDEPROPERTIES
-    | SESSION_USER
-    | SET
-    | SETS
-    | SHOW
-    | SKEWED
-    | SOME
-    | SORT
-    | SORTED
+    | SERIALIZABLE
+    | SESSION
+    | SHAPE
+    | SKEW
+    | SNAPSHOT
+    | SONAME
+    | SPLIT
     | START
-    | STATISTICS
+    | STARTS
+    | STATS
+    | STATUS
+    | STOP
     | STORAGE
-    | STORED
-    | STRATIFY
+    | STREAM
+    | STREAMING
+    | STRING
     | STRUCT
-    | SYNC
-    | SYSTEM_TIME
-    | SYSTEM_VERSION
-    | TABLE
+    | SUBDATE
+    | SUM
     | TABLES
-    | TABLESAMPLE
-    | TBLPROPERTIES
+    | TASK
+    | TASKS
     | TEMPORARY
-    | TERMINATED
-    | THEN
+    | TEXT
+    | THAN
     | TIME
     | TIMESTAMP
     | TIMESTAMPADD
     | TIMESTAMPDIFF
-    | TO
-    | TOUCH
-    | TRAILING
     | TRANSACTION
-    | TRANSACTIONS
-    | TRANSFORM
-    | TRIM
-    | TRUE
+    | TRIGGERS
     | TRUNCATE
-    | TRY_CAST
     | TYPE
-    | UNARCHIVE
-    | UNBOUNDED
-    | UNCACHE
-    | UNIQUE
-    | UNKNOWN
+    | TYPES
+    | UNCOMMITTED
     | UNLOCK
-    | UNSET
-    | UPDATE
-    | USE
     | USER
-    | VALUES
+    | VALUE
+    | VARCHAR
+    | VARIABLES
     | VERBOSE
     | VERSION
     | VIEW
-    | VIEWS
+    | WARNINGS
     | WEEK
-    | WHEN
-    | WHERE
-    | WINDOW
-    | WITH
-    | WITHIN
+    | WORK
     | YEAR
-    | ZONE
-    | S3
-    | HDFS
-    | BROKER
 //--DEFAULT-NON-RESERVED-END
     ;
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 088cfbc7c4..043ec32d44 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
@@ -492,8 +492,8 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
 
     @Override
     public String visitIdentifierOrText(IdentifierOrTextContext ctx) {
-        if (ctx.STRING() != null) {
-            return ctx.STRING().getText().substring(1, 
ctx.STRING().getText().length() - 1);
+        if (ctx.STRING_LITERAL() != null) {
+            return ctx.STRING_LITERAL().getText().substring(1, 
ctx.STRING_LITERAL().getText().length() - 1);
         } else {
             return ctx.errorCapturingIdentifier().getText();
         }
@@ -861,7 +861,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
             switch (ctx.operator.getType()) {
                 case DorisParser.PLUS:
                     return e;
-                case DorisParser.MINUS:
+                case DorisParser.SUBTRACT:
                     IntegerLiteral zero = new IntegerLiteral(0);
                     return new Subtract(zero, e);
                 case DorisParser.TILDE:
@@ -907,7 +907,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
                 Operator op;
                 if (type == DorisParser.PLUS) {
                     op = Operator.ADD;
-                } else if (type == DorisParser.MINUS) {
+                } else if (type == DorisParser.SUBTRACT) {
                     op = Operator.SUBTRACT;
                 } else {
                     throw new ParseException("Only supported: " + Operator.ADD 
+ " and " + Operator.SUBTRACT, ctx);
@@ -922,11 +922,11 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
                         return new Multiply(left, right);
                     case DorisParser.SLASH:
                         return new Divide(left, right);
-                    case DorisParser.PERCENT:
+                    case DorisParser.MOD:
                         return new Mod(left, right);
                     case DorisParser.PLUS:
                         return new Add(left, right);
-                    case DorisParser.MINUS:
+                    case DorisParser.SUBTRACT:
                         return new Subtract(left, right);
                     case DorisParser.DIV:
                         return new IntegralDivide(left, right);
@@ -1272,7 +1272,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
 
     @Override
     public Expression visitTypeConstructor(TypeConstructorContext ctx) {
-        String value = ctx.STRING().getText();
+        String value = ctx.STRING_LITERAL().getText();
         value = value.substring(1, value.length() - 1);
         String type = ctx.type.getText().toUpperCase();
         switch (type) {
@@ -1342,7 +1342,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
     @Override
     public Literal visitStringLiteral(StringLiteralContext ctx) {
         // TODO: add unescapeSQLString.
-        String txt = ctx.STRING().getText();
+        String txt = ctx.STRING_LITERAL().getText();
         String s = escapeBackSlash(txt.substring(1, txt.length() - 1));
         return new VarcharLiteral(s);
     }
@@ -1998,7 +1998,7 @@ public class LogicalPlanBuilder extends 
DorisParserBaseVisitor<Object> {
 
     @Override
     public List<String> visitPrimitiveDataType(PrimitiveDataTypeContext ctx) {
-        String dataType = ctx.identifier().getText().toLowerCase(Locale.ROOT);
+        String dataType = 
ctx.primitiveColType().type.getText().toLowerCase(Locale.ROOT);
         List<String> l = Lists.newArrayList(dataType);
         ctx.INTEGER_VALUE().stream().map(ParseTree::getText).forEach(l::add);
         return l;
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java 
b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
index f608292f9b..a762193456 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/types/DataType.java
@@ -180,7 +180,11 @@ public abstract class DataType implements AbstractDataType 
{
                     case 1:
                         return VarcharType.SYSTEM_DEFAULT;
                     case 2:
-                        return 
VarcharType.createVarcharType(Integer.parseInt(types.get(1)));
+                        if (types.get(1).equals("*")) {
+                            return VarcharType.SYSTEM_DEFAULT;
+                        } else {
+                            return 
VarcharType.createVarcharType(Integer.parseInt(types.get(1)));
+                        }
                     default:
                         throw new AnalysisException("Nereids do not support 
type: " + type);
                 }
@@ -190,7 +194,11 @@ public abstract class DataType implements AbstractDataType 
{
                     case 1:
                         return CharType.SYSTEM_DEFAULT;
                     case 2:
-                        return 
CharType.createCharType(Integer.parseInt(types.get(1)));
+                        if (types.get(1).equals("*")) {
+                            return CharType.SYSTEM_DEFAULT;
+                        } else {
+                            return 
CharType.createCharType(Integer.parseInt(types.get(1)));
+                        }
                     default:
                         throw new AnalysisException("Nereids do not support 
type: " + type);
                 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to