This is an automated email from the ASF dual-hosted git repository.
morrysnow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new 9ffb060ac78 [opt](Nereids) support create statement syntax in Nereids
(#39427)
9ffb060ac78 is described below
commit 9ffb060ac78550566f98a055ff363fe41dd81f3d
Author: morrySnow <[email protected]>
AuthorDate: Fri Aug 16 18:56:29 2024 +0800
[opt](Nereids) support create statement syntax in Nereids (#39427)
---
.../antlr4/org/apache/doris/nereids/DorisLexer.g4 | 5 +
.../antlr4/org/apache/doris/nereids/DorisParser.g4 | 122 ++++++++++++++++++++-
.../apache/doris/analysis/CreateCatalogStmt.java | 2 +-
.../doris/analysis/CreateDataSyncJobStmt.java | 2 +-
.../org/apache/doris/analysis/CreateDbStmt.java | 2 +-
.../doris/analysis/CreateEncryptKeyStmt.java | 2 +-
.../org/apache/doris/analysis/CreateFileStmt.java | 2 +-
.../apache/doris/analysis/CreateFunctionStmt.java | 2 +-
.../doris/analysis/CreateMaterializedViewStmt.java | 2 +-
.../apache/doris/analysis/CreatePolicyStmt.java | 2 +-
.../doris/analysis/CreateRepositoryStmt.java | 2 +-
.../apache/doris/analysis/CreateResourceStmt.java | 2 +-
.../doris/analysis/CreateSqlBlockRuleStmt.java | 2 +-
.../org/apache/doris/analysis/CreateStageStmt.java | 2 +-
.../doris/analysis/CreateStorageVaultStmt.java | 2 +-
.../org/apache/doris/analysis/CreateUserStmt.java | 2 +-
.../doris/analysis/CreateWorkloadGroupStmt.java | 2 +-
.../analysis/CreateWorkloadSchedPolicyStmt.java | 2 +-
.../java/org/apache/doris/analysis/EmptyStmt.java | 2 +-
.../doris/nereids/parser/LogicalPlanBuilder.java | 14 ++-
.../java/org/apache/doris/qe/ConnectProcessor.java | 1 +
.../doris/nereids/parser/NereidsParserTest.java | 54 +++++++++
22 files changed, 204 insertions(+), 26 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 03c41c43d25..f21c8b94614 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
@@ -93,6 +93,7 @@ LEFT_PAREN: '(';
RIGHT_PAREN: ')';
COMMA: ',';
DOT: '.';
+DOTDOTDOT: '...';
LEFT_BRACKET: '[';
RIGHT_BRACKET: ']';
LEFT_BRACE: '{';
@@ -106,6 +107,7 @@ RIGHT_BRACE: '}';
//--DORIS-KEYWORD-LIST-START
ACCOUNT_LOCK: 'ACCOUNT_LOCK';
ACCOUNT_UNLOCK: 'ACCOUNT_UNLOCK';
+ACTIONS: 'ACTIONS';
ADD: 'ADD';
ADDDATE:'ADDDATE';
ADMIN: 'ADMIN';
@@ -180,6 +182,7 @@ COMMITTED: 'COMMITTED';
COMPACT: 'COMPACT';
COMPLETE: 'COMPLETE';
COMPRESS_TYPE: 'COMPRESS_TYPE';
+CONDITIONS: 'CONDITIONS';
CONFIG: 'CONFIG';
CONNECTION: 'CONNECTION';
CONNECTION_ID: 'CONNECTION_ID';
@@ -500,6 +503,7 @@ SERIALIZABLE: 'SERIALIZABLE';
SESSION: 'SESSION';
SET: 'SET';
SETS: 'SETS';
+SET_SESSION_VARIABLE: 'SET_SESSION_VARIABLE';
SHAPE: 'SHAPE';
SHOW: 'SHOW';
SIGNED: 'SIGNED';
@@ -510,6 +514,7 @@ SONAME: 'SONAME';
SPLIT: 'SPLIT';
SQL: 'SQL';
SQL_BLOCK_RULE: 'SQL_BLOCK_RULE';
+STAGE: 'STAGE';
STAGES: 'STAGES';
START: 'START';
STARTS: 'STARTS';
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 53745e23cc6..2dd10b990ef 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
@@ -26,11 +26,11 @@ options { tokenVocab = DorisLexer; }
}
multiStatements
- : SEMICOLON* statement (SEMICOLON+ statement)* SEMICOLON* EOF
+ : SEMICOLON* statement? (SEMICOLON+ statement)* SEMICOLON* EOF
;
singleStatement
- : SEMICOLON* statement SEMICOLON* EOF
+ : SEMICOLON* statement? SEMICOLON* EOF
;
statement
@@ -60,6 +60,7 @@ unsupportedStatement
| unsupportedDmlStatement
| unsupportedKillStatement
| unsupportedDescribeStatement
+ | unsupportedCreateStatement
;
materailizedViewStatement
@@ -162,6 +163,109 @@ supportedDropStatement
: DROP CATALOG RECYCLE BIN WHERE idType=STRING_LITERAL EQ id=INTEGER_VALUE
#dropCatalogRecycleBin
;
+unsupportedCreateStatement
+ : CREATE (DATABASE | SCHEMA) (IF NOT EXISTS)? name=multipartIdentifier
+ properties=propertyClause?
#createDatabase
+ | CREATE CATALOG (IF NOT EXISTS)? catalogName=identifier
+ (WITH RESOURCE resourceName=identifier)?
+ (COMMENT STRING_LITERAL)? properties=propertyClause?
#createCatalog
+ | CREATE (GLOBAL | SESSION | LOCAL)?
+ (TABLES | AGGREGATE)? FUNCTION (IF NOT EXISTS)?
+ functionIdentifier LEFT_PAREN functionArguments? RIGHT_PAREN
+ RETURNS returnType=dataType (INTERMEDIATE intermediateType=dataType)?
+ properties=propertyClause?
#createUserDefineFunction
+ | CREATE (GLOBAL | SESSION | LOCAL)? ALIAS FUNCTION (IF NOT EXISTS)?
+ functionIdentifier LEFT_PAREN functionArguments? RIGHT_PAREN
+ WITH PARAMETER LEFT_PAREN parameters=identifierSeq? RIGHT_PAREN
+ AS expression
#createAliasFunction
+ | CREATE USER (IF NOT EXISTS)? grantUserIdentify
+ (SUPERUSER | DEFAULT ROLE role=STRING_LITERAL)?
+ passwordOption (COMMENT STRING_LITERAL)?
#createUser
+ | CREATE (READ ONLY)? REPOSITORY name=identifier WITH storageBackend
#createRepository
+ | CREATE ROLE (IF NOT EXISTS)? name=identifier (COMMENT STRING_LITERAL)?
#createRole
+ | CREATE FILE name=STRING_LITERAL
+ ((FROM | IN) database=identifier)? properties=propertyClause
#createFile
+ | CREATE INDEX (IF NOT EXISTS)? name=identifier
+ ON tableName=multipartIdentifier identifierList
+ (USING (BITMAP | NGRAM_BF | INVERTED))?
+ properties=propertyClause? (COMMENT STRING_LITERAL)?
#createIndex
+ | CREATE EXTERNAL? RESOURCE (IF NOT EXISTS)?
+ name=identifierOrText properties=propertyClause?
#createResource
+ | CREATE STORAGE VAULT (IF NOT EXISTS)?
+ name=identifierOrText properties=propertyClause?
#createStorageVault
+ | CREATE WORKLOAD GROUP (IF NOT EXISTS)?
+ name=identifierOrText properties=propertyClause?
#createWorkloadGroup
+ | CREATE WORKLOAD POLICY (IF NOT EXISTS)? name=identifierOrText
+ (CONDITIONS LEFT_PAREN workloadPolicyConditions RIGHT_PAREN)?
+ (ACTIONS LEFT_PAREN workloadPolicyActions RIGHT_PAREN)?
+ properties=propertyClause?
#createWorkloadPolicy
+ | CREATE ENCRYPTKEY (IF NOT EXISTS)? multipartIdentifier AS STRING_LITERAL
#createEncryptkey
+ | CREATE SYNC dbName=identifier DOT jobName=identifierOrText
+ LEFT_PAREN channelDescriptions RIGHT_PAREN
+ FROM BINLOG LEFT_PAREN propertyItemList RIGHT_PAREN
+ properties=propertyClause?
#createDataSyncJob
+ | CREATE SQL_BLOCK_RULE (IF NOT EXISTS)?
+ name=identifier properties=propertyClause?
#createSqlBlockRule
+ | CREATE STORAGE POLICY (IF NOT EXISTS)?
+ name=identifier properties=propertyClause?
#createStoragePolicy
+ | BUILD INDEX name=identifier ON tableName=multipartIdentifier
+ partitionSpec?
#buildIndex
+ | CREATE STAGE (IF NOT EXISTS)? name=identifier properties=propertyClause?
#createStage
+ ;
+
+channelDescriptions
+ : channelDescription (COMMA channelDescription)*
+ ;
+
+channelDescription
+ : FROM source=multipartIdentifier INTO destination=multipartIdentifier
+ partitionSpec? columnList=identifierList?
+ ;
+
+workloadPolicyActions
+ : workloadPolicyAction (COMMA workloadPolicyAction)*
+ ;
+
+workloadPolicyAction
+ : SET_SESSION_VARIABLE STRING_LITERAL
+ | identifier (STRING_LITERAL)?
+ ;
+
+workloadPolicyConditions
+ : workloadPolicyCondition (COMMA workloadPolicyCondition)*
+ ;
+
+workloadPolicyCondition
+ : metricName=identifier comparisonOperator (number | STRING_LITERAL)
+ ;
+
+storageBackend
+ : (BROKER | S3 | HDFS | LOCAL) brokerName=identifier?
+ ON LOCATION STRING_LITERAL properties=propertyClause?
+ ;
+
+passwordOption
+ : (PASSWORD_HISTORY (historyDefault=DEFAULT | historyValue=INTEGER_VALUE))?
+ (PASSWORD_EXPIRE (expireDefault=DEFAULT | expireNever=NEVER
+ | INTERVAL expireValue=INTEGER_VALUE expireTimeUnit=(DAY | HOUR |
SECOND)))?
+ (PASSWORD_REUSE INTERVAL (reuseDefault=DEFAULT |
reuseValue=INTEGER_VALUE DAY))?
+ (FAILED_LOGIN_ATTEMPTS attemptsValue=INTEGER_VALUE)?
+ (PASSWORD_LOCK_TIME (lockUnbounded=UNBOUNDED
+ | lockValue=INTEGER_VALUE lockTimeUint=(DAY | HOUR | SECOND)))?
+ (ACCOUNT_LOCK | ACCOUNT_UNLOCK)?
+ ;
+
+functionArguments
+ : functionArgument (COMMA functionArgument)*
+ ;
+
+functionArgument
+ : DOTDOTDOT
+ | dataType
+ ;
+
+
+
unsupportedSetStatement
: SET (optionWithType | optionWithoutType)
(COMMA (optionWithType | optionWithoutType))*
#setOptions
@@ -322,6 +426,10 @@ userIdentify
: user=identifierOrText (ATSIGN (host=identifierOrText | LEFT_PAREN
host=identifierOrText RIGHT_PAREN))?
;
+grantUserIdentify
+ : userIdentify (IDENTIFIED BY PASSWORD? STRING_LITERAL)?
+ ;
+
explain
: explainCommand planType?
level=(VERBOSE | TREE | GRAPH | PLAN)?
@@ -1007,8 +1115,8 @@ dataType
(COMMA INTEGER_VALUE)* RIGHT_PAREN)?
#primitiveDataType
;
-primitiveColType:
- | type=TINYINT
+primitiveColType
+ : type=TINYINT
| type=SMALLINT
| type=(INT | INTEGER)
| type=BIGINT
@@ -1107,7 +1215,8 @@ number
// TODO: need to stay consistent with the legacy
nonReserved
//--DEFAULT-NON-RESERVED-START
- : ADDDATE
+ : ACTIONS
+ | ADDDATE
| AFTER
| AGG_STATE
| AGGREGATE
@@ -1158,6 +1267,7 @@ nonReserved
| COMPACT
| COMPLETE
| COMPRESS_TYPE
+ | CONDITIONS
| CONFIG
| CONNECTION
| CONNECTION_ID
@@ -1365,6 +1475,7 @@ nonReserved
| SCHEMA
| SECOND
| SERIALIZABLE
+ | SET_SESSION_VARIABLE
| SEQUENCE
| SESSION
| SHAPE
@@ -1373,6 +1484,7 @@ nonReserved
| SONAME
| SPLIT
| SQL
+ | STAGE
| STAGES
| START
| STARTS
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateCatalogStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateCatalogStmt.java
index 59a59522acf..f4c0360f9c3 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateCatalogStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateCatalogStmt.java
@@ -40,7 +40,7 @@ import java.util.Map;
/**
* Statement for create a new catalog.
*/
-public class CreateCatalogStmt extends DdlStmt {
+public class CreateCatalogStmt extends DdlStmt implements NotFallbackInParser {
public static final String CREATE_TIME_PROP = "create_time";
private final boolean ifNotExists;
private final String catalogName;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDataSyncJobStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDataSyncJobStmt.java
index dd7103b463d..157dd7277b9 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDataSyncJobStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDataSyncJobStmt.java
@@ -49,7 +49,7 @@ import java.util.Map;
// binlog_desc:
// FROM BINLOG
// (key1=value1, ...)
-public class CreateDataSyncJobStmt extends DdlStmt {
+public class CreateDataSyncJobStmt extends DdlStmt implements
NotFallbackInParser {
private String jobName;
private String dbName;
private DataSyncJobType dataSyncJobType;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDbStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDbStmt.java
index ad17ccd23ba..917784d25ca 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDbStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateDbStmt.java
@@ -32,7 +32,7 @@ import org.apache.commons.lang3.StringUtils;
import java.util.HashMap;
import java.util.Map;
-public class CreateDbStmt extends DdlStmt {
+public class CreateDbStmt extends DdlStmt implements NotFallbackInParser {
private boolean ifNotExists;
private String ctlName;
private String dbName;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateEncryptKeyStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateEncryptKeyStmt.java
index a7380865a44..0d10c7c8858 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateEncryptKeyStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateEncryptKeyStmt.java
@@ -40,7 +40,7 @@ import com.google.common.base.Strings;
* for example:
* CREATE ENCRYPTKEY test.key1 AS "beijing";
*/
-public class CreateEncryptKeyStmt extends DdlStmt {
+public class CreateEncryptKeyStmt extends DdlStmt implements
NotFallbackInParser {
private final boolean ifNotExists;
private final EncryptKeyName encryptKeyName;
private final String keyString;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFileStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFileStmt.java
index 11d2bf846e1..8ce3b021899 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFileStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFileStmt.java
@@ -32,7 +32,7 @@ import com.google.common.collect.ImmutableSet;
import java.util.Map;
import java.util.Optional;
-public class CreateFileStmt extends DdlStmt {
+public class CreateFileStmt extends DdlStmt implements NotFallbackInParser {
public static final String PROP_CATALOG_DEFAULT = "DEFAULT";
private static final String PROP_CATALOG = "catalog";
private static final String PROP_URL = "url";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
index a45b7901fec..4a38d06ffe2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateFunctionStmt.java
@@ -72,7 +72,7 @@ import java.util.Set;
import java.util.stream.Collectors;
// create a user define function
-public class CreateFunctionStmt extends DdlStmt {
+public class CreateFunctionStmt extends DdlStmt implements NotFallbackInParser
{
@Deprecated
public static final String OBJECT_FILE_KEY = "object_file";
public static final String FILE_KEY = "file";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index 3a6a9718c72..0e768ad3a95 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -67,7 +67,7 @@ import java.util.Set;
* ORDER BY column_name[, column_name ...])
* [PROPERTIES ("key" = "value")]
*/
-public class CreateMaterializedViewStmt extends DdlStmt {
+public class CreateMaterializedViewStmt extends DdlStmt implements
NotFallbackInParser {
private static final Logger LOG =
LogManager.getLogger(CreateMaterializedViewStmt.class);
public static final String MATERIALIZED_VIEW_NAME_PREFIX = "mv_";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
index 98c71d10c16..9905fd03ee1 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreatePolicyStmt.java
@@ -37,7 +37,7 @@ import java.util.Map;
* syntax:
* CREATE ROW POLICY [IF NOT EXISTS] test_row_policy ON test_table AS
{PERMISSIVE|RESTRICTIVE} TO user USING (a = ’xxx‘)
*/
-public class CreatePolicyStmt extends DdlStmt {
+public class CreatePolicyStmt extends DdlStmt implements NotFallbackInParser {
@Getter
private final PolicyTypeEnum type;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateRepositoryStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateRepositoryStmt.java
index 618b5a7d05b..1e8ebb22bd0 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateRepositoryStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateRepositoryStmt.java
@@ -27,7 +27,7 @@ import org.apache.doris.qe.ConnectContext;
import java.util.Map;
-public class CreateRepositoryStmt extends DdlStmt {
+public class CreateRepositoryStmt extends DdlStmt implements
NotFallbackInParser {
private boolean isReadOnly;
private String name;
private StorageBackend storage;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateResourceStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateResourceStmt.java
index 08730723431..210c034300e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateResourceStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateResourceStmt.java
@@ -33,7 +33,7 @@ import java.util.Map;
// CREATE [EXTERNAL] RESOURCE resource_name
// PROPERTIES (key1 = value1, ...)
-public class CreateResourceStmt extends DdlStmt {
+public class CreateResourceStmt extends DdlStmt implements NotFallbackInParser
{
private static final String TYPE = "type";
private final boolean isExternal;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateSqlBlockRuleStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateSqlBlockRuleStmt.java
index f50a339991c..7e1813ef32b 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateSqlBlockRuleStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateSqlBlockRuleStmt.java
@@ -49,7 +49,7 @@ import java.util.regex.Pattern;
)
*/
@Getter
-public class CreateSqlBlockRuleStmt extends DdlStmt {
+public class CreateSqlBlockRuleStmt extends DdlStmt implements
NotFallbackInParser {
public static final String SQL_PROPERTY = "sql";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStageStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStageStmt.java
index 4054584805a..432ebae8bf2 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStageStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStageStmt.java
@@ -50,7 +50,7 @@ import java.util.UUID;
/**
* Create stage.
*/
-public class CreateStageStmt extends DdlStmt {
+public class CreateStageStmt extends DdlStmt implements NotFallbackInParser {
private static final Logger LOG =
LogManager.getLogger(CreateStageStmt.class);
@Getter
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java
index e7e7863bde6..f1aff6b9ab6 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateStorageVaultStmt.java
@@ -35,7 +35,7 @@ import java.util.Map;
// CREATE STORAGE VAULT vault_name
// PROPERTIES (key1 = value1, ...)
-public class CreateStorageVaultStmt extends DdlStmt {
+public class CreateStorageVaultStmt extends DdlStmt implements
NotFallbackInParser {
private static final String TYPE = "type";
private static final String PATH_VERSION = "path_version";
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateUserStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateUserStmt.java
index e29a82f2e5f..74ca252779e 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateUserStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateUserStmt.java
@@ -51,7 +51,7 @@ import java.util.UUID;
* 3. create user user@xx [identified by 'password'] role role_name
* not only create the specified user, but also grant all privs of the
specified role to the user.
*/
-public class CreateUserStmt extends DdlStmt {
+public class CreateUserStmt extends DdlStmt implements NotFallbackInParser {
private static final Logger LOG =
LogManager.getLogger(CreateUserStmt.class);
private boolean ifNotExist;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadGroupStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadGroupStmt.java
index 9c8efcf1d1f..fc4f99046d5 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadGroupStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadGroupStmt.java
@@ -30,7 +30,7 @@ import org.apache.doris.resource.workloadgroup.WorkloadGroup;
import java.util.Map;
-public class CreateWorkloadGroupStmt extends DdlStmt {
+public class CreateWorkloadGroupStmt extends DdlStmt implements
NotFallbackInParser {
private final boolean ifNotExists;
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadSchedPolicyStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadSchedPolicyStmt.java
index 455ca2c802e..3cb0cd1f1de 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadSchedPolicyStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateWorkloadSchedPolicyStmt.java
@@ -31,7 +31,7 @@ import
org.apache.doris.resource.workloadschedpolicy.WorkloadConditionMeta;
import java.util.List;
import java.util.Map;
-public class CreateWorkloadSchedPolicyStmt extends DdlStmt {
+public class CreateWorkloadSchedPolicyStmt extends DdlStmt implements
NotFallbackInParser {
private final boolean ifNotExists;
private final String policyName;
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/EmptyStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/EmptyStmt.java
index e3707036091..2180dc9c134 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/EmptyStmt.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/EmptyStmt.java
@@ -18,7 +18,7 @@
package org.apache.doris.analysis;
// Used to represent query which only contain comments
-public class EmptyStmt extends UnsupportedStmt {
+public class EmptyStmt extends UnsupportedStmt implements NotFallbackInParser {
@Override
public RedirectStatus getRedirectStatus() {
return RedirectStatus.NO_FORWARD;
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 2170b552a5c..d1890a0333b 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
@@ -631,9 +631,15 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
}
@Override
- public CreateMTMVCommand visitCreateMTMV(CreateMTMVContext ctx) {
- List<String> nameParts = visitMultipartIdentifier(ctx.mvName);
+ public Command visitCreateMTMV(CreateMTMVContext ctx) {
+ if (ctx.buildMode() == null && ctx.refreshMethod() == null &&
ctx.refreshTrigger() == null
+ && ctx.cols == null && ctx.keys == null
+ && ctx.HASH() == null && ctx.RANDOM() == null && ctx.BUCKETS()
== null) {
+ // TODO support create sync mv
+ return new UnsupportedCommand();
+ }
+ List<String> nameParts = visitMultipartIdentifier(ctx.mvName);
BuildMode buildMode = visitBuildMode(ctx.buildMode());
RefreshMethod refreshMethod = visitRefreshMethod(ctx.refreshMethod());
MTMVRefreshTriggerInfo refreshTriggerInfo =
visitRefreshTrigger(ctx.refreshTrigger());
@@ -644,11 +650,11 @@ public class LogicalPlanBuilder extends
DorisParserBaseVisitor<Object> {
if (ctx.INTEGER_VALUE() != null) {
bucketNum = Integer.parseInt(ctx.INTEGER_VALUE().getText());
}
- DistributionDescriptor desc = null;
+ DistributionDescriptor desc;
if (ctx.HASH() != null) {
desc = new DistributionDescriptor(true, ctx.AUTO() != null,
bucketNum,
visitIdentifierList(ctx.hashKeys));
- } else if (ctx.RANDOM() != null) {
+ } else {
desc = new DistributionDescriptor(false, ctx.AUTO() != null,
bucketNum, null);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
index 6bcc02f35e0..dac1b5785b8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java
@@ -326,6 +326,7 @@ public abstract class ConnectProcessor {
if (mysqlCommand == MysqlCommand.COM_QUERY
&& ctx.getSessionVariable().isEnableNereidsPlanner()
&& !ctx.getSessionVariable().enableFallbackToOriginalPlanner
+ && !stmts.isEmpty()
&& stmts.stream().allMatch(s -> s instanceof
NotFallbackInParser)) {
String errMsg;
Throwable exception = null;
diff --git
a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
index 4b4d30d4cd7..b7f9dcae9db 100644
---
a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
+++
b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java
@@ -591,4 +591,58 @@ public class NereidsParserTest extends ParserTestBase {
sql = "describe function tvf('a' = 'b') as tvf";
nereidsParser.parseSingle(sql);
}
+
+ @Test
+ public void testCreateDatabase() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create database if not exists a properties('k'='v')";
+ nereidsParser.parseSingle(sql);
+
+ sql = "create schema ctl.db";
+ nereidsParser.parseSingle(sql);
+ }
+
+ @Test
+ public void testCreateCatalog() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create catalog if not exists ctl";
+ nereidsParser.parseSingle(sql);
+
+ sql = "create catalog ctl with resource rsc comment ''
properties('k'='v')";
+ nereidsParser.parseSingle(sql);
+ }
+
+ @Test
+ public void testCreateFunction() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create session tables function func_a (int, ...) returns
boolean properties('k'='v')";
+ nereidsParser.parseSingle(sql);
+
+ sql = "create local aggregate function func_a (int, ...) returns
boolean intermediate varchar properties('k'='v')";
+ nereidsParser.parseSingle(sql);
+
+ sql = "create alias function func_a (int) with parameter(id) as
abs(id)";
+ nereidsParser.parseSingle(sql);
+ }
+
+ @Test
+ public void testCreateUser() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create user a superuser comment 'create user'";
+ nereidsParser.parseSingle(sql);
+ }
+
+ @Test
+ public void testCreateRepository() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create repository a with S3 on location 's3://xxx'
properties('k'='v')";
+ nereidsParser.parseSingle(sql);
+ }
+
+ @Test
+ public void testCreateRole() {
+ NereidsParser nereidsParser = new NereidsParser();
+ String sql = "create role a comment 'create user'";
+ nereidsParser.parseSingle(sql);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]