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

duanzhengqiang 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 fb44a6edf22 Use ShardingSphere SPI in DatabaseTypedSQLParserFacade 
(#17527)
fb44a6edf22 is described below

commit fb44a6edf22098c016a732cb4f0997ed65669d8a
Author: Liang Zhang <zhangli...@apache.org>
AuthorDate: Tue May 10 20:01:48 2022 +0800

    Use ShardingSphere SPI in DatabaseTypedSQLParserFacade (#17527)
    
    * Use ShardingSphere SPI in DatabaseTypedSQLParserFacade
    
    * Use ShardingSphere SPI in DatabaseTypedSQLParserFacade
---
 .../shardingsphere-distsql-parser/pom.xml          |  5 -----
 .../sql/parser/mysql/parser/MySQLParserFacade.java |  2 +-
 .../opengauss/parser/OpenGaussParserFacade.java    |  2 +-
 .../parser/oracle/parser/OracleParserFacade.java   |  2 +-
 .../postgresql/parser/PostgreSQLParserFacade.java  |  2 +-
 .../sql/parser/sql92/parser/SQL92ParserFacade.java |  2 +-
 .../sqlserver/parser/SQLServerParserFacade.java    |  2 +-
 ...va => DatabaseTypedSQLParserFacadeFactory.java} | 26 ++++++++--------------
 .../core/database/parser/SQLParserExecutor.java    |  2 +-
 ...> DatabaseTypedSQLParserFacadeFactoryTest.java} | 14 ++++++------
 .../DatabaseTypedSQLParserFacadeFixture.java       |  2 +-
 .../shardingsphere-sql-parser-spi/pom.xml          |  8 +++++++
 .../parser/spi/DatabaseTypedSQLParserFacade.java   | 13 +++++------
 13 files changed, 37 insertions(+), 45 deletions(-)

diff --git a/shardingsphere-distsql/shardingsphere-distsql-parser/pom.xml 
b/shardingsphere-distsql/shardingsphere-distsql-parser/pom.xml
index ba0b74d9be8..32d35d2581b 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-parser/pom.xml
+++ b/shardingsphere-distsql/shardingsphere-distsql-parser/pom.xml
@@ -27,11 +27,6 @@
     <artifactId>shardingsphere-distsql-parser</artifactId>
     
     <dependencies>
