You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/02/24 13:20:50 UTC

[shardingsphere] branch master updated: Fix uppercase table constraint not rewrite exception. (#24343)

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

zhonghongsheng 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 e10806263f1 Fix uppercase table constraint not rewrite exception. (#24343)
e10806263f1 is described below

commit e10806263f1d20eb1e3b1de1cc2ccc8d257f199c
Author: Chuxin Chen <ch...@qq.com>
AuthorDate: Fri Feb 24 21:20:33 2023 +0800

    Fix uppercase table constraint not rewrite exception. (#24343)
---
 .../sharding/rewrite/token/pojo/ConstraintToken.java  |  3 ++-
 .../rewrite/token/pojo/ConstraintTokenTest.java       | 19 +++++++++++++++----
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintToken.java b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintToken.java
index 4f166b324fa..260b14511d1 100644
--- a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintToken.java
+++ b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintToken.java
@@ -58,7 +58,8 @@ public final class ConstraintToken extends SQLToken implements Substitutable, Ro
     private String getConstraintValue(final RouteUnit routeUnit) {
         StringBuilder result = new StringBuilder(identifier.getValue());
         Map<String, String> logicAndActualTables = TokenUtil.getLogicAndActualTables(routeUnit, sqlStatementContext, shardingRule);
-        sqlStatementContext.getTablesContext().getTableNames().stream().findFirst().map(logicAndActualTables::get).ifPresent(optional -> result.append("_").append(optional));
+        sqlStatementContext.getTablesContext().getTableNames().stream().findFirst().map(optional -> logicAndActualTables.get(optional.toLowerCase()))
+                .ifPresent(optional -> result.append("_").append(optional));
         return result.toString();
     }
 }
diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
index 16726bdc4fa..8bc22c98095 100644
--- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
+++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/rewrite/token/pojo/ConstraintTokenTest.java
@@ -18,20 +18,19 @@
 package org.apache.shardingsphere.sharding.rewrite.token.pojo;
 
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.route.context.RouteMapper;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.sharding.rule.ShardingRule;
 import org.apache.shardingsphere.sql.parser.sql.common.value.identifier.IdentifierValue;
 import org.junit.Test;
 
-import org.apache.shardingsphere.infra.route.context.RouteMapper;
-import org.apache.shardingsphere.infra.route.context.RouteUnit;
-
 import java.util.Collections;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.MatcherAssert.assertThat;
-
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 public final class ConstraintTokenTest {
     
@@ -40,6 +39,18 @@ public final class ConstraintTokenTest {
         assertThat(new ConstraintToken(0, 1, new IdentifierValue("uc"), mock(SQLStatementContext.class, RETURNS_DEEP_STUBS), mock(ShardingRule.class)).toString(getRouteUnit()), is("uc"));
     }
     
+    @Test
+    public void assertUpperCaseToString() {
+        SQLStatementContext<?> sqlStatementContext = mockSQLStatementContext();
+        assertThat(new ConstraintToken(0, 1, new IdentifierValue("uc"), sqlStatementContext, mock(ShardingRule.class)).toString(getRouteUnit()), is("uc_t_order_0"));
+    }
+    
+    private SQLStatementContext<?> mockSQLStatementContext() {
+        SQLStatementContext<?> result = mock(SQLStatementContext.class, RETURNS_DEEP_STUBS);
+        when(result.getTablesContext().getTableNames()).thenReturn(Collections.singletonList("T_ORDER"));
+        return result;
+    }
+    
     private RouteUnit getRouteUnit() {
         return new RouteUnit(new RouteMapper("logic_db", "logic_db"), Collections.singletonList(new RouteMapper("t_order", "t_order_0")));
     }