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 cc7093e6291 Fix oracle parser create table space error (#30424)
cc7093e6291 is described below

commit cc7093e6291d01bae221aea74663c2b1f2b5b066
Author: LotusMoon <chenyang...@aliyun.com>
AuthorDate: Fri Mar 8 08:26:48 2024 +0800

    Fix oracle parser create table space error (#30424)
    
    * Fix oracle parser create user error
    
    * Modify formatting issues
    
    * Fix oracle parser create table space error
---
 .../oracle/src/main/antlr4/imports/oracle/BaseRule.g4        |  2 +-
 .../oracle/src/main/antlr4/imports/oracle/DDLStatement.g4    |  7 ++++++-
 .../test/it/sql/parser/internal/InternalSQLParserIT.java     | 12 ------------
 .../src/main/resources/sql/supported/ddl/create-function.xml |  2 +-
 .../src/main/resources/sql/supported/ddl/create-table.xml    |  6 +++---
 .../main/resources/sql/supported/ddl/create-tablespace.xml   |  4 ++--
 6 files changed, 13 insertions(+), 20 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 b3d61af91f6..6cc68ec86a0 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
@@ -947,7 +947,7 @@ dataType
     ;
 
 specialDatatype
-    : dataTypeName (LP_ NUMBER_ CHAR RP_) | NATIONAL? dataTypeName VARYING? 
LP_ (INTEGER_ | NUMBER_) RP_ | dataTypeName LP_? columnName RP_? | (SYS DOT_)? 
dataTypeName
+    : dataTypeName (LP_ NUMBER_ CHAR RP_) | NATIONAL? dataTypeName VARYING? 
LP_ (INTEGER_ | NUMBER_) RP_ | (SYS DOT_)? dataTypeName
     ;
 
 dataTypeName
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 95c8c39e894..6ccf832b716 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
@@ -639,6 +639,11 @@ columnProperties
 
 columnProperty
     : objectTypeColProperties
+    | xmlTypeColProperties
+    ;
+
+xmlTypeColProperties
+    : XMLTYPE COLUMN? columnName xmlTypeStorageClause?
     ;
 
 objectTypeColProperties
@@ -4061,7 +4066,7 @@ createTablespace
 permanentTablespaceClause
     : TABLESPACE tablespaceName (
     (MINIMUM EXTEND sizeClause)
-    | (BLOCKSIZE INTEGER_ K?)
+    | (BLOCKSIZE INTEGER_ capacityUnit?)
     | loggingClause
     | (FORCE LOGGING)
     | ENCRYPTION tablespaceEncryptionSpec
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 3376d0ce4b0..d1a7c02bf74 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
@@ -39,7 +39,6 @@ import org.junit.jupiter.params.provider.ArgumentsSource;
 
 import java.util.Arrays;
 import java.util.Collection;
-import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -50,20 +49,9 @@ public abstract class InternalSQLParserIT {
     
     private static final SQLParserTestCases SQL_PARSER_TEST_CASES = 
SQLParserTestCasesRegistry.getInstance().getCases();
     
-    // 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_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}")
     @ArgumentsSource(TestCaseArgumentsProvider.class)
     void assertSupportedSQL(final String sqlCaseId, final SQLCaseType 
sqlCaseType, final String databaseType) {
-        if (IGNORE_TEST_CASES.contains(sqlCaseId)) {
-            return;
-        }
         String sql = SQL_CASES.getSQL(sqlCaseId, sqlCaseType, 
SQL_PARSER_TEST_CASES.get(sqlCaseId).getParameters());
         SQLParserTestCase expected = SQL_PARSER_TEST_CASES.get(sqlCaseId);
         SQLStatement actual = parseSQLStatement("H2".equals(databaseType) ? 
"MySQL" : databaseType, sql);
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-function.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-function.xml
index 863b4135a6c..5f7efed8d89 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-function.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-function.xml
@@ -73,5 +73,5 @@
     <sql-case id="create_function_with_set_var" value="CREATE DEFINER = 
u1@localhost FUNCTION f2() RETURNS int BEGIN DECLARE n int; DECLARE m int; SET 
n:= (SELECT min(a) FROM t1); SET m:= (SELECT max(a) FROM t1); RETURN n &lt; m; 
END ;" db-types="MySQL" />
     <sql-case id="create_function_with_create_view" value="CREATE FUNCTION 
bug_13627_f() returns int BEGIN create view v1 as select 1; return 1; END" 
db-types="MySQL" />
     <sql-case id="create_function_with_loop" value="CREATE FUNCTION f(cur 
SYS_REFCURSOR, mgr_hiredate DATE) RETURN NUMBER IS emp_hiredate DATE; before 
number :=0; after number:=0; begin loop fetch cur into emp_hiredate; exit when 
cur%NOTFOUND; if emp_hiredate > mgr_hiredate then after:=after+1; else 
before:=before+1; end if; end loop; close cur; if before > after then return 1; 
else return 0; end if; end;" db-types="Oracle" />
-    <sql-case id="create_function_with_aggregate_using_function" value="CREATE 
OR REPLACE EDITIONABLE FUNCTION MY_FUNC (P1 VARCHAR2) RETURN VARCHAR2 AGGREGATE 
USING MY_AGG_FUNC;" db-types="Oracle" />
+    <sql-case id="create_function_with_aggregate_using_function" value="CREATE 
OR REPLACE EDITIONABLE FUNCTION MY_FUNC (P1 VARCHAR2) RETURN VARCHAR2 AGGREGATE 
USING MY_AGG_FUNC AS LANGUAGE JAVA NAME 'test';" db-types="Oracle" />
 </sql-cases>
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
index 57ada314427..13844813631 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-table.xml
@@ -92,7 +92,7 @@
     <sql-case id="create_table_with_inline_constraints_cascade" value="CREATE 
TABLE t_order_item (item_id NUMBER(10) PRIMARY KEY UNIQUE NOT NULL CHECK 
(order_id > 0), order_id NUMBER(10) CONSTRAINT fk_order_id REFERENCES t_order 
(order_id) ON DELETE CASCADE, user_id NUMBER(10), status VARCHAR2(10) NULL, 
column1 VARCHAR2(10), column2 VARCHAR2(10), column3 VARCHAR2(10))" 
db-types="Oracle,PostgreSQL,openGauss" />
     <sql-case id="create_table_with_out_of_line_foreign_key_oracle" 
value="CREATE TABLE t_order_item (item_id NUMBER(10), order_id NUMBER(10), 
user_id NUMBER(10), status VARCHAR2(10), column1 VARCHAR2(10), column2 
VARCHAR2(10), column3 VARCHAR2(10), CONSTRAINT fk_order_id FOREIGN KEY 
(order_id) REFERENCES t_order (order_id) ON DELETE CASCADE)" db-types="Oracle" 
/>
     <sql-case id="create_table_with_out_of_line_composite_foreign_key_oracle" 
value="CREATE TABLE t_order_item (item_id NUMBER(10), order_id NUMBER(10), 
user_id NUMBER(10), status VARCHAR2(10), column1 VARCHAR2(10), column2 
VARCHAR2(10), column3 VARCHAR2(10), CONSTRAINT fk_order_id FOREIGN KEY 
(order_id, user_id, status) REFERENCES t_order (order_id, user_id, status) ON 
DELETE CASCADE)" db-types="Oracle" />
-    <sql-case id="create_table_with_out_of_line_constraints_oracle" 
value="CREATE TABLE t_order_item (item_id NUMBER(10), order_id NUMBER(10), 
user_id NUMBER(10), status VARCHAR2(10), column1 VARCHAR2(10), column2 
VARCHAR2(10), column3 VARCHAR2(10), PRIMARY KEY (item_id), UNIQUE (item_id), 
FOREIGN KEY (order_id) REFERENCES t_order (order_id) ON DELETE CASCADE), CHECK 
(item_id > 0))" db-types="Oracle" />
+    <sql-case id="create_table_with_out_of_line_constraints_oracle" 
value="CREATE TABLE t_order_item (item_id NUMBER(10), order_id NUMBER(10), 
user_id NUMBER(10), status VARCHAR2(10), column1 VARCHAR2(10), column2 
VARCHAR2(10), column3 VARCHAR2(10), PRIMARY KEY (item_id), UNIQUE (item_id), 
FOREIGN KEY (order_id) REFERENCES t_order (order_id) ON DELETE CASCADE)" 
db-types="Oracle" />
     <sql-case id="create_table_with_exist_index" value="CREATE TABLE t_order 
