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

panjuan 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 489cd00cff4 Use DatabaseType on SQL parser module (#27318)
489cd00cff4 is described below

commit 489cd00cff4c68d6ee52b39013017a8210f6f281
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 20 12:02:16 2023 +0800

    Use DatabaseType on SQL parser module (#27318)
---
 .../parser/sql/SQLStatementParserExecutor.java     |  4 +-
 parser/sql/dialect/mysql/pom.xml                   |  6 +++
 .../sql/parser/mysql/parser/MySQLParserFacade.java |  2 +-
 parser/sql/dialect/opengauss/pom.xml               |  8 +++
 .../opengauss/parser/OpenGaussParserFacade.java    |  2 +-
 parser/sql/dialect/oracle/pom.xml                  |  8 +++
 .../parser/oracle/parser/OracleParserFacade.java   |  2 +-
 parser/sql/dialect/postgresql/pom.xml              |  8 +++
 .../postgresql/parser/PostgreSQLParserFacade.java  |  2 +-
 parser/sql/dialect/sql92/pom.xml                   |  8 +++
 .../sql/parser/sql92/parser/SQL92ParserFacade.java |  2 +-
 parser/sql/dialect/sqlserver/pom.xml               |  8 +++
 .../sqlserver/parser/SQLServerParserFacade.java    |  2 +-
 .../sql/parser/api/SQLParserEngine.java            | 10 +++-
 .../core/database/cache/ParseTreeCacheBuilder.java |  6 +--
 .../core/database/cache/ParseTreeCacheLoader.java  |  3 +-
 .../core/database/parser/SQLParserExecutor.java    |  7 +--
 .../sql/parser/api/SQLParserExecutorTest.java      |  2 +-
 .../database/cache/ParseTreeCacheBuilderTest.java  |  4 +-
 .../database/cache/ParseTreeCacheLoaderTest.java   |  4 +-
 .../fixture/ParserDatabaseTypeFixture.java         | 58 ++++++++++++++++++++++
 ....shardingsphere.infra.database.spi.DatabaseType | 18 +++++++
 parser/sql/spi/pom.xml                             |  5 ++
 .../sql/parser/spi/SQLDialectParserFacade.java     |  3 +-
 24 files changed, 162 insertions(+), 20 deletions(-)

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 0d7081d05cd..c679f581e88 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
@@ -17,6 +17,8 @@
 
 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;
@@ -32,7 +34,7 @@ public final class SQLStatementParserExecutor {
     private final SQLStatementVisitorEngine visitorEngine;
     
     public SQLStatementParserExecutor(final String databaseType, final 
CacheOption parseTreeCacheOption, final boolean isParseComment) {
-        parserEngine = new SQLParserEngine(databaseType, parseTreeCacheOption);
+        parserEngine = new 
SQLParserEngine(TypedSPILoader.getService(DatabaseType.class, databaseType), 
parseTreeCacheOption);
         visitorEngine = new SQLStatementVisitorEngine(databaseType, 
isParseComment);
     }
     
diff --git a/parser/sql/dialect/mysql/pom.xml b/parser/sql/dialect/mysql/pom.xml
index 8f84293e634..e3d3614256c 100644
--- a/parser/sql/dialect/mysql/pom.xml
+++ b/parser/sql/dialect/mysql/pom.xml
@@ -31,6 +31,12 @@
     </properties>
     
     <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-mysql</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-test-util</artifactId>
diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
index 54b95768ec8..49b888a279e 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
@@ -37,7 +37,7 @@ public final class MySQLParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "MySQL";
     }
 }
diff --git a/parser/sql/dialect/opengauss/pom.xml 
b/parser/sql/dialect/opengauss/pom.xml
index 91b6923e6ef..10d81a48ee2 100644
--- a/parser/sql/dialect/opengauss/pom.xml
+++ b/parser/sql/dialect/opengauss/pom.xml
@@ -29,4 +29,12 @@
     <properties>
         <dialect.parser>opengauss</dialect.parser>
     </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-opengauss</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
index 64581d93d68..ffe761f250e 100644
--- 
a/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
+++ 
b/parser/sql/dialect/opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
@@ -37,7 +37,7 @@ public final class OpenGaussParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "openGauss";
     }
 }
diff --git a/parser/sql/dialect/oracle/pom.xml 
b/parser/sql/dialect/oracle/pom.xml
index 511d01be80f..a34aa934ef6 100644
--- a/parser/sql/dialect/oracle/pom.xml
+++ b/parser/sql/dialect/oracle/pom.xml
@@ -29,4 +29,12 @@
     <properties>
         <dialect.parser>oracle</dialect.parser>
     </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-oracle</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
