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