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

chengzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new d8cff0a5fea feat: support create cluster in Oracle. (#27558)
d8cff0a5fea is described below

commit d8cff0a5feac20c9cfb9daf525875a262bb5735a
Author: boyjoy1127 <[email protected]>
AuthorDate: Wed Aug 2 13:10:35 2023 +0800

    feat: support create cluster in Oracle. (#27558)
---
 .../src/main/antlr4/imports/oracle/DDLStatement.g4 |  5 +++++
 .../sql/parser/autogen/OracleStatement.g4          |  1 +
 .../statement/type/OracleDDLStatementVisitor.java  |  7 +++++++
 .../core/database/visitor/SQLVisitorRule.java      |  2 ++
 .../statement/ddl/CreateClusterStatement.java}     | 11 ++++------
 ...ment.java => OracleCreateClusterStatement.java} |  6 +++---
 .../ddl/OracleCreateTablespaceStatement.java       |  4 ++--
 .../cases/parser/jaxb/RootSQLParserTestCases.java  |  4 ++++
 .../ddl/CreateClusterStatementTestCase.java        | 11 ++++------
 .../src/main/resources/case/ddl/create-cluster.xml | 24 ++++++++++++++++++++++
 .../resources/sql/supported/ddl/create-cluster.xml | 24 ++++++++++++++++++++++
 11 files changed, 80 insertions(+), 19 deletions(-)

diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index 93a1b72225f..6dd43adba5b 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -3685,3 +3685,8 @@ replaceTypeClause
 alterType
     : ALTER TYPE typeName (compileTypeClause | replaceTypeClause)?
     ;
+
+createCluster
+    : CREATE CLUSTER (schemaName DOT_)? clusterName
+    LP_ (columnName dataType SORT? (COMMA_ columnName dataType SORT?)*) RP_
+    ;
diff --git 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
index 3461d30cd0d..4f86a13c915 100644
--- 
a/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++ 
b/parser/sql/dialect/oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
@@ -145,5 +145,6 @@ execute
     | dropCluster
     | systemAction
     | alterType
+    | createCluster
     ) SEMI_?
     ;
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
index 0cff1970570..ca861172e02 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDDLStatementVisitor.java
@@ -64,6 +64,7 @@ import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.Column
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ColumnOrVirtualDefinitionContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CommentContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.ConstraintClausesContext;
+import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateClusterContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateContextContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateControlFileContext;
 import 
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateDatabaseContext;
@@ -205,6 +206,7 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.Ora
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAssociateStatisticsStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleAuditStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCommentStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateClusterStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateContextStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateControlFileStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateDatabaseLinkStatement;
@@ -1111,6 +1113,11 @@ public final class OracleDDLStatementVisitor extends 
OracleStatementVisitor impl
         return new OracleCreateTablespaceStatement();
     }
     
