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