diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 9fc8eca107e0d..4ece5ab737d43 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -138,6 +138,7 @@ 1. SQL Parser: Fix set OnDuplicateKeyColumnsSegment on PostgreSQLInsertStatement - [#34425](https://github.com/apache/shardingsphere/pull/34425) 1. SQL Parser: Fix mysql sql parser error when sql contains implicit concat expression - [#34660](https://github.com/apache/shardingsphere/pull/34660) 1. SQL Parser: Refactor pivot and unpivot clause handling to support multiple column names - [35586](https://github.com/apache/shardingsphere/pull/35586) +1. SQL Parser: Fix oralce sql parser error when sql contains subquery with alias - [#35239](https://github.com/apache/shardingsphere/pull/35239) 1. SQL Binder: Fix is unable to find the outer table in the NotExpressionBinder - [36135](https://github.com/apache/shardingsphere/pull/36135) 1. Transaction: Fix conflicting dependencies of BASE transaction integration module - [#35142](https://github.com/apache/shardingsphere/pull/35142) 1. SQL Federation: Fix Operation not allowed after ResultSet closed exception when use sql federation - [#35206](https://github.com/apache/shardingsphere/pull/35206) diff --git a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 index 63ec4f804fb5a..1ab24495bcc36 100644 --- a/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 +++ b/parser/sql/dialect/oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 @@ -470,7 +470,7 @@ intervalExprClause queryTableExpr : queryTableExprSampleClause | queryName - | lateralClause + | lateralClause (AS? alias)? | tableCollectionExpr ; diff --git a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java index e708c4a53d5d3..3a0253e4c38f1 100644 --- a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java +++ b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/visitor/statement/type/OracleDMLStatementVisitor.java @@ -1172,6 +1172,9 @@ public ASTNode visitQueryTableExpr(final QueryTableExprContext ctx) { SubquerySegment subquerySegment = new SubquerySegment(ctx.lateralClause().selectSubquery().start.getStartIndex(), ctx.lateralClause().selectSubquery().stop.getStopIndex(), subquery, getOriginalText(ctx.lateralClause().selectSubquery())); result = new SubqueryTableSegment(ctx.lateralClause().LP_().getSymbol().getStartIndex(), ctx.lateralClause().RP_().getSymbol().getStopIndex(), subquerySegment); + if (null != ctx.alias()) { + result.setAlias((AliasSegment) visit(ctx.alias())); + } } else { if (null != ctx.tableCollectionExpr().collectionExpr().selectSubquery()) { SubquerySegment subquerySegment = (SubquerySegment) visit(ctx.tableCollectionExpr()); diff --git a/test/it/parser/src/main/resources/case/dml/select-sub-query.xml b/test/it/parser/src/main/resources/case/dml/select-sub-query.xml index f850df09d240b..00a6df6bd8961 100644 --- a/test/it/parser/src/main/resources/case/dml/select-sub-query.xml +++ b/test/it/parser/src/main/resources/case/dml/select-sub-query.xml @@ -903,4 +903,52 @@ + + + + + + + + + + + + + + + + + + + diff --git a/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml b/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml index 9c5ce2ede08be..23d1c6d36259f 100644 --- a/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml +++ b/test/it/parser/src/main/resources/sql/supported/dml/select-sub-query.xml @@ -37,4 +37,5 @@ +