This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 8dcb32d Add Oracle SQL - CREATE DATABASE (#13936)
8dcb32d is described below
commit 8dcb32dd1c26471d93528ef82dc7436385422bd2
Author: Liangda-w <[email protected]>
AuthorDate: Mon Dec 6 08:00:40 2021 +0100
Add Oracle SQL - CREATE DATABASE (#13936)
---
.../src/main/antlr4/imports/oracle/BaseRule.g4 | 12 +++
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 95 ++++++++++++++++++++--
.../main/antlr4/imports/oracle/OracleKeyword.g4 | 72 ++++++++++++++++
.../sql/parser/autogen/OracleStatement.g4 | 1 +
.../impl/OracleDDLStatementSQLVisitor.java | 7 ++
.../oracle/ddl/OracleCreateDatabaseStatement.java | 29 +++++++
.../main/resources/case/ddl/create-database.xml | 2 +
.../sql/supported/ddl/create-database.xml | 56 +++++++++++++
8 files changed, 268 insertions(+), 6 deletions(-)
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 9c276d4..674d1a2 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -1188,3 +1188,15 @@ inCondition
isOfTypeCondition
: expr IS NOT? OF TYPE? LP_ ONLY? typeName (COMMA_ ONLY? typeName)* RP_
;
+
+databaseCharset
+ : AL32UTF8
+ ;
+
+nationalCharset
+ : AL16UTF16 | UTF8
+ ;
+
+filenamePattern
+ : STRING_
+ ;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
index c0b2e1f..19dd2ba 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/DDLStatement.g4
@@ -529,7 +529,7 @@ storageClause
;
sizeClause
- : NUMBER_ ('K' | 'M' | 'G' | 'T' | 'P' | 'E')?
+ : (NUMBER_ | INTEGER_) ('K' | 'M' | 'G' | 'T' | 'P' | 'E')?
;
maxsizeClause
@@ -994,7 +994,7 @@ modifyListPartition
partitionExtendedName
: PARTITION partitionName
- | PARTITION FOR LR_ partitionKeyValue (COMMA_ partitionKeyValue)* RP_
+ | PARTITION FOR LP_ partitionKeyValue (COMMA_ partitionKeyValue)* RP_
;
addRangeSubpartition
@@ -1320,7 +1320,11 @@ databaseFileClauses
createDatafileClause
: CREATE DATAFILE (fileName | fileNumber) (COMMA_ (fileName | fileNumber))*
- ( AS (fileSpecification (COMMA_ fileSpecification)* | NEW))?
+ ( AS (fileSpecifications | NEW))?
+ ;
+
+fileSpecifications
+ : fileSpecification (COMMA_ fileSpecification)*
;
fileSpecification
@@ -1429,7 +1433,7 @@ maximizeStandbyDbClause
;
registerLogfileClause
- : REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL)? LOGFILE fileSpecification
(COMMA_ fileSpecification)* (FOR logminerSessionName)?
+ : REGISTER (OR REPLACE)? (PHYSICAL | LOGICAL)? LOGFILE fileSpecifications
(FOR logminerSessionName)?
;
commitSwitchoverClause
@@ -1462,7 +1466,7 @@ failoverClause
defaultSettingsClauses
: DEFAULT EDITION EQ_ editionName
- | SET DEFAULT (BIGFILE | SMALLFILE) TABLESPACE
+ | SET DEFAULT bigOrSmallFiles TABLESPACE
| DEFAULT TABLESPACE tablespaceName
| DEFAULT LOCAL? TEMPORARY TABLESPACE (tablespaceName |
tablespaceGroupName)
| RENAME GLOBAL_NAME TO databaseName DOT_ domain (DOT_ domain)*
@@ -1476,7 +1480,7 @@ defaultSettingsClauses
;
setTimeZoneClause
- : SET TIME_ZONE EQ_ SQ_ ( (PLUS_ | MINUS_) dateValue | timeZoneRegion )
SQ_
+ : SET TIME_ZONE EQ_ ((PLUS_ | MINUS_) dateValue | timeZoneRegion)
;
timeZoneRegion
@@ -1926,3 +1930,82 @@ purge
rename
: RENAME name TO name
;
+
+createDatabase
+ : CREATE DATABASE databaseName? createDatabaseClauses+
+ ;
+
+createDatabaseClauses
+ : USER SYS IDENTIFIED BY password
+ | USER SYSTEM IDENTIFIED BY password
+ | CONTROLFILE REUSE
+ | MAXDATAFILES INTEGER_
+ | MAXINSTANCES INTEGER_
+ | CHARACTER SET databaseCharset
+ | NATIONAL CHARACTER SET nationalCharset
+ | SET DEFAULT bigOrSmallFiles TABLESPACE
+ | databaseLoggingClauses
+ | tablespaceClauses
+ | setTimeZoneClause
+ | bigOrSmallFiles? USER_DATA TABLESPACE tablespaceName DATAFILE
datafileTempfileSpec (COMMA_ datafileTempfileSpec)*
+ | enablePluggableDatabase
+ | databaseName USING MIRROR COPY mirrorName
+ ;
+
+databaseLoggingClauses
+ : LOGFILE (GROUP INTEGER_)? fileSpecification (COMMA_ (GROUP INTEGER_)?
fileSpecification)*
+ | MAXLOGFILES INTEGER_
+ | MAXLOGMEMBERS INTEGER_
+ | MAXLOGHISTORY INTEGER_
+ | (ARCHIVELOG | NOARCHIVELOG)
+ | FORCE LOGGING
+ | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)
+ ;
+
+tablespaceClauses
+ : EXTENT MANAGEMENT LOCAL
+ | DATAFILE fileSpecifications
+ | SYSAUX DATAFILE fileSpecifications
+ | defaultTablespace
+ | defaultTempTablespace
+ | undoTablespace
+ ;
+
+defaultTablespace
+ : DEFAULT TABLESPACE tablespaceName (DATAFILE datafileTempfileSpec)?
extentManagementClause?
+ ;
+
+defaultTempTablespace
+ : bigOrSmallFiles? DEFAULT
+ (TEMPORARY TABLESPACE | LOCAL TEMPORARY TABLESPACE FOR (ALL | LEAF))
tablespaceName
+ (TEMPFILE fileSpecifications)? extentManagementClause?
+ ;
+
+undoTablespace
+ : bigOrSmallFiles? UNDO TABLESPACE tablespaceName (DATAFILE
fileSpecifications)?
+ ;
+
+bigOrSmallFiles
+ : BIGFILE | SMALLFILE
+ ;
+
+extentManagementClause
+ : EXTENT MANAGEMENT LOCAL (AUTOALLOCATE | UNIFORM (SIZE sizeClause)?)?
+ ;
+
+enablePluggableDatabase
+ : ENABLE PLUGGABLE DATABASE
+ (SEED fileNameConvert? (SYSTEM tablespaceDatafileClauses)? (SYSAUX
tablespaceDatafileClauses)?)? undoModeClause?
+ ;
+
+fileNameConvert
+ : FILE_NAME_CONVERT EQ_ (LP_ replaceFileNamePattern (COMMA_
replaceFileNamePattern)* RP_| NONE)
+ ;
+
+replaceFileNamePattern
+ : filenamePattern COMMA_ filenamePattern
+ ;
+
+tablespaceDatafileClauses
+ : DATAFILES (SIZE sizeClause | autoextendClause)+
+ ;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
index 46349d5..ef4ce59 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
@@ -2542,3 +2542,75 @@ LIKE_REGEX
EQ_REGEX
: E Q UL_ R E G E X
;
+
+SYS
+ : S Y S
+ ;
+
+MAXDATAFILES
+ : M A X D A T A F I L E S
+ ;
+
+MAXINSTANCES
+ : M A X I N S T A N C E S
+ ;
+
+AL32UTF8
+ : A L '3' '2' U T F '8'
+ ;
+
+AL16UTF16
+ : A L '1' '6' U T F '1' '6'
+ ;
+
+UTF8
+ : U T F '8'
+ ;
+
+USER_DATA
+ : U S E R UL_ D A T A
+ ;
+
+MAXLOGFILES
+ : M A X L O G F I L E S
+ ;
+
+MAXLOGMEMBERS
+ : M A X L O G M E M B E R S
+ ;
+
+MAXLOGHISTORY
+ : M A X L O G H I S T O R Y
+ ;
+
+EXTENT
+ : E X T E N T
+ ;
+
+SYSAUX
+ : S Y S A U X
+ ;
+
+LEAF
+ : L E A F
+ ;
+
+AUTOALLOCATE
+ : A U T O A L L O C A T E
+ ;
+
+UNIFORM
+ : U N I F O R M
+ ;
+
+FILE_NAME_CONVERT
+ : F I L E UL_ N A M E UL_ C O N V E R T
+ ;
+
+ALLOCATE
+ : A L L O C A T E
+ ;
+
+DEALLOCATE
+ : D E A L L O C A T E
+ ;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
index 43f05e8..5a1c9c4 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/antlr4/org/apache/shardingsphere/sql/parser/autogen/OracleStatement.g4
@@ -61,5 +61,6 @@ execute
| flashbackTable
| purge
| rename
+ | createDatabase
) SEMI_?
;
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
index 725e926..c5ff74a 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/impl/OracleDDLStatementSQLVisitor.java
@@ -38,6 +38,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.CreateDatabaseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateDefinitionClauseContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateIndexContext;
import
org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser.CreateTableContext;
@@ -96,6 +97,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.OracleCreateDatabaseStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateIndexStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleCreateTableStatement;
import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl.OracleDisassociateStatisticsStatement;
@@ -545,4 +547,9 @@ public final class OracleDDLStatementSQLVisitor extends
OracleStatementSQLVisito
public ASTNode visitRename(final RenameContext ctx) {
return new OracleRenameStatement();
}
+
+ @Override
+ public ASTNode visitCreateDatabase(final CreateDatabaseContext ctx) {
+ return new OracleCreateDatabaseStatement();
+ }
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateDatabaseStatement.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateDatabaseStatement.java
new file mode 100644
index 0000000..cb65162
--- /dev/null
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/oracle/ddl/OracleCreateDatabaseStatement.java
@@ -0,0 +1,29 @@
+/*
+ * 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.
+ */
+
+package org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.ddl;
+
+import lombok.ToString;
+import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateDatabaseStatement;
+import
org.apache.shardingsphere.sql.parser.sql.dialect.statement.oracle.OracleStatement;
+
+/**
+ * Oracle create database statement.
+ */
+@ToString
+public final class OracleCreateDatabaseStatement extends
CreateDatabaseStatement implements OracleStatement {
+}
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-database.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-database.xml
index eb0bbc5..e7adbc3 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-database.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/ddl/create-database.xml
@@ -23,4 +23,6 @@
<create-database sql-case-id="create_database_with_location_and_encoding"
/>
<create-database sql-case-id="create_database_with_location" />
<create-database sql-case-id="create_database_with_file" />
+ <create-database sql-case-id="create_database_oracle1" />
+ <create-database sql-case-id="create_database_oracle2" />
</sql-parser-test-cases>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-database.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-database.xml
index 1cba206..d87f675 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-database.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/sql/supported/ddl/create-database.xml
@@ -34,4 +34,60 @@
LOG ON ( NAME = Sales_log,
FILENAME = 'C:\Program Files\Microsoft SQL
Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\salelog.ldf',
SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB ) ;"
db-types="SQLServer" />
+ <sql-case id="create_database_oracle1" value="CREATE DATABASE sample
+ CONTROLFILE REUSE
+ LOGFILE
+ GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K,
+ GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K
+ MAXLOGFILES 5
+ MAXLOGHISTORY 100
+ MAXDATAFILES 10
+ MAXINSTANCES 2
+ ARCHIVELOG
+ CHARACTER SET AL32UTF8
+ NATIONAL CHARACTER SET AL16UTF16
+ DATAFILE
+ 'disk1:df1.dbf' AUTOEXTEND ON,
+ 'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
+ DEFAULT TEMPORARY TABLESPACE temp_ts
+ UNDO TABLESPACE undo_ts
+ SET TIME_ZONE = '+02:00'" db-types="Oracle" />
+ <sql-case id="create_database_oracle2" value="CREATE DATABASE newcdb
+ USER SYS IDENTIFIED BY sys_password
+ USER SYSTEM IDENTIFIED BY system_password
+ LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log')
+ SIZE 100M BLOCKSIZE 512,
+ GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log')
+ SIZE 100M BLOCKSIZE 512,
+ GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log')
+ SIZE 100M BLOCKSIZE 512
+ MAXLOGHISTORY 1
+ MAXLOGFILES 16
+ MAXLOGMEMBERS 3
+ MAXDATAFILES 1024
+ CHARACTER SET AL32UTF8
+ NATIONAL CHARACTER SET AL16UTF16
+ EXTENT MANAGEMENT LOCAL
+ DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf'
+ SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
+ SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf'
+ SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
+ DEFAULT TABLESPACE deftbs
+ DATAFILE '/u01/app/oracle/oradata/newcdb/deftbs01.dbf'
+ SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
+ DEFAULT TEMPORARY TABLESPACE tempts1
+ TEMPFILE '/u01/app/oracle/oradata/newcdb/temp01.dbf'
+ SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
+ UNDO TABLESPACE undotbs1
+ DATAFILE '/u01/app/oracle/oradata/newcdb/undotbs01.dbf'
+ SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
+ ENABLE PLUGGABLE DATABASE
+ SEED
+ FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/newcdb/',
+ '/u01/app/oracle/oradata/pdbseed/')
+ SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
+ SYSAUX DATAFILES SIZE 100M
+ USER_DATA TABLESPACE usertbs
+ DATAFILE '/u01/app/oracle/oradata/pdbseed/usertbs01.dbf'
+ SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED" db-types="Oracle" />
</sql-cases>