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 < 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 "t_order" ("order_id" INTEGER, "user_id" INTEGER, "status" VARCHAR(10), "column1" VARCHAR(10), "column2" VARCHAR(10), "column3" 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 "http://www.example.com/xwarehouses.xsd" ELEMENT "Warehouse" ;" 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" />