You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/04/25 05:06:25 UTC
[shardingsphere] branch master updated: Refactor SQLTokenGenerators (#25315)
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 02aff758725 Refactor SQLTokenGenerators (#25315)
02aff758725 is described below
commit 02aff7587255a8098d947f841bbfea2d76898608
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Apr 25 13:06:16 2023 +0800
Refactor SQLTokenGenerators (#25315)
---
.../sql/token/generator/SQLTokenGenerators.java | 6 +--
.../token/generator/SQLTokenGeneratorsTest.java | 59 +++++-----------------
2 files changed, 14 insertions(+), 51 deletions(-)
diff --git a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
index 0cd9aa0a3aa..10e4fb92e0d 100644
--- a/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
+++ b/infra/rewrite/src/main/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGenerators.java
@@ -46,9 +46,7 @@ public final class SQLTokenGenerators {
*/
public void addAll(final Collection<SQLTokenGenerator> sqlTokenGenerators) {
for (SQLTokenGenerator each : sqlTokenGenerators) {
- if (!this.generators.containsKey(each.getClass())) {
- this.generators.put(each.getClass(), each);
- }
+ generators.putIfAbsent(each.getClass(), each);
}
}
@@ -58,7 +56,7 @@ public final class SQLTokenGenerators {
* @param databaseName database name
* @param sqlStatementContext SQL statement context
* @param params SQL parameters
- * @param schemas ShardingSphere schema map
+ * @param schemas schema map
* @param connectionContext connection context
* @return SQL tokens
*/
diff --git a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGeneratorsTest.java b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGeneratorsTest.java
index 78adb460f99..5fc1e97e868 100644
--- a/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGeneratorsTest.java
+++ b/infra/rewrite/src/test/java/org/apache/shardingsphere/infra/rewrite/sql/token/generator/SQLTokenGeneratorsTest.java
@@ -22,17 +22,13 @@ import org.apache.shardingsphere.infra.context.ConnectionContext;
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rewrite.sql.token.pojo.SQLToken;
import org.junit.jupiter.api.Test;
-import org.mockito.internal.configuration.plugins.Plugins;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.LinkedList;
-import java.util.Map;
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.doReturn;
import static org.mockito.Mockito.mock;
@@ -40,41 +36,15 @@ import static org.mockito.Mockito.when;
class SQLTokenGeneratorsTest {
- @Test
- void assertAddAllWithList() throws ReflectiveOperationException {
- SQLTokenGenerators sqlTokenGenerators = new SQLTokenGenerators();
- Map<Class<?>, SQLTokenGenerator> actualSqlTokenGeneratorsMap = getSQLTokenGeneratorsMap(sqlTokenGenerators);
- SQLTokenGenerator mockSqlTokenGenerator = mock(SQLTokenGenerator.class);
- sqlTokenGenerators.addAll(Collections.singleton(mockSqlTokenGenerator));
- assertThat(actualSqlTokenGeneratorsMap.size(), is(1));
- assertTrue(actualSqlTokenGeneratorsMap.containsKey(mockSqlTokenGenerator.getClass()));
- assertThat(actualSqlTokenGeneratorsMap.get(mockSqlTokenGenerator.getClass()), is(mockSqlTokenGenerator));
- }
-
- @Test
- void assertAddAllWithSameClass() throws ReflectiveOperationException {
- SQLTokenGenerators sqlTokenGenerators = new SQLTokenGenerators();
- SQLTokenGenerator expectedSqlTokenGenerator = mock(SQLTokenGenerator.class);
- SQLTokenGenerator unexpectedSqlTokenGenerator = mock(SQLTokenGenerator.class);
- Collection<SQLTokenGenerator> collection = new LinkedList<>();
- collection.add(expectedSqlTokenGenerator);
- collection.add(unexpectedSqlTokenGenerator);
- sqlTokenGenerators.addAll(collection);
- Map<Class<?>, SQLTokenGenerator> actualSqlTokenGeneratorsMap = getSQLTokenGeneratorsMap(sqlTokenGenerators);
- assertThat(actualSqlTokenGeneratorsMap.size(), is(1));
- SQLTokenGenerator actualSqlTokenGenerator = actualSqlTokenGeneratorsMap.get(expectedSqlTokenGenerator.getClass());
- assertThat(actualSqlTokenGenerator, is(expectedSqlTokenGenerator));
- }
-
@Test
@SuppressWarnings({"unchecked", "rawtypes"})
void assertGenerateSQLTokensWithOptionalSQLTokenGenerator() {
- OptionalSQLTokenGenerator<SQLStatementContext> optionalSQLTokenGenerator = mock(OptionalSQLTokenGenerator.class);
- SQLTokenGenerators sqlTokenGenerators = new SQLTokenGenerators();
- sqlTokenGenerators.addAll(Collections.singleton(optionalSQLTokenGenerator));
+ OptionalSQLTokenGenerator<SQLStatementContext> generator = mock(OptionalSQLTokenGenerator.class);
SQLToken expectedToken = mock(SQLToken.class);
- when(optionalSQLTokenGenerator.generateSQLToken(any(SQLStatementContext.class))).thenReturn(expectedToken);
- Collection<SQLToken> actualSqlTokens = sqlTokenGenerators.generateSQLTokens(
+ when(generator.generateSQLToken(any(SQLStatementContext.class))).thenReturn(expectedToken);
+ SQLTokenGenerators generators = new SQLTokenGenerators();
+ generators.addAll(Collections.singleton(generator));
+ Collection<SQLToken> actualSqlTokens = generators.generateSQLTokens(
"sharding_db", Collections.singletonMap("test", mock(ShardingSphereSchema.class)), mock(SQLStatementContext.class), Collections.emptyList(), mock(ConnectionContext.class));
assertThat(actualSqlTokens.size(), is(1));
assertThat(actualSqlTokens.iterator().next(), is(expectedToken));
@@ -83,19 +53,14 @@ class SQLTokenGeneratorsTest {
@Test
@SuppressWarnings("unchecked")
void assertGenerateSQLTokensWithCollectionSQLTokenGenerator() {
- CollectionSQLTokenGenerator<SQLStatementContext<?>> collectionSQLTokenGenerator = mock(CollectionSQLTokenGenerator.class);
- SQLTokenGenerators sqlTokenGenerators = new SQLTokenGenerators();
- sqlTokenGenerators.addAll(Collections.singleton(collectionSQLTokenGenerator));
- Collection<SQLToken> expectedSQLTokens = Arrays.asList(mock(SQLToken.class), mock(SQLToken.class));
- doReturn(expectedSQLTokens).when(collectionSQLTokenGenerator).generateSQLTokens(any());
- Collection<SQLToken> actualSQLTokens = sqlTokenGenerators.generateSQLTokens(
+ CollectionSQLTokenGenerator<SQLStatementContext<?>> generator = mock(CollectionSQLTokenGenerator.class);
+ Collection<SQLToken> expectedTokens = Arrays.asList(mock(SQLToken.class), mock(SQLToken.class));
+ doReturn(expectedTokens).when(generator).generateSQLTokens(any());
+ SQLTokenGenerators generators = new SQLTokenGenerators();
+ generators.addAll(Collections.singleton(generator));
+ Collection<SQLToken> actualSQLTokens = generators.generateSQLTokens(
"sharding_db", Collections.singletonMap("test", mock(ShardingSphereSchema.class)), mock(SQLStatementContext.class), Collections.emptyList(), mock(ConnectionContext.class));
assertThat(actualSQLTokens.size(), is(2));
- assertThat(actualSQLTokens, is(expectedSQLTokens));
- }
-
- @SuppressWarnings("unchecked")
- private Map<Class<?>, SQLTokenGenerator> getSQLTokenGeneratorsMap(final SQLTokenGenerators sqlTokenGenerators) throws ReflectiveOperationException {
- return (Map<Class<?>, SQLTokenGenerator>) Plugins.getMemberAccessor().get(sqlTokenGenerators.getClass().getDeclaredField("generators"), sqlTokenGenerators);
+ assertThat(actualSQLTokens, is(expectedTokens));
}
}