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 fdab6c596f2 Support Oracle SQL parsing V1 keywords as identifiers
(#35373)
fdab6c596f2 is described below
commit fdab6c596f2ef29a8e5a2fc5034bb397de667f0d
Author: ZhangCheng <[email protected]>
AuthorDate: Mon May 12 12:40:19 2025 +0800
Support Oracle SQL parsing V1 keywords as identifiers (#35373)
* Support Oracle SQL parsing V1 keywords as identifiers
* ParseSQLsFromFile
* ParseSQLsFromFile
---
RELEASE-NOTES.md | 1 +
.../oracle/src/main/antlr4/imports/oracle/BaseRule.g4 | 2 +-
.../oracle/src/main/antlr4/imports/oracle/DDLStatement.g4 | 2 +-
.../oracle/src/main/antlr4/imports/oracle/OracleKeyword.g4 | 4 ++++
test/it/parser/src/main/resources/case/dml/select.xml | 12 ++++++++++++
.../parser/src/main/resources/sql/supported/dml/select.xml | 1 +
6 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 7f0fa0af36b..92073487c74 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -33,6 +33,7 @@
1. SQL Parser: Enhance combineType in Oracle to support EXCEPT ALL and
INTERSECT ALL - [#35099](https://github.com/apache/shardingsphere/pull/35099)
1. DistSQL: Add InUsedStorageUnitRetriever for single rule -
[#35131](https://github.com/apache/shardingsphere/pull/35131)
1. SQL Parser: Support parsing MySQL stored procedure syntax -
[#35137](https://github.com/apache/shardingsphere/pull/35137)
+1. SQL Parser: Support Oracle SQL parsing V1 keywords as identifiers -
[#35373](https://github.com/apache/shardingsphere/pull/35373)
### Bug Fixes
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 7403ba133a1..b1b0897e907 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
@@ -89,7 +89,7 @@ identifier
unreservedWord
: SELECT | INSERT | UPDATE | DELETE | CREATE | ALTER | DROP | TRUNCATE |
SCHEMA | GRANT | REVOKE | ADD | SET | TABLE | COLUMN | INDEX | CONSTRAINT |
PRIMARY | UNIQUE | FOREIGN | KEY | POSITION | PRECISION | FUNCTION |
CONSTRUCTOR | RESULT | TRIGGER | MAP | PROCEDURE | SPECIFICATION | VIEW | INTO
| VALUES | WITH | UNION | DISTINCT | CASE | WHEN | CAST | TRIM | SUBSTRING |
FROM | NATURAL | JOIN | FULL | INNER | OUTER | LEFT | RIGHT | CROSS | USING |
WHERE | AS | ON | IF | ELSE | ELSIF [...]
| BEQUEATH | BINARY | ESCAPE | MOD | XOR | ROW | ROWS | UNKNOWN | ALWAYS |
CASCADE | CHECK | CONVERSION | GENERATED | PRIVILEGES | READ | WRITE |
REFERENCES | START | TRANSACTION | USER | ROLE | VISIBLE | INVISIBLE | EXECUTE
| USE | DEBUG | UNDER | FLASHBACK | ARCHIVE | REFRESH | QUERY | REWRITE | KEEP
| SEQUENCE | INHERIT | TRANSLATE | MERGE | AT | BITMAP | CACHE | NOCACHE |
CHECKPOINT | CONNECT | CONSTRAINTS | CYCLE | NOCYCLE | DBTIMEZONE | ENCRYPT |
DECRYPT | DEFERRABLE | DEFERRED [...]
- | SINGLE_K | SINGLE_M | SINGLE_G | SINGLE_T | SINGLE_P | SINGLE_E |
SINGLE_H
+ | SINGLE_K | SINGLE_M | SINGLE_G | SINGLE_T | SINGLE_P | SINGLE_E |
SINGLE_H | V1
;
schemaName
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 a0475f231df..109beba125d 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
@@ -332,7 +332,7 @@ blockchainRowRetentionClause
;
blockchainHashAndDataFormatClause
- : HASHING USING 'sha2_512' VERSION 'v1'
+ : HASHING USING 'sha2_512' VERSION V1
;
relationalProperty
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 f9f3d2fad5e..94aa4557bd0 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
@@ -8007,3 +8007,7 @@ APP
EXCEPTION_INIT
: E X C E P T I O N UL_ I N I T
;
+
+V1
+ : V '1'
+ ;
diff --git a/test/it/parser/src/main/resources/case/dml/select.xml
b/test/it/parser/src/main/resources/case/dml/select.xml
index 6964b56f5ea..8592625389a 100644
--- a/test/it/parser/src/main/resources/case/dml/select.xml
+++ b/test/it/parser/src/main/resources/case/dml/select.xml
@@ -10180,4 +10180,16 @@
</expr>
</where>
</select>
+
+ <select sql-case-id="select_with_oracle_v1_keyword">
+ <projections start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7">
+ <actual-projections start-index="0" stop-index="0"/>
+ </shorthand-projection>
+ </projections>
+ <from start-index="14" stop-index="20">
+ <simple-table alias="v1" name="dual" start-index="14"
stop-index="20"/>
+ </from>
+ </select>
+
</sql-parser-test-cases>
diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
index 9bbea5e8b5d..11f348ff983 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select.xml
@@ -318,4 +318,5 @@
<sql-case id="select_with_comparison_with_space" value="select * from test
where id > = 1 or name < = 2" db-types="Oracle"/>
<sql-case id="select_with_not_equal_comparison_with_space" value="select *
from test where id < > 1 and name ! = 1 and id ^ = 3 "
db-types="Oracle"/>
<sql-case id="select_match_against" value="SELECT * FROM t_order WHERE
MATCH(phone) AGAINST('15111111111')" db-types="MySQL"/>
+ <sql-case id="select_with_oracle_v1_keyword" value="SELECT * FROM dual v1"
db-types="Oracle" />
</sql-cases>