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

Reply via email to