This is an automated email from the ASF dual-hosted git repository. chengzhang 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 139cc23fdd2 Support table alias in insert statement in Oracle. (#36202) 139cc23fdd2 is described below commit 139cc23fdd2fc44b466c053b1225c8fe3e5f173e Author: Cong Hu <iamhuc...@gmail.com> AuthorDate: Thu Aug 7 17:25:15 2025 +0800 Support table alias in insert statement in Oracle. (#36202) * Support table alias in insert statement in Oracle. * Add release note. --- RELEASE-NOTES.md | 1 + .../oracle/src/main/antlr4/imports/oracle/DMLStatement.g4 | 2 ++ .../visitor/statement/type/OracleDMLStatementVisitor.java | 11 ++++++++--- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 11529ba508d..a6e7745cb4d 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -125,6 +125,7 @@ 1. Encrypt: Use EncryptDerivedColumnSuffix to enhance encrypt table subquery rewrite logic - [#34829](https://github.com/apache/shardingsphere/pull/34829) 1. Encrypt: Add quotes to encrypt rewrite derived columns - [#34950](https://github.com/apache/shardingsphere/pull/34950) 1. Encrypt: Add support for NOT LIKE operator in encryption - [#35984](https://github.com/apache/shardingsphere/pull/35984) +1. SQL Parser: Support table alias in insert statement in Oracle - [#36202](https://github.com/apache/shardingsphere/pull/36202) ### Bug Fixes 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 e89dc48668c..957031fbbc2 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 @@ -66,7 +66,9 @@ dmlTableExprClause dmlTableClause : tableName (partitionExtClause | AT_ dbLink)? + | tableName (partitionExtClause | AT_ dbLink)? AS? alias | (viewName | materializedViewName) (AT_ dbLink)? + | (viewName | materializedViewName) (AT_ dbLink)? AS? alias ; partitionExtClause 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 6759cabe64f..58440e9e05c 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 @@ -503,17 +503,22 @@ public final class OracleDMLStatementVisitor extends OracleStatementVisitor impl @Override public ASTNode visitDmlTableClause(final DmlTableClauseContext ctx) { + SimpleTableSegment result; if (null != ctx.AT_() && null != ctx.dbLink()) { - SimpleTableSegment result = new SimpleTableSegment(new TableNameSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new IdentifierValue(ctx.tableName().name().getText()))); + result = new SimpleTableSegment(new TableNameSegment(ctx.start.getStartIndex(), ctx.stop.getStopIndex(), new IdentifierValue(ctx.tableName().name().getText()))); if (null != ctx.tableName().owner()) { result.setOwner( new OwnerSegment(ctx.tableName().owner().start.getStartIndex(), ctx.tableName().owner().stop.getStopIndex(), (IdentifierValue) visit(ctx.tableName().owner().identifier()))); } result.setAt(new IdentifierValue(ctx.AT_().getText())); result.setDbLink(new IdentifierValue(ctx.dbLink().identifier(0).getText())); - return result; + } else { + result = (SimpleTableSegment) visit(ctx.tableName()); } - return visit(ctx.tableName()); + if (null != ctx.alias()) { + result.setAlias((AliasSegment) visit(ctx.alias())); + } + return result; } @Override