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")));
}