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 > = 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>