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 <[email protected]>
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" />