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

terrymanu 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 1199b3c9bcc Use configured sharding column name when checking UPDATE 
assignments (#39864)
1199b3c9bcc is described below

commit 1199b3c9bcc93eec14391e51ae0b3d7971c73025
Author: Eunbin Son <[email protected]>
AuthorDate: Tue Sep 22 23:15:44 2026 +0900

    Use configured sharding column name when checking UPDATE assignments 
(#39864)
    
    Co-authored-by: Liang Zhang <[email protected]>
---
 RELEASE-NOTES.md                                   |  1 +
 .../util/ShardingRouteContextCheckUtils.java       |  9 ++++----
 .../dml/ShardingUpdateRouteContextCheckerTest.java | 25 ++++++++++++++--------
 3 files changed, 22 insertions(+), 13 deletions(-)

diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index fc22e16bf0b..87e401424b5 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -86,6 +86,7 @@
 1. Sharding: Compute the Snowflake key generator epoch in UTC instead of the 
JVM default timezone - 
[#38932](https://github.com/apache/shardingsphere/pull/38932)
 1. Sharding: Fix order-dependent data source intersection in Cartesian routing 
- [#39407](https://github.com/apache/shardingsphere/pull/39407)
 1. Sharding: Fix incorrect AVG(DISTINCT) merge result across shards - 
[#39429](https://github.com/apache/shardingsphere/pull/39429)
+1. Sharding: Use configured sharding column name when checking UPDATE 
assignments - [#39864](https://github.com/apache/shardingsphere/pull/39864)
 1. Sharding: Fix INTERVAL sharding on one-sided range outside datetime bounds 
- [#39862](https://github.com/apache/shardingsphere/pull/39862)
 1. Sharding: Fix GROUP_CONCAT merge result when all values are NULL - 
[#39860](https://github.com/apache/shardingsphere/pull/39860)
 1. Sharding: Fix swapped start and stop offset in sharding value offset error 
message - [#39858](https://github.com/apache/shardingsphere/pull/39858)
diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
index eb4af5c7459..7469df2f3e1 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/checker/util/ShardingRouteContextCheckUtils.java
@@ -105,11 +105,12 @@ public final class ShardingRouteContextCheckUtils {
         Collection<ShardingConditionValue> values = new LinkedList<>();
         String tableName = 
sqlStatementContext.getTablesContext().getTableNames().iterator().next();
         for (ColumnAssignmentSegment each : assignments) {
-            String shardingColumn = 
each.getColumns().get(0).getIdentifier().getValue();
-            if (shardingRule.findShardingColumn(shardingColumn, 
tableName).isPresent()) {
-                Optional<Object> assignmentValue = 
getShardingColumnAssignmentValue(each, params);
-                assignmentValue.ifPresent(optional -> values.add(new 
ListShardingConditionValue(shardingColumn, tableName, 
Collections.singletonList(optional))));
+            Optional<String> shardingColumn = 
shardingRule.findShardingColumn(each.getColumns().get(0).getIdentifier().getValue(),
 tableName);
+            if (!shardingColumn.isPresent()) {
+                continue;
             }
+            Optional<Object> assignmentValue = 
getShardingColumnAssignmentValue(each, params);
+            assignmentValue.ifPresent(optional -> values.add(new 
ListShardingConditionValue(shardingColumn.get(), tableName, 
Collections.singletonList(optional))));
         }
         if (values.isEmpty()) {
             return Optional.empty();
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
index ad032789351..518fa37fe8a 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/checker/dml/ShardingUpdateRouteContextCheckerTest.java
@@ -74,31 +74,38 @@ class ShardingUpdateRouteContextCheckerTest {
     
     @Test
     void assertCheckWhenNotUpdateShardingColumn() {
-        UpdateStatementContext sqlStatementContext = new 
UpdateStatementContext(createUpdateStatement());
+        UpdateStatementContext sqlStatementContext = new 
UpdateStatementContext(createUpdateStatement("id"));
         
when(queryContext.getSqlStatementContext()).thenReturn(sqlStatementContext);
         assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), mock(RouteContext.class)));
     }
     
     @Test
     void assertCheckWhenUpdateShardingColumnWithSameRouteContext() {
-        mockShardingRuleForUpdateShardingColumn();
-        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement()));
+        mockShardingRuleForUpdateShardingColumn("id");
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement("id")));
+        assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
+    }
+    
+    @Test
+    void 
assertCheckWhenUpdateShardingColumnWithDifferentCaseFromConfiguration() {
+        mockShardingRuleForUpdateShardingColumn("ID");
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement("ID")));
         assertDoesNotThrow(() -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createSingleRouteContext()));
     }
     
     @Test
     void assertCheckWhenUpdateShardingColumnWithDifferentRouteContext() {
-        mockShardingRuleForUpdateShardingColumn();
-        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement()));
+        mockShardingRuleForUpdateShardingColumn("id");
+        when(queryContext.getSqlStatementContext()).thenReturn(new 
UpdateStatementContext(createUpdateStatement("id")));
         assertThrows(UnsupportedUpdatingShardingValueException.class,
                 () -> new 
ShardingUpdateRouteContextChecker().check(shardingRule, queryContext, database, 
mock(ConfigurationProperties.class), createFullRouteContext()));
     }
     
-    private void mockShardingRuleForUpdateShardingColumn() {
+    private void mockShardingRuleForUpdateShardingColumn(final String 
assignmentColumnName) {
         ShardingTable shardingTable = mock(ShardingTable.class);
         
when(shardingTable.getActualDataSourceNames()).thenReturn(Arrays.asList("ds_0", 
"ds_1"));
         
when(shardingTable.getActualTableNames("ds_1")).thenReturn(Collections.singleton("user"));
-        when(shardingRule.findShardingColumn("id", 
"user")).thenReturn(Optional.of("id"));
+        when(shardingRule.findShardingColumn(assignmentColumnName, 
"user")).thenReturn(Optional.of("id"));
         when(shardingRule.getShardingTable("user")).thenReturn(shardingTable);
         StandardShardingStrategyConfiguration databaseStrategyConfig = 
mock(StandardShardingStrategyConfiguration.class);
         when(databaseStrategyConfig.getShardingColumn()).thenReturn("id");
@@ -124,9 +131,9 @@ class ShardingUpdateRouteContextCheckerTest {
         return result;
     }
     
-    private UpdateStatement createUpdateStatement() {
+    private UpdateStatement createUpdateStatement(final String 
assignmentColumnName) {
         List<ColumnSegment> columns = new LinkedList<>();
-        columns.add(new ColumnSegment(0, 0, new IdentifierValue("id")));
+        columns.add(new ColumnSegment(0, 0, new 
IdentifierValue(assignmentColumnName)));
         ColumnAssignmentSegment assignment = new ColumnAssignmentSegment(0, 0, 
columns, new LiteralExpressionSegment(0, 0, 1));
         return UpdateStatement.builder()
                 .databaseType(databaseType)

Reply via email to