You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2022/05/10 12:27:08 UTC
[shardingsphere] branch master updated: Use ShardingSphere SPI in SQLVisitorFacade (#17528)
This is an automated email from the ASF dual-hosted git repository.
zhonghongsheng 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 f9f1059554e Use ShardingSphere SPI in SQLVisitorFacade (#17528)
f9f1059554e is described below
commit f9f1059554e1e5ab92d465c06251ade7eadccd66
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue May 10 20:27:02 2022 +0800
Use ShardingSphere SPI in SQLVisitorFacade (#17528)
* Use ShardingSphere SPI in SQLVisitorFacade
* Update SQLParserFacade
---
.../spi/FeaturedDistSQLStatementParserFacade.java | 3 +-
.../database/visitor/SQLVisitorFacadeFactory.java | 46 +++++++++++++++
.../database/visitor/SQLVisitorFacadeRegistry.java | 68 ----------------------
.../core/database/visitor/SQLVisitorFactory.java | 2 +-
.../parser/spi/DatabaseTypedSQLParserFacade.java | 3 +-
.../sql/parser/spi/SQLParserFacade.java | 3 +-
.../sql/parser/spi/SQLVisitorFacade.java | 8 ++-
7 files changed, 58 insertions(+), 75 deletions(-)
diff --git a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/engine/spi/FeaturedDistSQLStatementParserFacade.java b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/engine/spi/FeaturedDistSQLStatementParserFacade.java
index 6ae9d56b7e3..0f85a731033 100644
--- a/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/engine/spi/FeaturedDistSQLStatementParserFacade.java
+++ b/shardingsphere-distsql/shardingsphere-distsql-parser/src/main/java/org/apache/shardingsphere/distsql/parser/engine/spi/FeaturedDistSQLStatementParserFacade.java
@@ -18,7 +18,6 @@
package org.apache.shardingsphere.distsql.parser.engine.spi;
import org.apache.shardingsphere.spi.annotation.SingletonSPI;
-import org.apache.shardingsphere.spi.type.typed.TypedSPI;
import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
@@ -26,7 +25,7 @@ import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
* Featured dist SQL statement parser facade.
*/
@SingletonSPI
-public interface FeaturedDistSQLStatementParserFacade extends SQLParserFacade, TypedSPI {
+public interface FeaturedDistSQLStatementParserFacade extends SQLParserFacade {
/**
* Get visitor class.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeFactory.java
new file mode 100644
index 00000000000..8bf0e1a043b
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeFactory.java
@@ -0,0 +1,46 @@
+/*
+ * 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.visitor;
+
+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.SQLVisitorFacade;
+
+/**
+ * SQL visitor facade factory.
+ */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLVisitorFacadeFactory {
+
+ static {
+ ShardingSphereServiceLoader.register(SQLVisitorFacade.class);
+ }
+
+ /**
+ * Get instance of visitor facade.
+ *
+ * @param databaseType database type
+ * @param visitorType visitor type
+ * @return instance of visitor facade
+ */
+ public static SQLVisitorFacade getInstance(final String databaseType, final String visitorType) {
+ return TypedSPIRegistry.getRegisteredService(SQLVisitorFacade.class, String.join(".", databaseType, visitorType));
+ }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeRegistry.java
deleted file mode 100644
index 0d8f1888645..00000000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFacadeRegistry.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.visitor;
-
-import org.apache.shardingsphere.sql.parser.spi.SQLVisitorFacade;
-
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.ServiceLoader;
-
-/**
- * SQL visitor facade registry.
- */
-public final class SQLVisitorFacadeRegistry {
-
- private static final SQLVisitorFacadeRegistry INSTANCE = new SQLVisitorFacadeRegistry();
-
- private final Map<String, SQLVisitorFacade> facades = new LinkedHashMap<>();
-
- private SQLVisitorFacadeRegistry() {
- for (SQLVisitorFacade each : ServiceLoader.load(SQLVisitorFacade.class)) {
- facades.put(getQualifiedType(each.getDatabaseType(), each.getVisitorType()), each);
- }
- }
-
- /**
- * Get instance.
- *
- * @return instance
- */
- public static SQLVisitorFacadeRegistry getInstance() {
- return INSTANCE;
- }
-
- /**
- * Get SQL visitor facade.
- *
- * @param databaseType database type
- * @param visitorType visitor type
- * @return SQL visitor facade
- */
- public SQLVisitorFacade getSQLVisitorFacade(final String databaseType, final String visitorType) {
- String qualifiedType = getQualifiedType(databaseType, visitorType);
- if (facades.containsKey(qualifiedType)) {
- return facades.get(qualifiedType);
- }
- throw new UnsupportedOperationException(String.format("Cannot support '%s' visitor with database '%s'", visitorType, databaseType));
- }
-
- private String getQualifiedType(final String databaseType, final String visitorType) {
- return String.join(".", databaseType, visitorType);
- }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
index bd376528aeb..ecf52e836ba 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/database/visitor/SQLVisitorFactory.java
@@ -44,7 +44,7 @@ public final class SQLVisitorFactory {
* @return parse tree visitor
*/
public static <T> ParseTreeVisitor<T> newInstance(final String databaseType, final String visitorType, final SQLVisitorRule visitorRule, final Properties props) {
- SQLVisitorFacade facade = SQLVisitorFacadeRegistry.getInstance().getSQLVisitorFacade(databaseType, visitorType);
+ SQLVisitorFacade facade = SQLVisitorFacadeFactory.getInstance(databaseType, visitorType);
return createParseTreeVisitor(facade, visitorRule.getType(), props);
}
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 bb37bdf1f86..d42dd32737d 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
@@ -18,11 +18,10 @@
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.
*/
@SingletonSPI
-public interface DatabaseTypedSQLParserFacade extends SQLParserFacade, TypedSPI {
+public interface DatabaseTypedSQLParserFacade extends SQLParserFacade {
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserFacade.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserFacade.java
index d11389f0ba2..9d167ca4100 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserFacade.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLParserFacade.java
@@ -17,13 +17,14 @@
package org.apache.shardingsphere.sql.parser.spi;
+import org.apache.shardingsphere.spi.type.typed.TypedSPI;
import org.apache.shardingsphere.sql.parser.api.parser.SQLLexer;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
/**
* SQL parser facade.
*/
-public interface SQLParserFacade {
+public interface SQLParserFacade extends TypedSPI {
/**
* Get SQL lexer class type.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLVisitorFacade.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLVisitorFacade.java
index a29c0e127c3..cb788b2b81a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLVisitorFacade.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-spi/src/main/java/org/apache/shardingsphere/sql/parser/spi/SQLVisitorFacade.java
@@ -17,12 +17,13 @@
package org.apache.shardingsphere.sql.parser.spi;
+import org.apache.shardingsphere.spi.type.typed.TypedSPI;
import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitor;
/**
* SQL visitor facade.
*/
-public interface SQLVisitorFacade {
+public interface SQLVisitorFacade extends TypedSPI {
/**
* Get database type.
@@ -79,4 +80,9 @@ public interface SQLVisitorFacade {
* @return RL visitor class
*/
Class<? extends SQLVisitor> getRLVisitorClass();
+
+ @Override
+ default String getType() {
+ return String.join(".", getDatabaseType(), getVisitorType());
+ }
}