This is an automated email from the ASF dual-hosted git repository.

chengzhang 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 6c898557f5a Refactor SQLStatementParserEngineFactory (#27339)
6c898557f5a is described below

commit 6c898557f5af4982b40c0d595d30b75e26934206
Author: Liang Zhang <[email protected]>
AuthorDate: Fri Jul 21 02:48:48 2023 +0800

    Refactor SQLStatementParserEngineFactory (#27339)
    
    * Refactor SQLStatementParserEngine
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
    
    * Refactor SQLStatementParserEngineFactory
---
 .../cache/checker/ShardingRouteCacheableCheckerTest.java       |  2 +-
 .../engine/type/standard/assertion/ShardingRouteAssert.java    |  2 +-
 .../infra/parser/cache/SQLStatementCacheBuilder.java           |  5 +++--
 .../infra/parser/cache/SQLStatementCacheLoader.java            |  3 ++-
 .../infra/parser/sql/SQLStatementParserEngine.java             |  5 +++--
 .../infra/parser/sql/SQLStatementParserEngineFactory.java      | 10 +++++-----
 .../infra/parser/sql/SQLStatementParserExecutor.java           |  5 ++---
 .../infra/parser/cache/SQLStatementCacheBuilderTest.java       |  4 +++-
 .../infra/parser/cache/SQLStatementCacheLoaderTest.java        |  4 +++-
 .../driver/jdbc/adapter/PreparedStatementAdapterTest.java      |  5 ++++-
 .../unsupported/UnsupportedOperationPreparedStatementTest.java |  6 ++++--
 .../compiler/metadata/view/ShardingSphereViewExpander.java     |  2 +-
 .../executor/enumerable/EnumerableScanExecutor.java            |  2 +-
 .../handler/distsql/rul/sql/ParseDistSQLExecutorTest.java      |  8 +++-----
 .../query/extended/parse/PostgreSQLComParseExecutorTest.java   |  8 +++++---
 .../e2e/driver/statement/ShardingPreparedStatementTest.java    |  1 -
 .../shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java   |  2 +-
 17 files changed, 42 insertions(+), 32 deletions(-)

diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
index 83827357363..ad46047c97e 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/cache/checker/ShardingRouteCacheableCheckerTest.java
@@ -137,7 +137,7 @@ class ShardingRouteCacheableCheckerTest {
     
     private SQLStatement parse(final String sql) {
         CacheOption cacheOption = new CacheOption(0, 0);
-        return new SQLStatementParserEngine("PostgreSQL", cacheOption, 
cacheOption, false).parse(sql, false);
+        return new 
SQLStatementParserEngine(TypedSPILoader.getService(DatabaseType.class, 
"PostgreSQL"), cacheOption, cacheOption, false).parse(sql, false);
     }
     
     private static class TestCaseArgumentsProvider implements 
ArgumentsProvider {
diff --git 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java
 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java
index 488e3f1484b..5a49fd6cb2d 100644
--- 
a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java
+++ 
b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/assertion/ShardingRouteAssert.java
@@ -75,7 +75,7 @@ public final class ShardingRouteAssert {
         TimestampServiceRule timestampServiceRule = 
ShardingRoutingEngineFixtureBuilder.createTimeServiceRule();
         Map<String, ShardingSphereSchema> schemas = buildSchemas();
         ConfigurationProperties props = new ConfigurationProperties(new 
Properties());
-        SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine("MySQL",
+        SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine(TypedSPILoader.getService(DatabaseType.class, "MySQL"),
                 new CacheOption(2000, 65535L), new CacheOption(128, 1024L), 
false);
         ShardingSphereRuleMetaData ruleMetaData = new 
ShardingSphereRuleMetaData(Arrays.asList(shardingRule, singleRule, 
timestampServiceRule));
         ShardingSphereResourceMetaData resourceMetaData = 
mock(ShardingSphereResourceMetaData.class, RETURNS_DEEP_STUBS);
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
index 2c7c6e17545..c871bd56af6 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilder.java
@@ -21,6 +21,7 @@ import com.github.benmanes.caffeine.cache.Caffeine;
 import com.github.benmanes.caffeine.cache.LoadingCache;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -39,8 +40,8 @@ public final class SQLStatementCacheBuilder {
      * @param databaseType database type
      * @return built SQL statement cache
      */
-    public static LoadingCache<String, SQLStatement> build(final String 
databaseType,
-                                                           final CacheOption 
sqlStatementCacheOption, final CacheOption parseTreeCacheOption, final boolean 
isParseComment) {
+    public static LoadingCache<String, SQLStatement> build(final DatabaseType 
databaseType, final CacheOption sqlStatementCacheOption,
+                                                           final CacheOption 
parseTreeCacheOption, final boolean isParseComment) {
         return 
Caffeine.newBuilder().softValues().initialCapacity(sqlStatementCacheOption.getInitialCapacity()).maximumSize(sqlStatementCacheOption.getMaximumSize())
                 .build(new SQLStatementCacheLoader(databaseType, 
parseTreeCacheOption, isParseComment));
     }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
index d8eb73731e5..1cc1bf5f3c5 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoader.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.infra.parser.cache;
 
 import com.github.benmanes.caffeine.cache.CacheLoader;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserExecutor;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -31,7 +32,7 @@ public final class SQLStatementCacheLoader implements 
CacheLoader<String, SQLSta
     
     private final SQLStatementParserExecutor sqlStatementParserExecutor;
     
-    public SQLStatementCacheLoader(final String databaseType, final 
CacheOption parseTreeCacheOption, final boolean isParseComment) {
+    public SQLStatementCacheLoader(final DatabaseType databaseType, final 
CacheOption parseTreeCacheOption, final boolean isParseComment) {
         sqlStatementParserExecutor = new 
SQLStatementParserExecutor(databaseType, parseTreeCacheOption, isParseComment);
     }
     
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
index f0ba50a17b2..3ae98f0a2b6 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngine.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.infra.parser.sql;
 
 import com.github.benmanes.caffeine.cache.LoadingCache;
 import lombok.Getter;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.infra.parser.cache.SQLStatementCacheBuilder;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -41,7 +42,7 @@ public final class SQLStatementParserEngine {
     @Getter
     private final boolean isParseComment;
     
-    public SQLStatementParserEngine(final String databaseType, final 
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption, 
final boolean isParseComment) {
+    public SQLStatementParserEngine(final DatabaseType databaseType, final 
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption, 
final boolean isParseComment) {
         sqlStatementParserExecutor = new 
SQLStatementParserExecutor(databaseType, parseTreeCacheOption, isParseComment);
         sqlStatementCache = SQLStatementCacheBuilder.build(databaseType, 
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
         this.sqlStatementCacheOption = sqlStatementCacheOption;
@@ -53,7 +54,7 @@ public final class SQLStatementParserEngine {
      * Parse to SQL statement.
      *
      * @param sql SQL to be parsed
-     * @param useCache whether use cache
+     * @param useCache whether to use cache
      * @return SQL statement
      */
     public SQLStatement parse(final String sql, final boolean useCache) {
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
index 0930901cc91..0c5619d26a1 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserEngineFactory.java
@@ -31,7 +31,7 @@ import java.util.concurrent.ConcurrentHashMap;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class SQLStatementParserEngineFactory {
     
-    private static final Map<String, SQLStatementParserEngine> ENGINES = new 
ConcurrentHashMap<>();
+    private static final Map<DatabaseType, SQLStatementParserEngine> ENGINES = 
new ConcurrentHashMap<>();
     
     /**
      * Get SQL statement parser engine.
@@ -44,13 +44,13 @@ public final class SQLStatementParserEngineFactory {
      */
     public static SQLStatementParserEngine getSQLStatementParserEngine(final 
DatabaseType databaseType,
                                                                        final 
CacheOption sqlStatementCacheOption, final CacheOption parseTreeCacheOption, 
final boolean isParseComment) {
-        SQLStatementParserEngine result = ENGINES.get(databaseType.getType());
+        SQLStatementParserEngine result = ENGINES.get(databaseType);
         if (null == result) {
-            result = ENGINES.computeIfAbsent(databaseType.getType(), key -> 
new SQLStatementParserEngine(key, sqlStatementCacheOption, 
parseTreeCacheOption, isParseComment));
+            result = ENGINES.computeIfAbsent(databaseType, key -> new 
SQLStatementParserEngine(key, sqlStatementCacheOption, parseTreeCacheOption, 
isParseComment));
         } else if 
(!result.getSqlStatementCacheOption().equals(sqlStatementCacheOption) || 
!result.getParseTreeCacheOption().equals(parseTreeCacheOption)
                 || result.isParseComment() != isParseComment) {
-            result = new SQLStatementParserEngine(databaseType.getType(), 
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
-            ENGINES.put(databaseType.getType(), result);
+            result = new SQLStatementParserEngine(databaseType, 
sqlStatementCacheOption, parseTreeCacheOption, isParseComment);
+            ENGINES.put(databaseType, result);
         }
         return result;
     }
diff --git 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
index c679f581e88..72c708d9f36 100644
--- 
a/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
+++ 
b/infra/parser/src/main/java/org/apache/shardingsphere/infra/parser/sql/SQLStatementParserExecutor.java
@@ -18,7 +18,6 @@
 package org.apache.shardingsphere.infra.parser.sql;
 
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.api.SQLParserEngine;
 import org.apache.shardingsphere.sql.parser.api.SQLStatementVisitorEngine;
@@ -33,8 +32,8 @@ public final class SQLStatementParserExecutor {
     
     private final SQLStatementVisitorEngine visitorEngine;
     
-    public SQLStatementParserExecutor(final String databaseType, final 
CacheOption parseTreeCacheOption, final boolean isParseComment) {
-        parserEngine = new 
SQLParserEngine(TypedSPILoader.getService(DatabaseType.class, databaseType), 
parseTreeCacheOption);
+    public SQLStatementParserExecutor(final DatabaseType databaseType, final 
CacheOption parseTreeCacheOption, final boolean isParseComment) {
+        parserEngine = new SQLParserEngine(databaseType, parseTreeCacheOption);
         visitorEngine = new SQLStatementVisitorEngine(databaseType, 
isParseComment);
     }
     
diff --git 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
index 6ae39b5be82..a255cf13b1e 100644
--- 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
+++ 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheBuilderTest.java
@@ -18,6 +18,8 @@
 package org.apache.shardingsphere.infra.parser.cache;
 
 import com.github.benmanes.caffeine.cache.LoadingCache;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.junit.jupiter.api.Test;
 
@@ -28,6 +30,6 @@ class SQLStatementCacheBuilderTest {
     
     @Test
     void assertBuild() {
-        assertThat(SQLStatementCacheBuilder.build("MySQL", new 
CacheOption(2000, 65535L), new CacheOption(128, 1024L), false), 
isA(LoadingCache.class));
+        
assertThat(SQLStatementCacheBuilder.build(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"), new CacheOption(2000, 65535L), new CacheOption(128, 1024L), false), 
isA(LoadingCache.class));
     }
 }
diff --git 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
index b91ce6c9350..0a703ce09b2 100644
--- 
a/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
+++ 
b/infra/parser/src/test/java/org/apache/shardingsphere/infra/parser/cache/SQLStatementCacheLoaderTest.java
@@ -17,7 +17,9 @@
 
 package org.apache.shardingsphere.infra.parser.cache;
 
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.infra.parser.sql.SQLStatementParserExecutor;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.api.CacheOption;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import org.junit.jupiter.api.Test;
@@ -34,7 +36,7 @@ class SQLStatementCacheLoaderTest {
     
     @Test
     void assertSQLStatementCacheLoad() throws ReflectiveOperationException {
-        SQLStatementCacheLoader sqlStatementCacheLoader = new 
SQLStatementCacheLoader("MySQL", new CacheOption(128, 1024L), false);
+        SQLStatementCacheLoader sqlStatementCacheLoader = new 
SQLStatementCacheLoader(TypedSPILoader.getService(DatabaseType.class, "MySQL"), 
new CacheOption(128, 1024L), false);
         SQLStatementParserExecutor executor = 
mock(SQLStatementParserExecutor.class, RETURNS_DEEP_STUBS);
         
Plugins.getMemberAccessor().set(sqlStatementCacheLoader.getClass().getDeclaredField("sqlStatementParserExecutor"),
 sqlStatementCacheLoader, executor);
         assertThat(sqlStatementCacheLoader.load(SQL), isA(SQLStatement.class));
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
index 0bf616767f4..fd9453d2564 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/adapter/PreparedStatementAdapterTest.java
@@ -22,7 +22,9 @@ import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePrepar
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
 import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
@@ -72,7 +74,8 @@ class PreparedStatementAdapterTest {
                         new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
                         new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build(), Collections.emptyMap(), 
mock(ConfigurationProperties.class)))));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(
+                
connection.getDatabaseName()).getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getResourceMetaData().getStorageTypes())
                 .thenReturn(Collections.singletonMap("ds_0", new 
MySQLDatabaseType()));
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
diff --git 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
index bac3a0c6eb1..01edb0df640 100644
--- 
a/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
+++ 
b/jdbc/core/src/test/java/org/apache/shardingsphere/driver/jdbc/unsupported/UnsupportedOperationPreparedStatementTest.java
@@ -21,8 +21,9 @@ import 
org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConne
 import 
org.apache.shardingsphere.driver.jdbc.core.statement.ShardingSpherePreparedStatement;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
-import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
 import org.apache.shardingsphere.sqlfederation.rule.SQLFederationRule;
@@ -57,7 +58,8 @@ class UnsupportedOperationPreparedStatementTest {
                 new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()),
                 new TrafficRule(new 
DefaultTrafficRuleConfigurationBuilder().build()),
                 new SQLFederationRule(new 
DefaultSQLFederationRuleConfigurationBuilder().build(), Collections.emptyMap(), 
mock(ConfigurationProperties.class)))));
-        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(connection.getDatabaseName()).getProtocolType()).thenReturn(new
 MySQLDatabaseType());
+        
when(connection.getContextManager().getMetaDataContexts().getMetaData().getDatabase(
+                
connection.getDatabaseName()).getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         
when(connection.getContextManager().getMetaDataContexts().getMetaData().getProps()).thenReturn(new
 ConfigurationProperties(new Properties()));
         shardingSpherePreparedStatement = new 
ShardingSpherePreparedStatement(connection, "SELECT 1");
     }
diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/metadata/view/ShardingSphereViewExpander.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/metadata/view/ShardingSphereViewExpander.java
index 00fa1691403..a5cd5ff457d 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/metadata/view/ShardingSphereViewExpander.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/compiler/metadata/view/ShardingSphereViewExpander.java
@@ -46,7 +46,7 @@ public final class ShardingSphereViewExpander implements 
ViewExpander {
     
     @Override
     public RelRoot expandView(final RelDataType rowType, final String 
queryString, final List<String> schemaPath, @Nullable final List<String> 
viewPath) {
-        SQLStatement sqlStatement = new 
SQLStatementParserEngine(databaseType.getType(), 
sqlParserRule.getSqlStatementCache(),
+        SQLStatement sqlStatement = new SQLStatementParserEngine(databaseType, 
sqlParserRule.getSqlStatementCache(),
                 sqlParserRule.getParseTreeCache(), 
sqlParserRule.isSqlCommentParseEnabled()).parse(queryString, false);
         SqlNode sqlNode = SQLNodeConverterEngine.convert(sqlStatement);
         return sqlToRelConverter.convertQuery(sqlNode, true, true);
diff --git 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
index 5ddb1c969b8..80aeff2fe41 100644
--- 
a/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
+++ 
b/kernel/sql-federation/core/src/main/java/org/apache/shardingsphere/sqlfederation/executor/enumerable/EnumerableScanExecutor.java
@@ -279,7 +279,7 @@ public final class EnumerableScanExecutor {
     
     private QueryContext createQueryContext(final ShardingSphereMetaData 
metaData, final EnumerableScanExecutorContext sqlString, final DatabaseType 
databaseType, final boolean useCache) {
         String sql = sqlString.getSql().replace("\n", " ");
-        SQLStatement sqlStatement = new 
SQLStatementParserEngine(databaseType.getType(),
+        SQLStatement sqlStatement = new SQLStatementParserEngine(databaseType,
                 optimizerContext.getSqlParserRule().getSqlStatementCache(), 
optimizerContext.getSqlParserRule().getParseTreeCache(),
                 
optimizerContext.getSqlParserRule().isSqlCommentParseEnabled()).parse(sql, 
useCache);
         List<Object> params = getParameters(sqlString.getParamIndexes());
diff --git 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLExecutorTest.java
 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLExecutorTest.java
index 2155d1cd750..ff9df6f2b69 100644
--- 
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLExecutorTest.java
+++ 
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/rul/sql/ParseDistSQLExecutorTest.java
@@ -21,8 +21,6 @@ import com.google.gson.Gson;
 import com.google.gson.JsonParser;
 import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.FormatStatement;
 import 
org.apache.shardingsphere.distsql.parser.statement.rul.sql.ParseStatement;
-import org.apache.shardingsphere.infra.database.mysql.MySQLDatabaseType;
-import 
org.apache.shardingsphere.infra.database.postgresql.PostgreSQLDatabaseType;
 import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
 import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
@@ -73,7 +71,7 @@ class ParseDistSQLExecutorTest {
     @Test
     void assertGetRowDataForMySQL() throws SQLException {
         String sql = "SELECT * FROM t_order";
-        when(connectionSession.getProtocolType()).thenReturn(new 
MySQLDatabaseType());
+        
when(connectionSession.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         RULBackendHandler<FormatStatement> handler = new 
SQLRULBackendHandler<>();
         handler.init(new ParseStatement(sql), connectionSession);
         handler.execute();
@@ -86,7 +84,7 @@ class ParseDistSQLExecutorTest {
     @Test
     void assertGetRowDataForPostgreSQL() throws SQLException {
         String sql = "SELECT * FROM t_order";
-        when(connectionSession.getProtocolType()).thenReturn(new 
PostgreSQLDatabaseType());
+        
when(connectionSession.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         RULBackendHandler<FormatStatement> handler = new 
SQLRULBackendHandler<>();
         handler.init(new ParseStatement(sql), connectionSession);
         handler.execute();
@@ -98,7 +96,7 @@ class ParseDistSQLExecutorTest {
     @Test
     void assertExecute() {
         String sql = "wrong sql";
-        when(connectionSession.getProtocolType()).thenReturn(new 
MySQLDatabaseType());
+        
when(connectionSession.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "MySQL"));
         RULBackendHandler<FormatStatement> handler = new 
SQLRULBackendHandler<>();
         handler.init(new ParseStatement(sql), connectionSession);
         assertThrows(SQLParsingException.class, handler::execute);
diff --git 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
index 452d1f4fa75..87c7249c2b4 100644
--- 
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
+++ 
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutorTest.java
@@ -24,8 +24,9 @@ import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.ext
 import 
org.apache.shardingsphere.distsql.parser.statement.ral.queryable.ShowDistVariableStatement;
 import 
org.apache.shardingsphere.infra.binder.statement.CommonSQLStatementContext;
 import 
org.apache.shardingsphere.infra.binder.statement.dml.InsertStatementContext;
-import 
org.apache.shardingsphere.infra.database.postgresql.PostgreSQLDatabaseType;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.parser.rule.SQLParserRule;
 import 
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
@@ -153,8 +154,9 @@ class PostgreSQLComParseExecutorTest {
     
     private ContextManager mockContextManager() {
         ContextManager result = mock(ContextManager.class, RETURNS_DEEP_STUBS);
-        
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResourceMetaData().getStorageTypes()).thenReturn(Collections.singletonMap("foo_ds",
 new PostgreSQLDatabaseType()));
-        
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getProtocolType()).thenReturn(new
 PostgreSQLDatabaseType());
+        
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getResourceMetaData().getStorageTypes()).thenReturn(
+                Collections.singletonMap("foo_ds", 
TypedSPILoader.getService(DatabaseType.class, "PostgreSQL")));
+        
when(result.getMetaDataContexts().getMetaData().getDatabase("foo_db").getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
 "PostgreSQL"));
         
when(result.getMetaDataContexts().getMetaData().getGlobalRuleMetaData())
                 .thenReturn(new 
ShardingSphereRuleMetaData(Collections.singleton(new SQLParserRule(new 
DefaultSQLParserRuleConfigurationBuilder().build()))));
         return result;
diff --git 
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/statement/ShardingPreparedStatementTest.java
 
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/statement/ShardingPreparedStatementTest.java
index 771997b5790..4e23b0f4087 100644
--- 
a/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/statement/ShardingPreparedStatementTest.java
+++ 
b/test/e2e/driver/src/test/java/org/apache/shardingsphere/test/e2e/driver/statement/ShardingPreparedStatementTest.java
@@ -416,7 +416,6 @@ class ShardingPreparedStatementTest extends 
AbstractShardingDriverTest {
                 assertThat(resultSet.getString(3), is(status));
             }
         }
-        
         try (
                 Connection connection = 
getShardingSphereDataSource().getConnection();
                 PreparedStatement preparedStatement = 
connection.prepareStatement(INSERT_ON_DUPLICATE_KEY_SQL);
diff --git 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
index 08b0d29c114..7a7afe1ef47 100644
--- 
a/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
+++ 
b/test/it/rewriter/src/test/java/org/apache/shardingsphere/test/it/rewrite/engine/SQLRewriterIT.java
@@ -122,7 +122,7 @@ public abstract class SQLRewriterIT {
         Map<String, DatabaseType> storageTypes = 
createStorageTypes(databaseConfig, databaseType);
         when(resourceMetaData.getStorageTypes()).thenReturn(storageTypes);
         String schemaName = 
DatabaseTypeEngine.getDefaultSchemaName(databaseType, 
DefaultDatabase.LOGIC_NAME);
-        SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine(testParams.getDatabaseType(),
+        SQLStatementParserEngine sqlStatementParserEngine = new 
SQLStatementParserEngine(TypedSPILoader.getService(DatabaseType.class, 
testParams.getDatabaseType()),
                 sqlParserRule.getSqlStatementCache(), 
sqlParserRule.getParseTreeCache(), sqlParserRule.isSqlCommentParseEnabled());
         SQLStatement sqlStatement = 
sqlStatementParserEngine.parse(testParams.getInputSQL(), false);
         Collection<ShardingSphereRule> databaseRules = 
createDatabaseRules(databaseConfig, schemaName, sqlStatement);

Reply via email to