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 <[email protected]>
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")));
     }

Reply via email to