This is an automated email from the ASF dual-hosted git repository.
sunnianjun 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 b2c04321efc Refactor SQLFormatVisitor as DatabaseTypedSPI (#27326)
b2c04321efc is described below
commit b2c04321efc063dfa9ad808e07bef4a945ca095b
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jul 20 16:55:52 2023 +0800
Refactor SQLFormatVisitor as DatabaseTypedSPI (#27326)
* Refactor SQLFormatVisitor as DatabaseTypedSPI
* Refactor SQLFormatVisitor as DatabaseTypedSPI
* Refactor SQLFormatVisitor as DatabaseTypedSPI
---
.../database/core/spi/DatabaseTypedSPILoader.java | 34 ++++++++++++++++++++++
.../mysql/visitor/format/MySQLFormatVisitor.java | 2 +-
.../mysql/visitor/format/MySQLFormatVisitorIT.java | 4 ++-
.../sql/parser/api/SQLFormatEngine.java | 10 +++++--
.../api/visitor/format/SQLFormatVisitor.java | 4 +--
5 files changed, 48 insertions(+), 6 deletions(-)
diff --git
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/spi/DatabaseTypedSPILoader.java
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/spi/DatabaseTypedSPILoader.java
index 7164350d083..786af72c330 100644
---
a/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/spi/DatabaseTypedSPILoader.java
+++
b/infra/database/core/src/main/java/org/apache/shardingsphere/infra/database/core/spi/DatabaseTypedSPILoader.java
@@ -24,6 +24,7 @@ import
org.apache.shardingsphere.infra.util.spi.exception.ServiceProviderNotFoun
import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPILoader;
import java.util.Optional;
+import java.util.Properties;
/**
* Database typed SPI loader.
@@ -50,6 +51,26 @@ public final class DatabaseTypedSPILoader {
return result;
}
+ /**
+ * Find service.
+ *
+ * @param spiClass typed SPI class
+ * @param databaseType database type
+ * @param props properties
+ * @param <T> SPI class type
+ * @return found service
+ */
+ public static <T extends DatabaseTypedSPI> Optional<T> findService(final
Class<T> spiClass, final DatabaseType databaseType, final Properties props) {
+ Optional<T> result = TypedSPILoader.findService(spiClass,
databaseType, props);
+ if (result.isPresent()) {
+ return result;
+ }
+ if (databaseType.getTrunkDatabaseType().isPresent()) {
+ return TypedSPILoader.findService(spiClass,
databaseType.getTrunkDatabaseType().get(), props);
+ }
+ return result;
+ }
+
/**
* Get service.
*
@@ -61,4 +82,17 @@ public final class DatabaseTypedSPILoader {
public static <T extends DatabaseTypedSPI> T getService(final Class<T>
spiClass, final DatabaseType databaseType) {
return findService(spiClass, databaseType).orElseThrow(() -> new
ServiceProviderNotFoundServerException(spiClass, databaseType.getType()));
}
+
+ /**
+ * Get service.
+ *
+ * @param spiClass typed SPI class
+ * @param databaseType database type
+ * @param props properties
+ * @param <T> SPI class type
+ * @return found service
+ */
+ public static <T extends DatabaseTypedSPI> T getService(final Class<T>
spiClass, final DatabaseType databaseType, final Properties props) {
+ return findService(spiClass, databaseType, props).orElseThrow(() ->
new ServiceProviderNotFoundServerException(spiClass, databaseType.getType()));
+ }
}
diff --git
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
index 008f2846458..ebdab7c1e3d 100644
---
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
+++
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitor.java
@@ -849,7 +849,7 @@ public final class MySQLFormatVisitor extends
MySQLStatementBaseVisitor<String>
}
@Override
- public String getType() {
+ public String getDatabaseType() {
return "MySQL";
}
}
diff --git
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitorIT.java
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitorIT.java
index 13816a91d45..bbc99c15feb 100644
---
a/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitorIT.java
+++
b/parser/sql/dialect/mysql/src/test/java/org/apache/shardingsphere/sql/parser/mysql/visitor/format/MySQLFormatVisitorIT.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sql.parser.mysql.visitor.format;
+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.SQLFormatEngine;
import org.apache.shardingsphere.test.util.PropertiesBuilder;
@@ -37,7 +39,7 @@ class MySQLFormatVisitorIT {
@ParameterizedTest(name = "{0}")
@ArgumentsSource(TestCaseArgumentsProvider.class)
void assertSQLFormat(final String caseId, final String inputSQL, final
String expectFormattedSQL, final String expectFormattedParameterizedSQL) {
- SQLFormatEngine sqlFormatEngine = new SQLFormatEngine("MySQL", new
CacheOption(1, 1L));
+ SQLFormatEngine sqlFormatEngine = new
SQLFormatEngine(TypedSPILoader.getService(DatabaseType.class, "MySQL"), new
CacheOption(1, 1L));
assertThat(sqlFormatEngine.format(inputSQL, false,
PropertiesBuilder.build(new Property("parameterized",
Boolean.FALSE.toString()))), is(expectFormattedSQL));
assertThat(sqlFormatEngine.format(inputSQL, false,
PropertiesBuilder.build(new Property("parameterized",
Boolean.TRUE.toString()))), is(expectFormattedParameterizedSQL));
}
diff --git
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLFormatEngine.java
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLFormatEngine.java
index d113a4c15de..1b894880bb9 100644
---
a/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLFormatEngine.java
+++
b/parser/sql/engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLFormatEngine.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.sql.parser.api;
import lombok.RequiredArgsConstructor;
import org.antlr.v4.runtime.tree.ParseTree;
+import
org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPILoader;
+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.visitor.format.SQLFormatVisitor;
@@ -30,10 +32,14 @@ import java.util.Properties;
@RequiredArgsConstructor
public final class SQLFormatEngine {
- private final String databaseType;
+ private final DatabaseType databaseType;
private final CacheOption cacheOption;
+ public SQLFormatEngine(final String databaseType, final CacheOption
cacheOption) {
+ this(TypedSPILoader.getService(DatabaseType.class, databaseType),
cacheOption);
+ }
+
/**
* Format SQL.
*
@@ -44,6 +50,6 @@ public final class SQLFormatEngine {
*/
public String format(final String sql, final boolean useCache, final
Properties props) {
ParseTree parseTree = new SQLParserEngine(databaseType,
cacheOption).parse(sql, useCache).getRootNode();
- return TypedSPILoader.getService(SQLFormatVisitor.class, databaseType,
props).visit(parseTree);
+ return DatabaseTypedSPILoader.getService(SQLFormatVisitor.class,
databaseType, props).visit(parseTree);
}
}
diff --git
a/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/format/SQLFormatVisitor.java
b/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/format/SQLFormatVisitor.java
index 19dc1791eb6..677ef08735c 100644
---
a/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/format/SQLFormatVisitor.java
+++
b/parser/sql/spi/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/format/SQLFormatVisitor.java
@@ -17,11 +17,11 @@
package org.apache.shardingsphere.sql.parser.api.visitor.format;
-import org.apache.shardingsphere.infra.util.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.infra.database.core.spi.DatabaseTypedSPI;
import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
/**
* SQL format visitor.
*/
-public interface SQLFormatVisitor extends SQLVisitor<String>, TypedSPI {
+public interface SQLFormatVisitor extends SQLVisitor<String>, DatabaseTypedSPI
{
}