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 <chengzh...@apache.org>
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 &gt; = 1 or name &lt;   = 2" db-types="Oracle"/>
     <sql-case id="select_with_not_equal_comparison_with_space" value="select * 
from test where id &lt;  &gt; 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>

Reply via email to