-        <dependency>
-            <groupId>org.apache.shardingsphere</groupId>
-            <artifactId>shardingsphere-spi</artifactId>
-            <version>${project.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.apache.shardingsphere</groupId>
             <artifactId>shardingsphere-distsql-statement</artifactId>
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
index 5fe83d23024..a4c9bdd50bd 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParserFacade.java
@@ -37,7 +37,7 @@ public final class MySQLParserFacade implements 
DatabaseTypedSQLParserFacade {
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "MySQL";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
index 6a0b4ac0a2c..efb0939834e 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/parser/OpenGaussParserFacade.java
@@ -37,7 +37,7 @@ public final class OpenGaussParserFacade implements 
DatabaseTypedSQLParserFacade
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "openGauss";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
index a16e9b05753..dea7af21caa 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParserFacade.java
@@ -37,7 +37,7 @@ public final class OracleParserFacade implements 
DatabaseTypedSQLParserFacade {
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "Oracle";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
index 935835fb41a..346e1263ac6 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParserFacade.java
@@ -37,7 +37,7 @@ public final class PostgreSQLParserFacade implements 
DatabaseTypedSQLParserFacad
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "PostgreSQL";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
index 6f97580bb92..c6ee71ad2ca 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92ParserFacade.java
@@ -37,7 +37,7 @@ public final class SQL92ParserFacade implements 
DatabaseTypedSQLParserFacade {
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "SQL92";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
index b5f83315df8..dfe96805980 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParserFacade.java
@@ -37,7 +37,7 @@ public final class SQLServerParserFacade implements 
DatabaseTypedSQLParserFacade
     }
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "SQLServer";
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeRegistry.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeFactory.java
similarity index 57%
rename from 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeRegistry.java
rename to 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeFactory.java
index 6e870cac425..bda08ce431e 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeRegistry.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/DatabaseTypedSQLParserFacadeFactory.java
@@ -17,37 +17,29 @@
 
 package org.apache.shardingsphere.sql.parser.core.database.parser;
 
-import com.google.common.base.Preconditions;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
+import org.apache.shardingsphere.spi.type.typed.TypedSPIRegistry;
 import org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-
 /**
- * Database type based SQL parser facade registry.
+ * Database type based SQL parser facade factory.
  */
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DatabaseTypedSQLParserFacadeRegistry {
-    
-    private static final Map<String, DatabaseTypedSQLParserFacade> FACADES = 
new HashMap<>();
+public final class DatabaseTypedSQLParserFacadeFactory {
     
     static {
-        for (DatabaseTypedSQLParserFacade each : 
ServiceLoader.load(DatabaseTypedSQLParserFacade.class)) {
-            FACADES.put(each.getDatabaseType(), each);
-        }
+        
ShardingSphereServiceLoader.register(DatabaseTypedSQLParserFacade.class);
     }
     
     /**
-     * Get database type based SQL parser facade.
+     * Get instance of database type based SQL parser facade.
      * 
      * @param databaseType database type
-     * @return database type based SQL parser facade
+     * @return instance of database type based SQL parser facade
      */
-    public static DatabaseTypedSQLParserFacade getFacade(final String 
databaseType) {
-        Preconditions.checkArgument(FACADES.containsKey(databaseType), "Cannot 
support database type '%s'", databaseType);
-        return FACADES.get(databaseType);
+    public static DatabaseTypedSQLParserFacade getInstance(final String 
databaseType) {
+        return 
TypedSPIRegistry.getRegisteredService(DatabaseTypedSQLParserFacade.class, 
databaseType);
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
index 65134f32922..ce5e4cd67c6 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/parser/SQLParserExecutor.java
@@ -51,7 +51,7 @@ public final class SQLParserExecutor {
     }
     
     private ParseASTNode twoPhaseParse(final String sql) {
-        DatabaseTypedSQLParserFacade sqlParserFacade = 
DatabaseTypedSQLParserFacadeRegistry.getFacade(databaseType);
+        DatabaseTypedSQLParserFacade sqlParserFacade = 
DatabaseTypedSQLParserFacadeFactory.getInstance(databaseType);
         SQLParser sqlParser = SQLParserFactory.newInstance(sql, 
sqlParserFacade.getLexerClass(), sqlParserFacade.getParserClass());
         try {
             ((Parser) 
sqlParser).getInterpreter().setPredictionMode(PredictionMode.SLL);
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeRegistryTest.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeFactoryTest.java
similarity index 70%
rename from 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeRegistryTest.java
rename to 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeFactoryTest.java
index a6a7b09874b..8c64cca0de8 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeRegistryTest.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/core/DatabaseTypedSQLParserFacadeFactoryTest.java
@@ -17,7 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.core;
 
-import 
org.apache.shardingsphere.sql.parser.core.database.parser.DatabaseTypedSQLParserFacadeRegistry;
+import 
org.apache.shardingsphere.sql.parser.core.database.parser.DatabaseTypedSQLParserFacadeFactory;
 import 
org.apache.shardingsphere.sql.parser.fixture.DatabaseTypedSQLParserFacadeFixture;
 import org.apache.shardingsphere.sql.parser.fixture.LexerFixture;
 import org.apache.shardingsphere.sql.parser.fixture.ParserFixture;
@@ -28,14 +28,14 @@ import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
 
-public final class DatabaseTypedSQLParserFacadeRegistryTest {
+public final class DatabaseTypedSQLParserFacadeFactoryTest {
     
     @Test
     public void assertGetFacade() {
-        DatabaseTypedSQLParserFacade databaseTypedSQLParserFacade = 
DatabaseTypedSQLParserFacadeRegistry.getFacade("Fixture");
-        assertThat(databaseTypedSQLParserFacade.getClass(), 
equalTo(DatabaseTypedSQLParserFacadeFixture.class));
-        assertThat(databaseTypedSQLParserFacade.getLexerClass(), 
equalTo(LexerFixture.class));
-        assertThat(databaseTypedSQLParserFacade.getParserClass(), 
equalTo(ParserFixture.class));
-        assertThat(databaseTypedSQLParserFacade.getDatabaseType(), 
is("Fixture"));
+        DatabaseTypedSQLParserFacade actual = 
DatabaseTypedSQLParserFacadeFactory.getInstance("Fixture");
+        assertThat(actual.getClass(), 
equalTo(DatabaseTypedSQLParserFacadeFixture.class));
+        assertThat(actual.getLexerClass(), equalTo(LexerFixture.class));
+        assertThat(actual.getParserClass(), equalTo(ParserFixture.class));
+        assertThat(actual.getType(), is("Fixture"));
     }
 }
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/fixture/DatabaseTypedSQLParserFacadeFixture.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/fixture/DatabaseTypedSQLParserFacadeFixture.java
index cc5151b7173..868a297620c 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/fixture/DatabaseTypedSQLParserFacadeFixture.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/fixture/DatabaseTypedSQLParserFacadeFixture.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
 public final class DatabaseTypedSQLParserFacadeFixture implements 
DatabaseTypedSQLParserFacade {
     
     @Override
-    public String getDatabaseType() {
+    public String getType() {
         return "Fixture";
     }
     
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/pom.xml 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/pom.xml
index 2a8b442780d..16cb122e894 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/pom.xml
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/pom.xml
@@ -26,4 +26,12 @@
     </parent>
     <artifactId>shardingsphere-sql-parser-spi</artifactId>
     <name>${project.artifactId}</name>
+    
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.shardingsphere</groupId>
+            <artifactId>shardingsphere-spi</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+    </dependencies>
 </project>
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/DatabaseTypedSQLParserFacade.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/DatabaseTypedSQLParserFacade.java
index 55a82d29706..bb37bdf1f86 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/DatabaseTypedSQLParserFacade.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/DatabaseTypedSQLParserFacade.java
@@ -17,15 +17,12 @@
 
 package org.apache.shardingsphere.sql.parser.spi;
 
+import org.apache.shardingsphere.spi.annotation.SingletonSPI;
+import org.apache.shardingsphere.spi.type.typed.TypedSPI;
+
 /**
  * Database type based SQL parser facade.
  */
-public interface DatabaseTypedSQLParserFacade extends SQLParserFacade {
-    
-    /**
-     * Get database type.
-     *
-     * @return database type
-     */
-    String getDatabaseType();
+@SingletonSPI
+public interface DatabaseTypedSQLParserFacade extends SQLParserFacade, 
TypedSPI {
 }

Reply via email to