This is an automated email from the ASF dual-hosted git repository.

zhaojinchao 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 8006e84a660 Fix mysql assignment column value parsing (#34975)
8006e84a660 is described below

commit 8006e84a6606eb66baf05241759f7b5be6ec99c2
Author: ZhangCheng <chengzh...@apache.org>
AuthorDate: Thu Mar 13 19:00:55 2025 +0800

    Fix mysql assignment column value parsing (#34975)
    
    * Extract join where segment from update statement
    
    * Extract join where segment from update statement
    
    * Extract join where segment from update statement
---
 .../binder/context/statement/dml/UpdateStatementContext.java      | 6 +++++-
 .../sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java | 7 +------
 test/it/parser/src/main/resources/case/dml/insert.xml             | 8 ++++++--
 test/it/parser/src/main/resources/case/dml/update.xml             | 4 ++--
 4 files changed, 14 insertions(+), 11 deletions(-)

diff --git 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
index 999c576a558..915053e23c0 100644
--- 
a/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
+++ 
b/infra/binder/src/main/java/org/apache/shardingsphere/infra/binder/context/statement/dml/UpdateStatementContext.java
@@ -54,11 +54,15 @@ public final class UpdateStatementContext extends 
CommonSQLStatementContext impl
     public UpdateStatementContext(final UpdateStatement sqlStatement) {
         super(sqlStatement);
         tablesContext = new TablesContext(getAllSimpleTableSegments());
-        getSqlStatement().getWhere().ifPresent(whereSegments::add);
+        extractWhereSegments(whereSegments, sqlStatement);
         ColumnExtractor.extractColumnSegments(columnSegments, whereSegments);
         ExpressionExtractor.extractJoinConditions(joinConditions, 
whereSegments);
     }
     
+    private void extractWhereSegments(final Collection<WhereSegment> 
whereSegments, final UpdateStatement updateStatement) {
+        updateStatement.getWhere().ifPresent(whereSegments::add);
+    }
+    
     private Collection<SimpleTableSegment> getAllSimpleTableSegments() {
         TableExtractor tableExtractor = new TableExtractor();
         tableExtractor.extractTablesFromUpdate(getSqlStatement());
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
index d098d9757cc..96b723e2106 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/MySQLStatementVisitor.java
@@ -1613,12 +1613,7 @@ public abstract class MySQLStatementVisitor extends 
MySQLStatementBaseVisitor<AS
     public ASTNode visitAssignmentValue(final AssignmentValueContext ctx) {
         ExprContext expr = ctx.expr();
         if (null != expr) {
-            ASTNode result = visit(expr);
-            if (result instanceof ColumnSegment) {
-                return new 
CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getText());
-            } else {
-                return result;
-            }
+            return visit(expr);
         }
         return new CommonExpressionSegment(ctx.getStart().getStartIndex(), 
ctx.getStop().getStopIndex(), ctx.getText());
     }
diff --git a/test/it/parser/src/main/resources/case/dml/insert.xml 
b/test/it/parser/src/main/resources/case/dml/insert.xml
index 15c5b983210..40770270601 100644
--- a/test/it/parser/src/main/resources/case/dml/insert.xml
+++ b/test/it/parser/src/main/resources/case/dml/insert.xml
@@ -508,13 +508,17 @@
             <assignment start-index="65" stop-index="69">
                 <column name="b" start-index="65" stop-index="65"  />
                 <assignment-value>
-                    <common-expression literal-text="n.a" start-index="67" 
stop-index="69" />
+                    <column name="a" start-index="67" stop-index="69">
+                        <owner name="n" start-index="67" stop-index="67" />
+                    </column>
                 </assignment-value>
             </assignment>
             <assignment start-index="72" stop-index="76">
                 <column name="a" start-index="72" stop-index="72"  />
                 <assignment-value>
-                    <common-expression literal-text="n.b" start-index="74" 
stop-index="76" />
+                    <column name="b" start-index="74" stop-index="76" >
+                        <owner name="n" start-index="74" stop-index="74" />
+                    </column>
                 </assignment-value>
             </assignment>
         </on-duplicate-key-columns>
diff --git a/test/it/parser/src/main/resources/case/dml/update.xml 
b/test/it/parser/src/main/resources/case/dml/update.xml
index 890e3d01c74..1a2fe36f9fb 100644
--- a/test/it/parser/src/main/resources/case/dml/update.xml
+++ b/test/it/parser/src/main/resources/case/dml/update.xml
@@ -577,14 +577,14 @@
             <assignment start-index="19" stop-index="37" 
literal-stop-index="37">
                 <column name="order_id" start-index="19" stop-index="26" />
                 <assignment-value>
-                    <common-expression text="order_id" literal-text="order_id" 
start-index="30" stop-index="37" literal-start-index="30" 
literal-stop-index="37" />
+                    <column name="order_id" start-index="30" stop-index="37" 
literal-start-index="30" literal-stop-index="37" />
                 </assignment-value>
             </assignment>
             <assignment start-index="40" stop-index="54" 
literal-stop-index="54">
                 <column name="status" start-index="40" stop-index="45" />
                 <assignment-value>
                     <literal-expression value="init" start-index="49" 
stop-index="54" />
-                    <common-expression text="init" start-index="49" 
stop-index="54" literal-start-index="49" literal-stop-index="54" />
+                    <column name="init" start-index="49" stop-index="54" 
literal-start-index="49" literal-stop-index="54" />
                 </assignment-value>
             </assignment>
         </set>

Reply via email to