This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 945379aae7a Fix wrong sharding condition merge when sharding column in
case-sensitive (#37389)
945379aae7a is described below
commit 945379aae7aea48e4d9f6af48a212f9d32c3b8e7
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Mon Dec 15 18:43:26 2025 +0800
Fix wrong sharding condition merge when sharding column in case-sensitive
(#37389)
---
RELEASE-NOTES.md | 1 +
.../checker/ShardingRouteCacheableChecker.java | 22 ++++++++---------
.../InsertClauseShardingConditionEngine.java | 2 +-
.../condition/engine/ShardingConditionEngine.java | 2 +-
.../engine/WhereClauseShardingConditionEngine.java | 28 ++++++++++++++++++----
.../WhereClauseShardingConditionEngineTest.java | 20 +++++++++++++++-
.../ConditionValueGeneratorFactoryTest.java | 2 +-
...ConditionValueBetweenOperatorGeneratorTest.java | 2 +-
...ConditionValueCompareOperatorGeneratorTest.java | 2 +-
.../ConditionValueInOperatorGeneratorTest.java | 2 +-
.../infra/metadata/database/schema/HashColumn.java | 7 ++++--
.../metadata/database/schema/HashColumnTest.java | 16 ++++++-------
12 files changed, 73 insertions(+), 33 deletions(-)
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
index 3bc4649cf15..09d3ee51c6e 100644
--- a/RELEASE-NOTES.md
+++ b/RELEASE-NOTES.md
@@ -103,6 +103,7 @@
1. Encrypt: Resolve rewrite issue in nested concat function -
[#35815](https://github.com/apache/shardingsphere/pull/35815)
1. Sharding: Fix mod sharding algorithm judgement
-[#36386](https://github.com/apache/shardingsphere/pull/36386)
1. Sharding: Fix check inline sharding algorithms in table rules -
[#36999](https://github.com/apache/shardingsphere/pull/36999)
+1. Sharding: Fix wrong sharding condition merge when sharding column in
case-sensitive - [#37389](https://github.com/apache/shardingsphere/pull/37389)
1. Pipeline: Recover value of migration incremental importer batch size -
[#34670](https://github.com/apache/shardingsphere/pull/34670)
1. Pipeline: Fix InventoryDumper first time dump SQL without ORDER BY on
multiple columns unique key table -
[#34736](https://github.com/apache/shardingsphere/pull/34736)
1. Pipeline: Fix MySQL JDBC query properties extension when SSL is required on
server - [#36581](https://github.com/apache/shardingsphere/pull/36581)
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableChecker.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableChecker.java
index 3a9b219cb2e..5c4a255daf7 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableChecker.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableChecker.java
@@ -85,13 +85,13 @@ public final class ShardingRouteCacheableChecker {
SQLStatementContext sqlStatementContext = key.getSqlStatementContext();
ShardingRouteCacheableCheckResult result;
if (sqlStatementContext instanceof SelectStatementContext) {
- result = checkSelectCacheable((SelectStatementContext)
sqlStatementContext, key.getParameters());
+ result = checkSelectCacheable((SelectStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
} else if (sqlStatementContext instanceof UpdateStatementContext) {
- result = checkUpdateCacheable((UpdateStatementContext)
sqlStatementContext, key.getParameters());
+ result = checkUpdateCacheable((UpdateStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
} else if (sqlStatementContext instanceof InsertStatementContext) {
result = checkInsertCacheable((InsertStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
} else if (sqlStatementContext instanceof DeleteStatementContext) {
- result = checkDeleteCacheable((DeleteStatementContext)
sqlStatementContext, key.getParameters());
+ result = checkDeleteCacheable((DeleteStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
} else {
result = new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
@@ -99,7 +99,7 @@ public final class ShardingRouteCacheableChecker {
return result;
}
- private ShardingRouteCacheableCheckResult checkSelectCacheable(final
SelectStatementContext statementContext, final List<Object> params) {
+ private ShardingRouteCacheableCheckResult checkSelectCacheable(final
SelectStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
Collection<String> tableNames = new
HashSet<>(statementContext.getTablesContext().getTableNames());
if (!shardingRule.isAllShardingTables(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
@@ -107,12 +107,12 @@ public final class ShardingRouteCacheableChecker {
if (1 != tableNames.size() &&
!shardingRule.isAllConfigBindingTables(tableNames) ||
containsNonCacheableShardingAlgorithm(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
- List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(shardingRule,
timestampServiceRule).createShardingConditions(statementContext, params);
+ List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(database, shardingRule,
timestampServiceRule).createShardingConditions(statementContext, params);
return checkShardingConditionsCacheable(shardingConditions);
}
- private ShardingRouteCacheableCheckResult checkUpdateCacheable(final
UpdateStatementContext statementContext, final List<Object> params) {
- return checkUpdateOrDeleteCacheable(statementContext, params);
+ private ShardingRouteCacheableCheckResult checkUpdateCacheable(final
UpdateStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
+ return checkUpdateOrDeleteCacheable(statementContext, params,
database);
}
private ShardingRouteCacheableCheckResult checkInsertCacheable(final
InsertStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
@@ -139,11 +139,11 @@ public final class ShardingRouteCacheableChecker {
return checkShardingConditionsCacheable(shardingConditions);
}
- private ShardingRouteCacheableCheckResult checkDeleteCacheable(final
DeleteStatementContext statementContext, final List<Object> params) {
- return checkUpdateOrDeleteCacheable(statementContext, params);
+ private ShardingRouteCacheableCheckResult checkDeleteCacheable(final
DeleteStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
+ return checkUpdateOrDeleteCacheable(statementContext, params,
database);
}
- private ShardingRouteCacheableCheckResult
checkUpdateOrDeleteCacheable(final SQLStatementContext sqlStatementContext,
final List<Object> params) {
+ private ShardingRouteCacheableCheckResult
checkUpdateOrDeleteCacheable(final SQLStatementContext sqlStatementContext,
final List<Object> params, final ShardingSphereDatabase database) {
Collection<String> tableNames =
sqlStatementContext.getTablesContext().getTableNames();
if (1 != tableNames.size()) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
@@ -152,7 +152,7 @@ public final class ShardingRouteCacheableChecker {
if (!isShardingTable ||
containsNonCacheableShardingAlgorithm(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
- List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
+ List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(database, shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
return checkShardingConditionsCacheable(shardingConditions);
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
index 22002473f01..641b3ec6c58 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/InsertClauseShardingConditionEngine.java
@@ -164,7 +164,7 @@ public final class InsertClauseShardingConditionEngine {
private List<ShardingCondition>
createShardingConditionsWithInsertSelect(final InsertStatementContext
sqlStatementContext, final List<Object> params) {
SelectStatementContext selectStatementContext =
sqlStatementContext.getInsertSelectContext().getSelectStatementContext();
- return new LinkedList<>(new WhereClauseShardingConditionEngine(rule,
timestampServiceRule).createShardingConditions(selectStatementContext, params));
+ return new LinkedList<>(new
WhereClauseShardingConditionEngine(database, rule,
timestampServiceRule).createShardingConditions(selectStatementContext, params));
}
private void appendGeneratedKeyConditions(final InsertStatementContext
sqlStatementContext, final List<ShardingCondition> shardingConditions) {
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/ShardingConditionEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/ShardingConditionEngine.java
index d8f5c1ec73a..3b446099e18 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/ShardingConditionEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/ShardingConditionEngine.java
@@ -51,6 +51,6 @@ public final class ShardingConditionEngine {
TimestampServiceRule timestampServiceRule =
globalRuleMetaData.getSingleRule(TimestampServiceRule.class);
return sqlStatementContext instanceof InsertStatementContext
? new InsertClauseShardingConditionEngine(database,
shardingRule,
timestampServiceRule).createShardingConditions((InsertStatementContext)
sqlStatementContext, params)
- : new WhereClauseShardingConditionEngine(shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
+ : new WhereClauseShardingConditionEngine(database,
shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
}
}
diff --git
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
index 88f66351e4f..0d66b1b67e1 100644
---
a/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
+++
b/features/sharding/core/src/main/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngine.java
@@ -17,12 +17,18 @@
package org.apache.shardingsphere.sharding.route.engine.condition.engine;
+import com.cedarsoftware.util.CaseInsensitiveSet;
import com.google.common.collect.Range;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.binder.context.available.WhereContextAvailable;
import
org.apache.shardingsphere.infra.binder.context.extractor.SQLStatementContextExtractor;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
+import org.apache.shardingsphere.infra.exception.ShardingSpherePreconditions;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.SchemaNotFoundException;
+import
org.apache.shardingsphere.infra.exception.kernel.metadata.TableNotFoundException;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.HashColumn;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import
org.apache.shardingsphere.sharding.exception.data.ShardingValueDataTypeException;
import
org.apache.shardingsphere.sharding.route.engine.condition.AlwaysFalseShardingCondition;
import
org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
@@ -59,6 +65,8 @@ import java.util.Set;
@RequiredArgsConstructor
public final class WhereClauseShardingConditionEngine {
+ private final ShardingSphereDatabase database;
+
private final ShardingRule rule;
private final TimestampServiceRule timestampServiceRule;
@@ -106,7 +114,11 @@ public final class WhereClauseShardingConditionEngine {
if (!shardingColumn.isPresent()) {
continue;
}
- HashColumn column = new HashColumn(shardingColumn.get(),
tableName);
+ String schemaName =
columnSegment.getColumnBoundInfo().getOriginalSchema().getValue();
+
ShardingSpherePreconditions.checkState(database.containsSchema(schemaName), ()
-> new SchemaNotFoundException(schemaName));
+ ShardingSphereSchema schema = database.getSchema(schemaName);
+
ShardingSpherePreconditions.checkState(schema.containsTable(tableName), () ->
new TableNotFoundException(schemaName));
+ HashColumn column = new HashColumn(shardingColumn.get(),
tableName,
schema.getTable(tableName).getColumn(shardingColumn.get()).isCaseSensitive());
Optional<ShardingConditionValue> shardingConditionValue =
ConditionValueGeneratorFactory.generate(each, column, params,
timestampServiceRule);
if (!shardingConditionValue.isPresent()) {
continue;
@@ -141,7 +153,7 @@ public final class WhereClauseShardingConditionEngine {
for (ShardingConditionValue each : shardingConditionValues) {
parameterMarkerIndexes.addAll(each.getParameterMarkerIndexes());
if (each instanceof ListShardingConditionValue) {
- listValue =
mergeListShardingValues(((ListShardingConditionValue) each).getValues(),
listValue);
+ listValue = mergeListShardingValues(column,
((ListShardingConditionValue) each).getValues(), listValue);
if (listValue.isEmpty()) {
return new AlwaysFalseShardingConditionValue();
}
@@ -164,12 +176,18 @@ public final class WhereClauseShardingConditionEngine {
: new ListShardingConditionValue<>(column.getName(),
column.getTableName(), listValue, new ArrayList<>(parameterMarkerIndexes));
}
- private Collection<Comparable<?>> mergeListShardingValues(final
Collection<Comparable<?>> value1, final Collection<Comparable<?>> value2) {
+ private Collection<Comparable<?>> mergeListShardingValues(final HashColumn
column, final Collection<Comparable<?>> value1, final Collection<Comparable<?>>
value2) {
if (null == value2) {
return value1;
}
- value1.retainAll(value2);
- return value1;
+ if (column.isCaseSensitive()) {
+ value1.retainAll(value2);
+ return value1;
+ }
+ Collection<Comparable<?>> caseInSensitiveValue1 = new
CaseInsensitiveSet<>(value1);
+ Collection<Comparable<?>> caseInSensitiveValue2 = new
CaseInsensitiveSet<>(value2);
+ caseInSensitiveValue1.retainAll(caseInSensitiveValue2);
+ return caseInSensitiveValue1;
}
private Range<Comparable<?>> mergeRangeShardingValues(final
Range<Comparable<?>> value1, final Range<Comparable<?>> value2) {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
index 9adf16f95cf..0a70e5fe82b 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
@@ -18,6 +18,10 @@
package org.apache.shardingsphere.sharding.route.engine.condition.engine;
import
org.apache.shardingsphere.infra.binder.context.statement.type.dml.SelectStatementContext;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereColumn;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
import
org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
import
org.apache.shardingsphere.sharding.route.engine.condition.value.ListShardingConditionValue;
import
org.apache.shardingsphere.sharding.route.engine.condition.value.RangeShardingConditionValue;
@@ -62,10 +66,24 @@ class WhereClauseShardingConditionEngineTest {
@Mock
private WhereSegment whereSegment;
+ @Mock
+ private ShardingSphereDatabase database;
+
+ @Mock
+ private ShardingSphereSchema schema;
+
+ @Mock
+ private ShardingSphereTable table;
+
@BeforeEach
void setUp() {
- shardingConditionEngine = new WhereClauseShardingConditionEngine(rule,
mock(TimestampServiceRule.class));
+ shardingConditionEngine = new
WhereClauseShardingConditionEngine(database, rule,
mock(TimestampServiceRule.class));
when(sqlStatementContext.getWhereSegments()).thenReturn(Collections.singleton(whereSegment));
+ when(database.containsSchema("")).thenReturn(true);
+ when(database.getSchema("")).thenReturn(schema);
+ when(schema.containsTable("")).thenReturn(true);
+ when(schema.getTable("")).thenReturn(table);
+
when(table.getColumn("foo_sharding_col")).thenReturn(mock(ShardingSphereColumn.class));
}
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/ConditionValueGeneratorFactoryTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/ConditionValueGeneratorFactoryTest.java
index 23d8265312a..b16bf7e2fdc 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/ConditionValueGeneratorFactoryTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/ConditionValueGeneratorFactoryTest.java
@@ -45,7 +45,7 @@ import static org.mockito.Mockito.mock;
class ConditionValueGeneratorFactoryTest {
- private final HashColumn column = new HashColumn("id", "tbl");
+ private final HashColumn column = new HashColumn("id", "tbl", false);
@Test
void assertGenerateBinaryOperationExpression() {
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
index 0308b785035..e4c6f848411 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueBetweenOperatorGeneratorTest.java
@@ -56,7 +56,7 @@ class ConditionValueBetweenOperatorGeneratorTest {
private final ConditionValueBetweenOperatorGenerator generator = new
ConditionValueBetweenOperatorGenerator();
- private final HashColumn column = new HashColumn("id", "tbl");
+ private final HashColumn column = new HashColumn("id", "tbl", false);
private final TimestampServiceRule timestampServiceRule = new
TimestampServiceRule(new TimestampServiceRuleConfiguration("System", new
Properties()));
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
index b34c2fe1e3d..064dc876a69 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueCompareOperatorGeneratorTest.java
@@ -46,7 +46,7 @@ class ConditionValueCompareOperatorGeneratorTest {
private final ConditionValueCompareOperatorGenerator generator = new
ConditionValueCompareOperatorGenerator();
- private final HashColumn column = new HashColumn("id", "tbl");
+ private final HashColumn column = new HashColumn("id", "tbl", false);
@SuppressWarnings("unchecked")
@Test
diff --git
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
index 6c193daa238..0ab5579bbaf 100644
---
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
+++
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/generator/impl/ConditionValueInOperatorGeneratorTest.java
@@ -48,7 +48,7 @@ class ConditionValueInOperatorGeneratorTest {
private final ConditionValueInOperatorGenerator generator = new
ConditionValueInOperatorGenerator();
- private final HashColumn column = new HashColumn("id", "tbl");
+ private final HashColumn column = new HashColumn("id", "tbl", false);
private final TimestampServiceRule timestampServiceRule = new
TimestampServiceRule(new TimestampServiceRuleConfiguration("System", new
Properties()));
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumn.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumn.java
index fccb5627abf..c9f2d5833ee 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumn.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumn.java
@@ -33,11 +33,14 @@ public final class HashColumn {
private final String tableName;
+ private final boolean caseSensitive;
+
private final int hashCode;
- public HashColumn(final String name, final String tableName) {
+ public HashColumn(final String name, final String tableName, final boolean
caseSensitive) {
this.name = name;
this.tableName = tableName;
+ this.caseSensitive = caseSensitive;
hashCode = Objects.hash(name.toUpperCase(), tableName.toUpperCase());
}
@@ -45,7 +48,7 @@ public final class HashColumn {
public boolean equals(final Object obj) {
if (obj instanceof HashColumn) {
HashColumn column = (HashColumn) obj;
- return name.equalsIgnoreCase(column.name) &&
tableName.equalsIgnoreCase(column.tableName);
+ return name.equalsIgnoreCase(column.name) &&
tableName.equalsIgnoreCase(column.tableName) && caseSensitive ==
column.caseSensitive;
}
return false;
}
diff --git
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumnTest.java
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumnTest.java
index 70d11f23a0c..0dd09edd62b 100644
---
a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumnTest.java
+++
b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/HashColumnTest.java
@@ -27,19 +27,19 @@ class HashColumnTest {
@Test
void assertEquals() {
- assertThat(new HashColumn("col", "tbl"), not(new Object()));
- assertThat(new HashColumn("col", "tbl"), is(new HashColumn("COL",
"TBL")));
- assertThat(new HashColumn("col", "tbl"), not(new HashColumn("col1",
"tbl")));
- assertThat(new HashColumn("col", "tbl"), not(new HashColumn("col",
"tbl1")));
- HashColumn column1 = new HashColumn("col", "tbl");
- HashColumn column2 = new HashColumn("COL", "TBL");
+ assertThat(new HashColumn("col", "tbl", false), not(new Object()));
+ assertThat(new HashColumn("col", "tbl", false), is(new
HashColumn("COL", "TBL", false)));
+ assertThat(new HashColumn("col", "tbl", false), not(new
HashColumn("col1", "tbl", false)));
+ assertThat(new HashColumn("col", "tbl", false), not(new
HashColumn("col", "tbl1", false)));
+ HashColumn column1 = new HashColumn("col", "tbl", false);
+ HashColumn column2 = new HashColumn("COL", "TBL", false);
assertThat(column1.equals(column2), is(true));
assertThat(column2.equals(column1), is(true));
}
@Test
void assertHashCode() {
- assertThat(new HashColumn("col", "tbl").hashCode(), is(new
HashColumn("COL", "TBL").hashCode()));
- assertThat(new HashColumn("col", "tbl").hashCode(), not(new
HashColumn("different_col", "tbl").hashCode()));
+ assertThat(new HashColumn("col", "tbl", false).hashCode(), is(new
HashColumn("COL", "TBL", false).hashCode()));
+ assertThat(new HashColumn("col", "tbl", false).hashCode(), not(new
HashColumn("different_col", "tbl", false).hashCode()));
}
}