This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 0a6b51e6803 Fix sonar issue on WhereClauseShardingConditionEngine
(#34143)
0a6b51e6803 is described below
commit 0a6b51e68039fe811ea906d3096f73a43d467a15
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Dec 24 22:17:28 2024 +0800
Fix sonar issue on WhereClauseShardingConditionEngine (#34143)
---
.../checker/ShardingRouteCacheableChecker.java | 22 ++++++++++----------
.../InsertClauseShardingConditionEngine.java | 2 +-
.../condition/engine/ShardingConditionEngine.java | 2 +-
.../engine/WhereClauseShardingConditionEngine.java | 17 ++-------------
.../WhereClauseShardingConditionEngineTest.java | 24 +++++++---------------
5 files changed, 22 insertions(+), 45 deletions(-)
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 9a308d3d1d2..67b6160b7dd 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
@@ -86,13 +86,13 @@ public final class ShardingRouteCacheableChecker {
SQLStatementContext sqlStatementContext = key.getSqlStatementContext();
ShardingRouteCacheableCheckResult result;
if (sqlStatementContext instanceof SelectStatementContext) {
- result = checkSelectCacheable((SelectStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
+ result = checkSelectCacheable((SelectStatementContext)
sqlStatementContext, key.getParameters());
} else if (sqlStatementContext instanceof UpdateStatementContext) {
- result = checkUpdateCacheable((UpdateStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
+ result = checkUpdateCacheable((UpdateStatementContext)
sqlStatementContext, key.getParameters());
} else if (sqlStatementContext instanceof InsertStatementContext) {
result = checkInsertCacheable((InsertStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
} else if (sqlStatementContext instanceof DeleteStatementContext) {
- result = checkDeleteCacheable((DeleteStatementContext)
sqlStatementContext, key.getParameters(), key.getDatabase());
+ result = checkDeleteCacheable((DeleteStatementContext)
sqlStatementContext, key.getParameters());
} else {
result = new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
@@ -100,7 +100,7 @@ public final class ShardingRouteCacheableChecker {
return result;
}
- private ShardingRouteCacheableCheckResult checkSelectCacheable(final
SelectStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
+ private ShardingRouteCacheableCheckResult checkSelectCacheable(final
SelectStatementContext statementContext, final List<Object> params) {
Collection<String> tableNames = new
HashSet<>(statementContext.getTablesContext().getTableNames());
if (!shardingRule.isAllShardingTables(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
@@ -108,12 +108,12 @@ public final class ShardingRouteCacheableChecker {
if (1 != tableNames.size() &&
!shardingRule.isAllBindingTables(tableNames) ||
containsNonCacheableShardingAlgorithm(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
- List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(database, shardingRule,
timestampServiceRule).createShardingConditions(statementContext, params);
+ List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(shardingRule,
timestampServiceRule).createShardingConditions(statementContext, params);
return checkShardingConditionsCacheable(shardingConditions);
}
- private ShardingRouteCacheableCheckResult checkUpdateCacheable(final
UpdateStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
- return checkUpdateOrDeleteCacheable(statementContext, params,
database);
+ private ShardingRouteCacheableCheckResult checkUpdateCacheable(final
UpdateStatementContext statementContext, final List<Object> params) {
+ return checkUpdateOrDeleteCacheable(statementContext, params);
}
private ShardingRouteCacheableCheckResult checkInsertCacheable(final
InsertStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
@@ -140,11 +140,11 @@ public final class ShardingRouteCacheableChecker {
return checkShardingConditionsCacheable(shardingConditions);
}
- private ShardingRouteCacheableCheckResult checkDeleteCacheable(final
DeleteStatementContext statementContext, final List<Object> params, final
ShardingSphereDatabase database) {
- return checkUpdateOrDeleteCacheable(statementContext, params,
database);
+ private ShardingRouteCacheableCheckResult checkDeleteCacheable(final
DeleteStatementContext statementContext, final List<Object> params) {
+ return checkUpdateOrDeleteCacheable(statementContext, params);
}
- private ShardingRouteCacheableCheckResult
checkUpdateOrDeleteCacheable(final SQLStatementContext sqlStatementContext,
final List<Object> params, final ShardingSphereDatabase database) {
+ private ShardingRouteCacheableCheckResult
checkUpdateOrDeleteCacheable(final SQLStatementContext sqlStatementContext,
final List<Object> params) {
Collection<String> tableNames = ((TableAvailable)
sqlStatementContext).getTablesContext().getTableNames();
if (1 != tableNames.size()) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
@@ -153,7 +153,7 @@ public final class ShardingRouteCacheableChecker {
if (!isShardingTable ||
containsNonCacheableShardingAlgorithm(tableNames)) {
return new ShardingRouteCacheableCheckResult(false,
Collections.emptyList());
}
- List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(database, shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
+ List<ShardingCondition> shardingConditions = new
WhereClauseShardingConditionEngine(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 15c7cd56153..7bee81e16c7 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(database, rule,
timestampServiceRule).createShardingConditions(selectStatementContext, params));
+ return new LinkedList<>(new WhereClauseShardingConditionEngine(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 72eff8f587e..512c94de926 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(database,
shardingRule,
timestampServiceRule).createShardingConditions(sqlStatementContext, params);
+ : new WhereClauseShardingConditionEngine(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 8a9eb3f0aec..d558597ea3e 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
@@ -21,11 +21,7 @@ import com.google.common.collect.Range;
import lombok.RequiredArgsConstructor;
import
org.apache.shardingsphere.infra.binder.context.extractor.SQLStatementContextExtractor;
import
org.apache.shardingsphere.infra.binder.context.statement.SQLStatementContext;
-import org.apache.shardingsphere.infra.binder.context.type.TableAvailable;
import org.apache.shardingsphere.infra.binder.context.type.WhereAvailable;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseTypeRegistry;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-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.Column;
@@ -63,9 +59,7 @@ import java.util.Set;
@RequiredArgsConstructor
public final class WhereClauseShardingConditionEngine {
- private final ShardingSphereDatabase database;
-
- private final ShardingRule shardingRule;
+ private final ShardingRule rule;
private final TimestampServiceRule timestampServiceRule;
@@ -103,19 +97,12 @@ public final class WhereClauseShardingConditionEngine {
return result;
}
- private ShardingSphereSchema getSchema(final SQLStatementContext
sqlStatementContext, final ShardingSphereDatabase database) {
- String defaultSchemaName = new
DatabaseTypeRegistry(sqlStatementContext.getDatabaseType()).getDefaultSchemaName(database.getName());
- return sqlStatementContext instanceof TableAvailable
- ? ((TableAvailable)
sqlStatementContext).getTablesContext().getSchemaName().map(database::getSchema).orElseGet(()
-> database.getSchema(defaultSchemaName))
- : database.getSchema(defaultSchemaName);
- }
-
private Map<Column, Collection<ShardingConditionValue>>
createShardingConditionValueMap(final Collection<ExpressionSegment> predicates,
final List<Object> params) {
Map<Column, Collection<ShardingConditionValue>> result = new
HashMap<>(predicates.size(), 1F);
for (ExpressionSegment each : predicates) {
for (ColumnSegment columnSegment : ColumnExtractor.extract(each)) {
String tableName =
columnSegment.getColumnBoundInfo().getOriginalTable().getValue();
- Optional<String> shardingColumn =
shardingRule.findShardingColumn(columnSegment.getColumnBoundInfo().getOriginalColumn().getValue(),
tableName);
+ Optional<String> shardingColumn =
rule.findShardingColumn(columnSegment.getColumnBoundInfo().getOriginalColumn().getValue(),
tableName);
if (!shardingColumn.isPresent()) {
continue;
}
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 d85bba0435e..ba8b39a7c12 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
@@ -17,12 +17,7 @@
package org.apache.shardingsphere.sharding.route.engine.condition.engine;
-import
org.apache.shardingsphere.infra.binder.context.segment.table.TablesContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
-import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
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;
@@ -45,11 +40,10 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
-import java.util.Properties;
+import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
-import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -60,7 +54,7 @@ class WhereClauseShardingConditionEngineTest {
private WhereClauseShardingConditionEngine shardingConditionEngine;
@Mock
- private ShardingRule shardingRule;
+ private ShardingRule rule;
@Mock
private SelectStatementContext sqlStatementContext;
@@ -68,13 +62,9 @@ class WhereClauseShardingConditionEngineTest {
@Mock
private WhereSegment whereSegment;
- @Mock
- private TablesContext tablesContext;
-
@BeforeEach
void setUp() {
- shardingConditionEngine = new
WhereClauseShardingConditionEngine(ShardingSphereDatabase.create("test_db",
- TypedSPILoader.getService(DatabaseType.class, "FIXTURE"), new
ConfigurationProperties(new Properties())), shardingRule,
mock(TimestampServiceRule.class));
+ shardingConditionEngine = new WhereClauseShardingConditionEngine(rule,
mock(TimestampServiceRule.class));
when(sqlStatementContext.getWhereSegments()).thenReturn(Collections.singleton(whereSegment));
}
@@ -87,10 +77,10 @@ class WhereClauseShardingConditionEngineTest {
ExpressionSegment andSegment = new LiteralExpressionSegment(0, 0, and);
BetweenExpression betweenExpression = new BetweenExpression(0, 0,
left, betweenSegment, andSegment, false);
when(whereSegment.getExpr()).thenReturn(betweenExpression);
- when(shardingRule.findShardingColumn(any(),
any())).thenReturn(Optional.of("foo_sharding_col"));
+ when(rule.findShardingColumn(any(),
any())).thenReturn(Optional.of("foo_sharding_col"));
List<ShardingCondition> actual =
shardingConditionEngine.createShardingConditions(sqlStatementContext,
Collections.emptyList());
assertThat(actual.get(0).getStartIndex(), is(0));
- assertTrue(actual.get(0).getValues().get(0) instanceof
RangeShardingConditionValue);
+ assertThat(actual.get(0).getValues().get(0),
instanceOf(RangeShardingConditionValue.class));
}
@Test
@@ -101,9 +91,9 @@ class WhereClauseShardingConditionEngineTest {
right.getItems().add(literalExpressionSegment);
InExpression inExpression = new InExpression(0, 0, left, right, false);
when(whereSegment.getExpr()).thenReturn(inExpression);
- when(shardingRule.findShardingColumn(any(),
any())).thenReturn(Optional.of("foo_sharding_col"));
+ when(rule.findShardingColumn(any(),
any())).thenReturn(Optional.of("foo_sharding_col"));
List<ShardingCondition> actual =
shardingConditionEngine.createShardingConditions(sqlStatementContext,
Collections.emptyList());
assertThat(actual.get(0).getStartIndex(), is(0));
- assertTrue(actual.get(0).getValues().get(0) instanceof
ListShardingConditionValue);
+ assertThat(actual.get(0).getValues().get(0),
instanceOf(ListShardingConditionValue.class));
}
}