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

Reply via email to