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 fd3bb0077d5 Fix constraint revision for overlapping actual table names 
(#39911)
fd3bb0077d5 is described below

commit fd3bb0077d5fc01eb90322c17cc9eb5315c5cf2c
Author: Liang Zhang <[email protected]>
AuthorDate: Mon Sep 21 11:04:59 2026 +0800

    Fix constraint revision for overlapping actual table names (#39911)
    
    * Mark remaining MySQL functions unsupported in SQL Federation
    
    * Fix constraint revision for overlapping actual table names
---
 .../reviser/constraint/ShardingConstraintReviser.java       |  3 +++
 .../reviser/constraint/ShardingConstraintReviserTest.java   | 13 ++++++++++++-
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviser.java
 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviser.java
index 8b3deb5c2bb..86614685f4c 100644
--- 
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviser.java
+++ 
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviser.java
@@ -38,6 +38,9 @@ public final class ShardingConstraintReviser implements 
ConstraintReviser<Shardi
     @Override
     public Optional<ConstraintMetaData> revise(final String tableName, final 
ConstraintMetaData originalMetaData, final ShardingRule rule) {
         for (DataNode each : shardingTable.getActualDataNodes()) {
+            if (!each.getTableName().equalsIgnoreCase(tableName)) {
+                continue;
+            }
             String referencedTableName = 
originalMetaData.getReferencedTableName();
             Optional<String> logicIndexName = 
getLogicIndex(originalMetaData.getName(), each.getTableName());
             if (logicIndexName.isPresent()) {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviserTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviserTest.java
index 203b8b08ffc..2e644dfcd54 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviserTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/metadata/reviser/constraint/ShardingConstraintReviserTest.java
@@ -45,10 +45,12 @@ class ShardingConstraintReviserTest {
     
     private ShardingRule shardingRule;
     
+    private ShardingTable shardingTable;
+    
     @BeforeEach
     void setUp() {
         shardingRule = createShardingRule();
-        ShardingTable shardingTable = mock(ShardingTable.class);
+        shardingTable = mock(ShardingTable.class);
         when(shardingTable.getActualDataNodes()).thenReturn(Arrays.asList(new 
DataNode("schema_name", (String) null, "table_name_0"), new 
DataNode("schema_name", (String) null, "table_name_1")));
         reviser = new ShardingConstraintReviser(shardingTable);
     }
@@ -68,6 +70,15 @@ class ShardingConstraintReviserTest {
         assertThat(actual.get().getReferencedTableName(), 
is("referenced_table_name"));
     }
     
+    @Test
+    void assertReviseWhenActualTableNameContainsAnotherActualTableNameSuffix() 
{
+        when(shardingTable.getActualDataNodes()).thenReturn(Arrays.asList(new 
DataNode("foo_schema", (String) null, "foo_order"), new DataNode("foo_schema", 
(String) null, "bar_foo_order")));
+        ConstraintMetaData originalMetaData = new 
ConstraintMetaData("foo_fk_bar_foo_order", "foo_referenced_table");
+        Optional<ConstraintMetaData> actual = reviser.revise("bar_foo_order", 
originalMetaData, shardingRule);
+        assertTrue(actual.isPresent());
+        assertThat(actual.get().getName(), is("foo_fk"));
+    }
+    
     @Test
     void assertReviseWhenConstraintNameContainsActualTableSuffix() {
         ConstraintMetaData originalMetaData = new 
ConstraintMetaData("foo_table_name_1_fk_table_name_1", "referenced_table_name");

Reply via email to