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 {
}