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 c709a751ed6 Fix oracle join SQL (#29517)
c709a751ed6 is described below
commit c709a751ed653666e3dfd3aef6f56c9e5962fdfb
Author: LotusMoon <[email protected]>
AuthorDate: Sat Dec 23 20:31:00 2023 +0800
Fix oracle join SQL (#29517)
* Fix Oracle join parse error
* add join test case
---
.../src/main/antlr4/imports/oracle/BaseRule.g4 | 5 ++--
.../src/main/resources/case/dml/select-join.xml | 30 ++++++++++++++++++++++
.../resources/sql/supported/dml/select-join.xml | 1 +
3 files changed, 33 insertions(+), 3 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 8472d58648d..47812f51801 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
@@ -87,8 +87,7 @@ unreservedWord
unreservedWord1
: TRUNCATE | FUNCTION | PROCEDURE | CASE | WHEN | CAST | TRIM | SUBSTRING
- | NATURAL | JOIN | FULL | INNER | OUTER | LEFT | RIGHT
- | CROSS | USING | IF | TRUE | FALSE | LIMIT | OFFSET
+ | USING | IF | TRUE | FALSE | LIMIT | OFFSET
| COMMIT | ROLLBACK | SAVEPOINT
| ARRAY | INTERVAL | TIME | TIMESTAMP | LOCALTIME | LOCALTIMESTAMP | YEAR
| QUARTER | MONTH | WEEK | DAY | HOUR | MINUTE | SECOND
@@ -118,7 +117,7 @@ unreservedWord1
| COLLATION | REAL | TYPE | FIRST | RANK | SAMPLE | SYSTIMESTAMP | MINUTE
| ANY
| LENGTH | SINGLE_C | TIME_UNIT | TARGET | PUBLIC | ID | STATE | PRIORITY
| PRIMARY | FOREIGN | KEY | POSITION | PRECISION | FUNCTION | PROCEDURE |
SPECIFICATION | CASE
- | WHEN | CAST | TRIM | SUBSTRING | FULL | INNER | OUTER | LEFT | RIGHT |
CROSS
+ | WHEN | CAST | TRIM | SUBSTRING | FULL | JOIN
| USING | FALSE | SAVEPOINT | BODY | CHARACTER | ARRAY | TIME | TIMEOUT |
TIMESTAMP | LOCALTIME
| DAY | ENABLE | DISABLE | CALL | INSTANCE | CLOSE | NEXT | NAME | NUMERIC
| TRIGGERS | GLOBAL_NAME | BINARY | MOD | XOR | UNKNOWN | ALWAYS | CASCADE
| GENERATED | PRIVILEGES
diff --git a/test/it/parser/src/main/resources/case/dml/select-join.xml
b/test/it/parser/src/main/resources/case/dml/select-join.xml
index 48b37292b05..846172e9c9f 100644
--- a/test/it/parser/src/main/resources/case/dml/select-join.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-join.xml
@@ -643,4 +643,34 @@
</expr>
</where>
</select>
+ <select sql-case-id="select_join-without_alias01">
+ <projections start-index="7" stop-index="7">
+ <shorthand-projection start-index="7" stop-index="7" />
+ </projections>
+ <from>
+ <join-table join-type="LEFT">
+ <left>
+ <simple-table name="t1" start-index="14" stop-index="15"/>
+ </left>
+ <right>
+ <simple-table name="t2" start-index="27" stop-index="28"/>
+ </right>
+ <on-condition>
+ <binary-operation-expression start-index="33"
stop-index="45">
+ <left>
+ <column name="id" start-index="33" stop-index="37">
+ <owner name="t1" start-index="33"
stop-index="34"/>
+ </column>
+ </left>
+ <operator>=</operator>
+ <right>
+ <column name="id" start-index="41" stop-index="45">
+ <owner name="t2" start-index="41"
stop-index="42"/>
+ </column>
+ </right>
+ </binary-operation-expression>
+ </on-condition>
+ </join-table>
+ </from>
+ </select>
</sql-parser-test-cases>
diff --git
a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
index fd2dcd40b41..2bd80796d3d 100644
--- a/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
+++ b/test/it/parser/src/main/resources/sql/supported/dml/select-join.xml
@@ -32,4 +32,5 @@
<sql-case id="select_natural_full_join" value="SELECT * FROM t_order o
NATURAL FULL JOIN t_order_item i WHERE o.order_id = ?"
db-types="PostgreSQL,openGauss,Oracle" />
<sql-case id="select_with_join_operator" value="SELECT * FROM t_order o ,
t_order_item i WHERE o.order_id(+) = i.order_id" db-types="Oracle" />
<sql-case id="select_join_with_quote" value="SELECT "u".*,
"o".* FROM t_user "u" INNER JOIN t_order "o" ON
"u".user_id = "o".user_id WHERE "u".user_id = ?"
db-types="Oracle" />
+ <sql-case id="select_join-without_alias01" value="select * from t1 left
join t2 on t1.id = t2.id" db-types="Oracle"/>
</sql-cases>