(order_id NUMBER(10) PRIMARY KEY USING INDEX order_index, user_id NUMBER(10), 
status VARCHAR2(10), column1 VARCHAR2(10), column2 VARCHAR2(10), column3 
VARCHAR2(10))" db-types="Oracle" />
     <sql-case id="create_table_with_create_index" value="CREATE TABLE t_order 
(order_id NUMBER(10) PRIMARY KEY USING INDEX (CREATE INDEX order_index ON 
t_order (order_id)), user_id NUMBER(10), status VARCHAR2(10), column1 
VARCHAR2(10), column2 VARCHAR2(10), column3 VARCHAR2(10))" db-types="Oracle" />
     <sql-case id="create_table_with_double_quota" value="CREATE TABLE 
&quot;t_order&quot; (&quot;order_id&quot; INTEGER, &quot;user_id&quot; INTEGER, 
&quot;status&quot; VARCHAR(10), &quot;column1&quot; VARCHAR(10), 
&quot;column2&quot; VARCHAR(10), &quot;column3&quot; VARCHAR(10))" 
db-types="PostgreSQL,openGauss" />
@@ -100,8 +100,8 @@
     <sql-case id="create_table_with_range_partition" value="CREATE TABLE 
t_order (order_id INTEGER, user_id INTEGER, status VARCHAR(10), column1 
VARCHAR(10), column2 VARCHAR(10), column3 VARCHAR(10)) PARTITION BY RANGE 
(order_id)" db-types="PostgreSQL,openGauss" />
     <sql-case id="create_table_with_partition_oracle" value="CREATE TABLE 
