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 109351d7e6f Fix parser alter materialized view log、 create
cluster、create controlfile 、create role sql syntax (#30406)
109351d7e6f is described below
commit 109351d7e6f6212ebe4cb5e3e0e28bc8ecbf8f76
Author: yydeng626 <[email protected]>
AuthorDate: Thu Mar 7 14:53:32 2024 +0800
Fix parser alter materialized view log、 create cluster、create controlfile
、create role sql syntax (#30406)
* Fix parser alter materialized view log sql syntax
Fix parser create cluster sql syntax
Fix parser create controlfile sql syntax
Fix parser create role sql syntax
* fix code style check and spotless check error
---
.../src/main/antlr4/imports/oracle/BaseRule.g4 | 10 ++++++---
.../src/main/antlr4/imports/oracle/DCLStatement.g4 | 21 +++++++++++--------
.../src/main/antlr4/imports/oracle/DDLStatement.g4 | 24 +++++++++++-----------
.../src/main/antlr4/imports/oracle/Literals.g4 | 4 ----
.../main/antlr4/imports/oracle/OracleKeyword.g4 | 4 ++++
.../oracle/src/main/antlr4/imports/oracle/PLSQL.g4 | 13 ++++++++----
.../sql/parser/autogen/OracleStatement.g4 | 1 +
.../sql/parser/internal/InternalSQLParserIT.java | 9 +++-----
.../resources/sql/supported/ddl/create-cluster.xml | 2 +-
.../sql/supported/ddl/create-control-file.xml | 1 -
.../resources/sql/supported/ddl/create-java.xml | 5 ++++-
11 files changed, 54 insertions(+), 40 deletions(-)
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
index 64bdf9d4c59..b3d61af91f6 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/BaseRule.g4
@@ -87,7 +87,7 @@ identifier
;
unreservedWord
- : unreservedWord1 | unreservedWord2 | unreservedWord3 | capacityUnit
+ : unreservedWord1 | unreservedWord2 | unreservedWord3 | capacityUnit |
timeUnit
;
unreservedWord1
@@ -1779,7 +1779,11 @@ externalDatatype
;
capacityUnit
- : ('K' | 'M' | 'G' | 'T' | 'P' | 'E')
+ : ('K' | 'M' | 'G' | 'T' | 'P' | 'E' | 'k' | 'm' | 'g' | 't' | 'p' | 'e')
+ ;
+
+timeUnit
+ : 'M' | 'H' | 'm' | 'h'
;
attributeDimensionName
@@ -2107,7 +2111,7 @@ keyForBlob
;
sourceText
- : identifier
+ : .*? RBE_
;
fullPathName
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
index 5c3f0e03177..c29c87793e6 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DCLStatement.g4
@@ -360,7 +360,7 @@ identifiedExternallyOption
;
identifiedGloballyOption
- : GLOBALLY (AS SQ_ (name | (AZURE_ROLE | AZURE_USER | IAM_GROUP_NAME |
IAM_PRINCIPAL_NAME) EQ_ name) SQ_)
+ : GLOBALLY (AS SQ_ (name | (AZURE_ROLE | AZURE_USER | IAM_GROUP_NAME |
IAM_PRINCIPAL_NAME) EQ_ name) SQ_)?
;
noAuthOption
@@ -418,8 +418,8 @@ dropUser
alterUser
: ALTER USER ((username (IDENTIFIED (BY password (REPLACE password)?
| EXTERNALLY (AS CERTIFICATE_DN | AS KERBEROS_PRINCIPAL_NAME)?
- | NO AUTHENTICATION
| GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_
IAM_GROUP_NAME EQ_ identifier SQ_))
+ | NO AUTHENTICATION
| DEFAULT COLLATION collationName
| DEFAULT TABLESPACE tablespaceName
| LOCAL? TEMPORARY TABLESPACE tablespaceName tablespaceGroupName
@@ -435,7 +435,7 @@ alterUser
;
createRole
- : CREATE ROLE
+ : CREATE ROLE roleName ( NOT IDENTIFIED | identifiedCluase)? (CONTAINER
EQ_ (CURRENT | ALL))?
;
dropRole
@@ -443,11 +443,16 @@ dropRole
;
alterRole
- : ALTER ROLE roleName ( NOT IDENTIFIED | IDENTIFIED (
- | BY password
- | USING packageName
- | EXTERNALLY
- | GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_
IAM_GROUP_NAME EQ_ identifier SQ_) ) ) (CONTAINER EQ_ (CURRENT | ALL))?
+ : ALTER ROLE roleName ( NOT IDENTIFIED | identifiedCluase ) (CONTAINER
EQ_ (CURRENT | ALL))?
+ ;
+
+identifiedCluase
+ : IDENTIFIED (
+ | BY password
+ | USING packageName
+ | EXTERNALLY
+ | GLOBALLY AS (STRING_ | SQ_ AZURE_ROLE EQ_ identifier SQ_ | SQ_
IAM_GROUP_NAME EQ_ identifier SQ_)
+ | GLOBALLY)
;
setRole
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 f94075da8d6..95c8c39e894 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
@@ -2819,8 +2819,8 @@ createPFile
;
createControlFile
- : CREATE CONTROLFILE REUSE? SET? DATABASE databaseName
logfileForControlClause? resetLogsOrNot
- ( MAXLOGFILES INTEGER_
+ : CREATE CONTROLFILE REUSE? SET? DATABASE databaseName
(logfileForControlClause | RESETLOGS | NORESETLOGS | DATAFILE fileSpecifications
+ |( MAXLOGFILES INTEGER_
| MAXLOGMEMBERS INTEGER_
| MAXLOGHISTORY INTEGER_
| MAXDATAFILES INTEGER_
@@ -2828,17 +2828,16 @@ createControlFile
| ARCHIVELOG
| NOARCHIVELOG
| FORCE LOGGING
- | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)
- )*
+ | SET STANDBY NOLOGGING FOR (DATA AVAILABILITY | LOAD PERFORMANCE)))+
characterSetClause?
;
resetLogsOrNot
- : ( RESETLOGS | NORESETLOGS) (DATAFILE fileSpecifications)?
+ : ( RESETLOGS | NORESETLOGS)? (DATAFILE fileSpecifications)?
;
logfileForControlClause
- : LOGFILE (GROUP INTEGER_)? fileSpecification (COMMA_ (GROUP INTEGER_)?
fileSpecification)+
+ : LOGFILE (GROUP INTEGER_)? fileSpecification (COMMA_ (GROUP INTEGER_)?
fileSpecification)*
;
characterSetClause
@@ -3323,7 +3322,7 @@ diskOfflineClause
;
timeoutClause
- : DROP AFTER INTEGER_ TIME_UNIT
+ : DROP AFTER INTEGER_ timeUnit
;
checkDiskgroupClause
@@ -3555,7 +3554,7 @@ buildClause
;
createMaterializedViewLog
- : CREATE MATERIALIZED VIEW LOG ON tableName materializedViewLogAttribute?
parallelClause? ( WITH ( COMMA_? ( OBJECT ID | PRIMARY KEY | ROWID | SEQUENCE |
COMMIT SCN ) )* (LP_ ( COMMA_? identifier )+ RP_ newViewValuesClause? )?
mvLogPurgeClause? )*
+ : CREATE MATERIALIZED VIEW LOG ON tableName materializedViewLogAttribute?
parallelClause? ( WITH ( ( COMMA_? ( OBJECT ID | PRIMARY KEY | ROWID | SEQUENCE
| COMMIT SCN ) ) | (LP_ columnName ( COMMA_ columnName )* RP_ ) )* )?
newViewValuesClause? mvLogPurgeClause? createMvRefresh? ((FOR UPDATE)? (
(DISABLE | ENABLE) QUERY REWRITE )? AS selectSubquery)?
;
materializedViewLogAttribute
@@ -3716,15 +3715,16 @@ newValuesClause
;
mvLogPurgeClause
- : PURGE IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)?
+ : PURGE (IMMEDIATE (SYNCHRONOUS | ASYNCHRONOUS)?
| START WITH dateValue nextOrRepeatClause?
- | (START WITH dateValue)? nextOrRepeatClause
+ | (START WITH dateValue)? nextOrRepeatClause)
;
nextOrRepeatClause
- : NEXT dateValue | REPEAT INTERVAL intervalExpression
+ : NEXT dateValue | REPEAT intervalLiterals
;
+
forRefreshClause
: FOR ((SYNCHRONOUS REFRESH USING stagingLogName) | (FAST REFRESH))
;
@@ -4209,7 +4209,7 @@ alterType
createCluster
: CREATE CLUSTER (schemaName DOT_)? clusterName LP_ (columnName dataType
(COLLATE columnCollationName)? SORT? (COMMA_ columnName dataType (COLLATE
columnCollationName)? SORT?)*) RP_
- ( physicalAttributesClause | SIZE sizeClause | TABLESPACE tablespaceName |
INDEX | (SINGLE TABLE)? HASHKEYS INTEGER_ (HASH IS expr)?)? parallelClause?
+ ( physicalAttributesClause | SIZE sizeClause | TABLESPACE tablespaceName |
INDEX | (SINGLE TABLE)? HASHKEYS INTEGER_ (HASH IS expr)?)* parallelClause?
( NOROWDEPENDENCIES | ROWDEPENDENCIES)? (CACHE | NOCACHE)?
clusterRangePartitions?
;
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
index 6588316d5cd..47e1bc5ceb3 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/Literals.g4
@@ -19,10 +19,6 @@ lexer grammar Literals;
import Alphabet, Symbol;
-TIME_UNIT
- : M | H
- ;
-
IDENTIFIER_
:
[A-Za-z\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]+[A-Za-z_$#0-9\u0080-\u2FFF\u3001-\uFF0B\uFF0D-\uFFFF]*
;
diff --git
a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
index 494c5e7d611..ff754667263 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4
@@ -7820,6 +7820,10 @@ DELEGATE
: D E L E G A T E
;
+TIME_UNIT
+ : T I M E UL_ U N I T
+ ;
+
DEVICE
: D E V I C E
;
diff --git a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
index 315be7fc6b5..ed9b25989a6 100644
--- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
+++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/PLSQL.g4
@@ -57,18 +57,23 @@ createTrigger
;
plsqlFunctionSource
- : function (LP_ parameterDeclaration (COMMA_ parameterDeclaration)* RP_)?
RETURN dataType
+ : function (LP_ parameterDeclaration (COMMA_ parameterDeclaration)* RP_)?
returnDateType?
sharingClause? (invokerRightsClause
- | accessibleByClause
+ | accessibleByClause
| defaultCollationoOptionClause
| deterministicClause
| parallelEnableClause
| resultCacheClause
+ | aggregateClause
| pipelinedClause
| sqlMacroClause)*
- (aggregateClause | ((IS | AS) (callSpec | declareSection? body)))
+ (IS | AS) (callSpec | declareSection? body)
;
-
+
+returnDateType
+ : RETURN dataType
+ ;
+
body
: BEGIN statement+ (EXCEPTION (exceptionHandler)+)? END (identifier)? SEMI_
;
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 c27ea823d56..2052012e363 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
@@ -19,6 +19,7 @@ grammar OracleStatement;
import DMLStatement, DCLStatement, DDLStatement, TCLStatement, DALStatement,
PLSQL;
+
execute
: (select
| insert
diff --git
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
index 157c947adaf..3376d0ce4b0 100644
---
a/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
+++
b/test/it/parser/src/main/java/org/apache/shardingsphere/test/it/sql/parser/internal/InternalSQLParserIT.java
@@ -53,12 +53,9 @@ public abstract class InternalSQLParserIT {
// TODO fix these sql parser cases after add eof in OracleStatement.g4
// CHECKSTYLE:OFF
private static final Collection<String> IGNORE_TEST_CASES = new
HashSet<>(Arrays.asList(
- "create_function_call_spec_java",
"create_cluster_number_size_hashkeys", "create_cluster_set_size",
"create_cluster_size_initial_next", "create_external_role",
- "create_external_user", "create_control_file",
"create_global_role", "create_global_user", "create_java",
"create_materialized_view_log_with_including_new",
- "create_materialized_view_log_with_pctfree_storage_purge_repeat",
"create_materialized_view_log_with_row_id_sequence_including_new",
"create_materialized_view_log_with_tablespace",
- "create_no_identified_role", "create_role",
"create_role_identified_by", "create_role_with_container",
"create_role_with_identified_by_password",
- "create_table_with_out_of_line_constraints_oracle",
"create_table_with_xmltype_column_clob_oracle",
"create_table_with_xmltype_column_oracle", "create_tablespace_with_blocksize",
- "create_tablespace_with_temporary_tablespace_group",
"create_tablespace_with_temporary_tempfile_spec_extent_management",
"create_tablespace_with_undo_tablespace_spec"));
+ "create_function_with_aggregate_using_function",
"create_table_with_out_of_line_constraints_oracle",
"create_table_with_xmltype_column_clob_oracle",
+ "create_table_with_xmltype_column_oracle",
"create_tablespace_with_blocksize",
"create_tablespace_with_temporary_tablespace_group",
+
"create_tablespace_with_temporary_tempfile_spec_extent_management",
"create_tablespace_with_undo_tablespace_spec"));
// CHECKSTYLE:ON
@ParameterizedTest(name = "{0} ({1}) -> {2}")
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
index 4460d23fcc9..6686798a678 100644
--- 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
@@ -31,7 +31,7 @@
<sql-case id="create_cluster_pctfree" value="CREATE CLUSTER test_cluster
(col1 NUMBER) PCTFREE 2" db-types="Oracle" />
<sql-case id="create_cluster_pctused" value="CREATE CLUSTER test_cluster
(col1 NUMBER) PCTUSED 4" db-types="Oracle" />
<sql-case id="create_cluster_initrans" value="CREATE CLUSTER test_cluster
(col1 NUMBER) INITRANS 5" db-types="Oracle" />
- <sql-case id="create_cluster_set_size" value="CREATE CLUSTER test_cluster
(col1 NUMBER) SET 10M" db-types="Oracle" />
+ <sql-case id="create_cluster_set_size" value="CREATE CLUSTER test_cluster
(col1 NUMBER) SIZE 10M" db-types="Oracle" />
<sql-case id="create_cluster_storage_init" value="CREATE CLUSTER
test_cluster (col1 NUMBER) STORAGE (INITIAL 109G)" db-types="Oracle" />
<sql-case id="create_cluster_storage_next" value="CREATE CLUSTER
test_cluster (col1 NUMBER) STORAGE (NEXT 109G)" db-types="Oracle" />
<sql-case id="create_cluster_storage_minextents" value="CREATE CLUSTER
test_cluster (col1 NUMBER) STORAGE (MINEXTENTS 109)" db-types="Oracle" />
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
index a0734523a1a..5438a369271 100644
---
a/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
+++
b/test/it/parser/src/main/resources/sql/supported/ddl/create-control-file.xml
@@ -26,7 +26,6 @@
LOGFILE
GROUP 1
'/path/oracle/dbs/t_log1.f' SIZE 500K,
GROUP 2
'/path/oracle/dbs/t_log2.f' SIZE 500K
- # STANDBY LOGFILE
DATAFILE
'/path/oracle/dbs/t_db1.f',
'/path/oracle/dbs/dbu19i.dbf',
diff --git
a/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
b/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
index 81fda18cf7c..4981f766990 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-java.xml
@@ -17,5 +17,8 @@
-->
<sql-cases>
- <sql-case id="create_java" value="CREATE JAVA SOURCE NAMED
"Welcome" AS public class Welcome { public static String welcome() {
return "Welcome World";" db-types="Oracle" />
+ <sql-case id="create_java" value="CREATE JAVA SOURCE NAMED
"Welcome" AS
+ public class Welcome {
+ public static String welcome() {
+ return "Welcome World"; } }" db-types="Oracle" />
</sql-cases>