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>