t_order (order_id NUMBER(10), user_id NUMBER(10), status VARCHAR2(10), column1 
VARCHAR2(10), column2 VARCHAR2(10), column3 VARCHAR2(10)) PARTITION BY HASH 
(order_id) PARTITIONS 2" db-types="Oracle" />
     <sql-case id="create_table_with_xmltype_table_oracle" value="CREATE TABLE 
xwarehouses OF XMLTYPE XMLSCHEMA 
&quot;http://www.example.com/xwarehouses.xsd&quot; ELEMENT 
&quot;Warehouse&quot; ;" db-types="Oracle" />
-    <sql-case id="create_table_with_xmltype_column_oracle" value="CREATE TABLE 
xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE 
warehouse_spec STORE AS CLOB (TABLESPACE example STORAGE (INITIAL 6144) CHUNK 
4000 NOCACHE LOGGING);" db-types="Oracle" />
-    <sql-case id="create_table_with_xmltype_column_clob_oracle" value="CREATE 
TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE 
warehouse_spec STORE AS SECUREFILE CLOB (TABLESPACE auto_seg_ts STORAGE 
(INITIAL 6144) CACHE);" db-types="Oracle" />
+    <sql-case id="create_table_with_xmltype_column_oracle" value="CREATE TABLE 
xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE 
warehouse_spec STORE AS CLOB;" db-types="Oracle" />
+    <sql-case id="create_table_with_xmltype_column_clob_oracle" value="CREATE 
TABLE xwarehouses (warehouse_id NUMBER, warehouse_spec XMLTYPE) XMLTYPE 
warehouse_spec STORE AS SECUREFILE CLOB;" db-types="Oracle" />
     <!--    TODO support create table with like and inherits on 
PostgreSQL,openGauss-->
     <sql-case id="create_table_with_bracket" value="CREATE TABLE [t_order] 