index 3f220f6170a..b4ec6e8fc47 100644
--- 
a/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
+++ 
b/parser/sql/dialect/oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
@@ -37,7 +37,7 @@ public final class OracleParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "Oracle";
     }
 }
diff --git a/parser/sql/dialect/postgresql/pom.xml 
b/parser/sql/dialect/postgresql/pom.xml
index b8e47d98f45..7d2b9018747 100644
--- a/parser/sql/dialect/postgresql/pom.xml
+++ b/parser/sql/dialect/postgresql/pom.xml
@@ -29,4 +29,12 @@
     <properties>
         <dialect.parser>postgresql</dialect.parser>
     </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-postgresql</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
index 5158d307f86..31c2fd4441b 100644
--- 
a/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
+++ 
b/parser/sql/dialect/postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
@@ -37,7 +37,7 @@ public final class PostgreSQLParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "PostgreSQL";
     }
 }
diff --git a/parser/sql/dialect/sql92/pom.xml b/parser/sql/dialect/sql92/pom.xml
index ae4eb127ee3..fee42405b1b 100644
--- a/parser/sql/dialect/sql92/pom.xml
+++ b/parser/sql/dialect/sql92/pom.xml
@@ -29,4 +29,12 @@
     <properties>
         <dialect.parser>sql92</dialect.parser>
     </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-sql92</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
 
b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
index bde60fca31a..b4e3e60c72c 100644
--- 
a/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
+++ 
b/parser/sql/dialect/sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
@@ -37,7 +37,7 @@ public final class SQL92ParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "SQL92";
     }
 }
diff --git a/parser/sql/dialect/sqlserver/pom.xml 
b/parser/sql/dialect/sqlserver/pom.xml
index 32a546bdc86..00a07bda8d1 100644
--- a/parser/sql/dialect/sqlserver/pom.xml
+++ b/parser/sql/dialect/sqlserver/pom.xml
@@ -29,4 +29,12 @@
     <properties>
         <dialect.parser>sqlserver</dialect.parser>
     </properties>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-sqlserver</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
index 74fc01873f0..30764d28e9e 100644
--- 
a/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
+++ 
b/parser/sql/dialect/sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
@@ -37,7 +37,7 @@ public final class SQLServerParserFacade implements 
SQLDialectParserFacade {
     }
     
     @Override
-    public String getType() {
+    public String getDatabaseType() {
         return "SQLServer";
     }
 }
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
index afcaa1ef218..5a93d8071f6 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
@@ -18,6 +18,8 @@
 package org.apache.shardingsphere.sql.parser.api;
 
 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.core.ParseASTNode;
 import 
org.apache.shardingsphere.sql.parser.core.database.cache.ParseTreeCacheBuilder;
 import 