+    @Override
+    public ASTNode visitCreateCluster(final CreateClusterContext ctx) {
+        return new OracleCreateClusterStatement();
+    }
+    
     @Override
     public ASTNode visitSystemAction(final SystemActionContext ctx) {
         return new OracleSystemActionStatement();
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
index a682ef3ae8f..45c6ac07e53 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorRule.java
@@ -521,6 +521,8 @@ public enum SQLVisitorRule {
     
     CREATE_CAST("CreateCast", SQLStatementType.DDL),
     
+    CREATE_CLUSTER("CreateCluster", SQLStatementType.DDL),
+    
     CREATE_TYPE("CreateType", SQLStatementType.DDL),
     
     DROP_CONVERSION("DropConversion", SQLStatementType.DDL),
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateClusterStatement.java
similarity index 69%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateClusterStatement.java
index 6d86482fc31..195e03d80ee 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/statement/ddl/CreateClusterStatement.java
@@ -15,15 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+package org.apache.shardingsphere.sql.parser.sql.common.statement.ddl;
 
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.AbstractSQLStatement;
 
 /**
- * Oracle create tablespace statement.
+ * Create cluster statement.
  */
-@Setter
-public final class OracleCreateTablespaceStatement extends 
CreateProcedureStatement implements OracleStatement {
+public abstract class CreateClusterStatement extends AbstractSQLStatement 
implements DDLStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateClusterStatement.java
similarity index 85%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
copy to 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateClusterStatement.java
index 6d86482fc31..b0599d7d6bf 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateClusterStatement.java
@@ -18,12 +18,12 @@
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
 
 import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateClusterStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
 
 /**
- * Oracle create tablespace statement.
+ * Oracle create cluster statement.
  */
 @Setter
-public final class OracleCreateTablespaceStatement extends 
CreateProcedureStatement implements OracleStatement {
+public final class OracleCreateClusterStatement extends CreateClusterStatement 
implements OracleStatement {
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
index 6d86482fc31..9cfbd0731ab 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
@@ -18,12 +18,12 @@
 package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
 
 import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
+import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateTablespaceStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
 
 /**
  * Oracle create tablespace statement.
  */
 @Setter
-public final class OracleCreateTablespaceStatement extends 
CreateProcedureStatement implements OracleStatement {
+public final class OracleCreateTablespaceStatement extends 
CreateTablespaceStatement implements OracleStatement {
 }
diff --git 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
index d1b1a4136da..952b13d2f02 100644
--- 
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/RootSQLParserTestCases.java
@@ -159,6 +159,7 @@ import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.s
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateAccessMethodStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateAggregateStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateCastStatementTestCase;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateClusterStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateCollationStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateContextStatementTestCase;
 import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl.CreateControlFileStatementTestCase;
@@ -463,6 +464,9 @@ public final class RootSQLParserTestCases {
     @XmlElement(name = "insert")
     private final List<InsertStatementTestCase> insertTestCases = new 
LinkedList<>();
     
+    @XmlElement(name = "create-cluster")
+    private final List<CreateClusterStatementTestCase> createClusterTestCases 
= new LinkedList<>();
+    
     @XmlElement(name = "drop-tablespace")
     private final List<DropTableSpaceStatementTestCase> 
dropTableSpaceTestCases = new LinkedList<>();
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateClusterStatementTestCase.java
similarity index 64%
copy from 
parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
copy to 
test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateClusterStatementTestCase.java
index 6d86482fc31..9fe88962117 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateTablespaceStatement.java
+++ 
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/cases/parser/jaxb/statement/ddl/CreateClusterStatementTestCase.java
@@ -15,15 +15,12 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+package 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.statement.ddl;
 
-import lombok.Setter;
-import 
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateProcedureStatement;
-import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+import 
org.apache.shardingsphere.test.it.sql.parser.internal.cases.parser.jaxb.SQLParserTestCase;
 
 /**
- * Oracle create tablespace statement.
+ * Create cluster statement test case.
  */
-@Setter
-public final class OracleCreateTablespaceStatement extends 
CreateProcedureStatement implements OracleStatement {
+public final class CreateClusterStatementTestCase extends SQLParserTestCase {
 }
diff --git a/test/it/parser/src/main/resources/case/ddl/create-cluster.xml 
b/test/it/parser/src/main/resources/case/ddl/create-cluster.xml
new file mode 100644
index 00000000000..e5d7362a4fd
--- /dev/null
+++ b/test/it/parser/src/main/resources/case/ddl/create-cluster.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<sql-parser-test-cases>
+    <create-cluster sql-case-id="create_cluster_default" />
+    <create-cluster sql-case-id="create_cluster_schema" />
+    <create-cluster sql-case-id="create_cluster_schema_multi_col" />
+    <create-cluster sql-case-id="create_cluster_schema_multi_col_sort" />
+</sql-parser-test-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml
new file mode 100644
index 00000000000..5be8126cb2f
--- /dev/null
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-cluster.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one or more
+  ~ contributor license agreements.  See the NOTICE file distributed with
+  ~ this work for additional information regarding copyright ownership.
+  ~ The ASF licenses this file to You under the Apache License, Version 2.0
+  ~ (the "License"); you may not use this file except in compliance with
+  ~ the License.  You may obtain a copy of the License at
+  ~
+  ~     http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing, software
+  ~ distributed under the License is distributed on an "AS IS" BASIS,
+  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  ~ See the License for the specific language governing permissions and
+  ~ limitations under the License.
+  -->
+
+<sql-cases>
+    <sql-case id="create_cluster_default" value="CREATE CLUSTER test_cluster 
(col1 NUMBER)" db-types="Oracle" />
+    <sql-case id="create_cluster_schema" value="CREATE CLUSTER 
test_schema.test_cluster (col1 NUMBER)" db-types="Oracle" />
+    <sql-case id="create_cluster_schema_multi_col" value="CREATE CLUSTER 
test_schema.test_cluster (col1 NUMBER, col2 BOOL)" db-types="Oracle" />
+    <sql-case id="create_cluster_schema_multi_col_sort" value="CREATE CLUSTER 
test_schema.test_cluster (col1 NUMBER SORT, col2 BOOL)" db-types="Oracle" />
+</sql-cases>

Reply via email to