([order_id] INT, [user_id] INT, [status] VARCHAR(10), [column1] VARCHAR(10), 
[column2] VARCHAR(10), [column3] VARCHAR(10))" db-types="SQLServer" />
     <sql-case id="create_table_with_identity" value="CREATE TABLE t_order 
(order_id INT IDENTITY, user_id INT, status VARCHAR(10), column1 VARCHAR(10), 
column2 VARCHAR(10), column3 VARCHAR(10))" db-types="SQLServer" />
diff --git 
a/test/it/parser/src/main/resources/sql/supported/ddl/create-tablespace.xml 
b/test/it/parser/src/main/resources/sql/supported/ddl/create-tablespace.xml
index 8de2510b688..767bfc8c70c 100644
--- a/test/it/parser/src/main/resources/sql/supported/ddl/create-tablespace.xml
+++ b/test/it/parser/src/main/resources/sql/supported/ddl/create-tablespace.xml
@@ -91,7 +91,7 @@
     <sql-case id="create_tablespace_with_flashback_off" value="CREATE 
TABLESPACE test_space FLASHBACK OFF" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary" value="CREATE TEMPORARY 
TABLESPACE test_space" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary_spec" value="CREATE 
TEMPORARY TABLESPACE test_space TEMPFILE file_specification1, 
file_specification2" db-types="Oracle" />
-    <sql-case id="create_tablespace_with_temporary_tablespace_group" 
value="CREATE TEMPORARY TABLESPACE test_space ON TABLESPACE GROUP 
tablespace_group_name" db-types="Oracle" />
+    <sql-case id="create_tablespace_with_temporary_tablespace_group" 
value="CREATE TEMPORARY TABLESPACE test_space TABLESPACE GROUP 
tablespace_group_name" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary_extent" value="CREATE 
TEMPORARY TABLESPACE test_space EXTENT MANAGEMENT LOCAL" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary_extent_autoallocate" 
value="CREATE TEMPORARY TABLESPACE test_space EXTENT MANAGEMENT LOCAL 
AUTOALLOCATE" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary_extent_uniform_size" 
value="CREATE TEMPORARY TABLESPACE test_space EXTENT MANAGEMENT LOCAL UNIFORM 
SIZE 5K" db-types="Oracle" />
@@ -102,7 +102,7 @@
     <sql-case 
id="create_tablespace_with_temporary_tempfile_spec_size_autoextend_group" 
value="CREATE TEMPORARY TABLESPACE tbs_temp_02 TEMPFILE 'temp02.dbf' SIZE 5M 
AUTOEXTEND ON TABLESPACE GROUP tbs_grp_01;" db-types="Oracle" />
     <sql-case id="create_tablespace_with_temporary_extent_uniform" 
value="CREATE TEMPORARY TABLESPACE test_space EXTENT MANAGEMENT LOCAL UNIFORM" 
db-types="Oracle" />
     <sql-case id="create_tablespace_with_undo_tablespace" value="CREATE UNDO 
TABLESPACE tablespaceName" db-types="Oracle" />
-    <sql-case id="create_tablespace_with_undo_tablespace_spec" value="CREATE 
UNDO TABLESPACE tablespaceName DATATFILE file_specification" db-types="Oracle" 
/>
+    <sql-case id="create_tablespace_with_undo_tablespace_spec" value="CREATE 
UNDO TABLESPACE tablespaceName DATAFILE file_specification" db-types="Oracle" />
     <sql-case id="create_tablespace_with_undo_tablespace_extent" value="CREATE 
UNDO TABLESPACE tablespaceName EXTENT MANAGEMENT LOCAL" db-types="Oracle" />
     <sql-case id="create_tablespace_with_undo_tablespace_extent_autoallocate" 
value="CREATE UNDO TABLESPACE tablespaceName EXTENT MANAGEMENT LOCAL 
AUTOALLOCATE" db-types="Oracle" />
     <sql-case id="create_tablespace_with_undo_tablespace_extent_uniform" 
value="CREATE UNDO TABLESPACE tablespaceName EXTENT MANAGEMENT LOCAL UNIFORM 
SIZE 5K" db-types="Oracle" />

Reply via email to