org.apache.shardingsphere.sql.parser.core.database.parser.SQLParserExecutor;
@@ -31,16 +33,20 @@ public final class SQLParserEngine {
     
     private final LoadingCache<String, ParseASTNode> parseTreeCache;
     
-    public SQLParserEngine(final String databaseType, final CacheOption 
cacheOption) {
+    public SQLParserEngine(final DatabaseType databaseType, final CacheOption 
cacheOption) {
         sqlParserExecutor = new SQLParserExecutor(databaseType);
         parseTreeCache = ParseTreeCacheBuilder.build(cacheOption, 
databaseType);
     }
     
+    public SQLParserEngine(final String databaseType, final CacheOption 
cacheOption) {
+        this(TypedSPILoader.getService(DatabaseType.class, databaseType), 
cacheOption);
+    }
+    
     /**
      * Parse SQL.
      *
      * @param sql SQL to be parsed
-     * @param useCache whether use cache
+     * @param useCache whether to use cache
      * @return parse AST node
      */
     public ParseASTNode parse(final String sql, final boolean useCache) {
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilder.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilder.java
index 4a7281bc4e0..10d7f725149 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilder.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilder.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.core.ParseASTNode;
 
@@ -37,8 +38,7 @@ public final class ParseTreeCacheBuilder {
      * @param databaseType database type
      * @return built parse tree cache
      */
-    public static LoadingCache<String, ParseASTNode> build(final CacheOption 
option, final String databaseType) {
-        return 
Caffeine.newBuilder().softValues().initialCapacity(option.getInitialCapacity()).maximumSize(option.getMaximumSize())
-                .build(new ParseTreeCacheLoader(databaseType));
+    public static LoadingCache<String, ParseASTNode> build(final CacheOption 
option, final DatabaseType databaseType) {
+        return 
Caffeine.newBuilder().softValues().initialCapacity(option.getInitialCapacity()).maximumSize(option.getMaximumSize()).build(new
 ParseTreeCacheLoader(databaseType));
     }
 }
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoader.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoader.java
index 2725c3ac3ba..d82196d30a5 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoader.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoader.java
@@ -18,6 +18,7 @@
 package org.apache.shardingsphere.sql.parser.core.database.cache;
 
 import com.github.benmanes.caffeine.cache.CacheLoader;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import 
org.apache.shardingsphere.sql.parser.core.database.parser.SQLParserExecutor;
 
@@ -30,7 +31,7 @@ public final class ParseTreeCacheLoader implements 
CacheLoader<String, ParseASTN
     
     private final SQLParserExecutor sqlParserExecutor;
     
-    public ParseTreeCacheLoader(final String databaseType) {
+    public ParseTreeCacheLoader(final DatabaseType databaseType) {
         sqlParserExecutor = new SQLParserExecutor(databaseType);
     }
     
diff --git 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
index 6df24342f9f..3150d7784b6 100644
--- 
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
+++ 
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
@@ -22,7 +22,8 @@ import org.antlr.v4.runtime.Parser;
 import org.antlr.v4.runtime.atn.PredictionMode;
 import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.antlr.v4.runtime.tree.ErrorNode;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
+import 
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
 import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import org.apache.shardingsphere.sql.parser.core.SQLParserFactory;
@@ -35,7 +36,7 @@ import 
org.apache.shardingsphere.sql.parser.spi.SQLDialectParserFacade;
 @RequiredArgsConstructor
 public final class SQLParserExecutor {
     
-    private final String databaseType;
+    private final DatabaseType databaseType;
     
     /**
      * Parse SQL.
@@ -53,7 +54,7 @@ public final class SQLParserExecutor {
     }
     
     private ParseASTNode twoPhaseParse(final String sql) {
-        SQLDialectParserFacade sqlParserFacade = 
TypedSPILoader.getService(SQLDialectParserFacade.class, databaseType);
+        SQLDialectParserFacade sqlParserFacade = 
DatabaseTypedSPILoader.getService(SQLDialectParserFacade.class, databaseType);
         SQLParser sqlParser = SQLParserFactory.newInstance(sql, 
sqlParserFacade.getLexerClass(), sqlParserFacade.getParserClass());
         try {
             ((Parser) 
sqlParser).getInterpreter().setPredictionMode(PredictionMode.SLL);
diff --git 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserExecutorTest.java
 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserExecutorTest.java
index 7bae4f94456..b2c57761422 100644
--- 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserExecutorTest.java
+++ 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserExecutorTest.java
@@ -41,7 +41,7 @@ class SQLParserExecutorTest {
         SQLParserExecutor sqlParserExecutor = mock(SQLParserExecutor.class);
         
when(sqlParserExecutor.parse(SQL)).thenReturn(mock(ParseASTNode.class));
         CacheOption cacheOption = new CacheOption(128, 1024L);
-        SQLParserEngine sqlParserEngine = new SQLParserEngine("H2", 
cacheOption);
+        SQLParserEngine sqlParserEngine = new 
SQLParserEngine("PARSER.FIXTURE", cacheOption);
         
Plugins.getMemberAccessor().set(sqlParserEngine.getClass().getDeclaredField("sqlParserExecutor"),
 sqlParserEngine, sqlParserExecutor);
         LoadingCache<String, ParseASTNode> parseTreeCache = 
Caffeine.newBuilder().softValues().initialCapacity(128)
                 .maximumSize(1024).build(new CacheLoader<String, 
ParseASTNode>() {
diff --git 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilderTest.java
 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilderTest.java
index b18a40d5756..e2935705e98 100644
--- 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilderTest.java
+++ 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheBuilderTest.java
@@ -18,6 +18,8 @@
 package org.apache.shardingsphere.sql.parser.core.database.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.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import org.junit.jupiter.api.Test;
@@ -29,7 +31,7 @@ class ParseTreeCacheBuilderTest {
     
     @Test
     void assertParseTreeCacheBuild() {
-        LoadingCache<String, ParseASTNode> cache = 
ParseTreeCacheBuilder.build(new CacheOption(1, 10), "MySQL");
+        LoadingCache<String, ParseASTNode> cache = 
ParseTreeCacheBuilder.build(new CacheOption(1, 10), 
TypedSPILoader.getService(DatabaseType.class, "PARSER.FIXTURE"));
         assertThat(cache, isA(LoadingCache.class));
     }
 }
diff --git 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
index bda32f9461d..934c4585bc4 100644
--- 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
+++ 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/cache/ParseTreeCacheLoaderTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.shardingsphere.sql.parser.core.database.cache;
 
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
+import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
 import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
 import 
org.apache.shardingsphere.sql.parser.core.database.parser.SQLParserExecutor;
 import org.junit.jupiter.api.Test;
@@ -34,7 +36,7 @@ class ParseTreeCacheLoaderTest {
     @Test
     void assertParseTreeCacheLoader() throws ReflectiveOperationException {
         SQLParserExecutor sqlParserExecutor = mock(SQLParserExecutor.class, 
RETURNS_DEEP_STUBS);
-        ParseTreeCacheLoader loader = new ParseTreeCacheLoader("MySQL");
+        ParseTreeCacheLoader loader = new 
ParseTreeCacheLoader(TypedSPILoader.getService(DatabaseType.class, 
"PARSER.FIXTURE"));
         
Plugins.getMemberAccessor().set(loader.getClass().getDeclaredField("sqlParserExecutor"),
 loader, sqlParserExecutor);
         assertThat(loader.load(SQL), isA(ParseASTNode.class));
     }
diff --git 
a/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/fixture/ParserDatabaseTypeFixture.java
 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/fixture/ParserDatabaseTypeFixture.java
new file mode 100644
index 00000000000..48b53cfa350
--- /dev/null
+++ 
b/parser/sql/engine/src/test/java/org/apache/shardingsphere/sql/parser/core/database/fixture/ParserDatabaseTypeFixture.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.sql.parser.core.database.fixture;
+
+import org.apache.shardingsphere.infra.database.spi.DataSourceMetaData;
+import org.apache.shardingsphere.infra.database.spi.DatabaseType;
+import org.apache.shardingsphere.infra.util.quote.QuoteCharacter;
+
+import java.util.Collection;
+import java.util.Map;
+
+public final class ParserDatabaseTypeFixture implements DatabaseType {
+    
+    @Override
+    public QuoteCharacter getQuoteCharacter() {
+        return null;
+    }
+    
+    @Override
+    public Collection<String> getJdbcUrlPrefixes() {
+        return null;
+    }
+    
+    @Override
+    public DataSourceMetaData getDataSourceMetaData(final String url, final 
String username) {
+        return null;
+    }
+    
+    @Override
+    public Map<String, Collection<String>> getSystemDatabaseSchemaMap() {
+        return null;
+    }
+    
+    @Override
+    public Collection<String> getSystemSchemas() {
+        return null;
+    }
+    
+    @Override
+    public String getType() {
+        return "PARSER.FIXTURE";
+    }
+}
diff --git 
a/parser/sql/engine/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.spi.DatabaseType
 
b/parser/sql/engine/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.spi.DatabaseType
new file mode 100644
index 00000000000..896a5c73cd6
--- /dev/null
+++ 
b/parser/sql/engine/src/test/resources/META-INF/services/org.apache.shardingsphere.infra.database.spi.DatabaseType
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+org.apache.shardingsphere.sql.parser.core.database.fixture.ParserDatabaseTypeFixture
diff --git a/parser/sql/spi/pom.xml b/parser/sql/spi/pom.xml
index d70b1af4e9c..ebd6e296002 100644
--- a/parser/sql/spi/pom.xml
+++ b/parser/sql/spi/pom.xml
@@ -32,6 +32,11 @@
             <artifactId>shardingsphere-infra-util</artifactId>
             <version>${project.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-infra-database-core</artifactId>
+            <version>${project.version}</version>
+        </dependency>
         
         <dependency>
             <groupId>org.antlr</groupId>
diff --git 
a/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLDialectParserFacade.java
 
b/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLDialectParserFacade.java
index ca2795e1d89..979b0bc0cca 100644
--- 
a/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLDialectParserFacade.java
+++ 
b/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLDialectParserFacade.java
@@ -17,11 +17,12 @@
 
 package org.apache.shardingsphere.sql.parser.spi;
 
+import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
 import org.apache.shardingsphere.infra.util.spi.annotation.SingletonSPI;
 
 /**
  * Database type based SQL parser facade.
  */
 @SingletonSPI
-public interface SQLDialectParserFacade extends SQLParserFacade {
+public interface SQLDialectParserFacade extends SQLParserFacade, 
DatabaseTypedSPI {
 }

Reply via email to