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 2020/10/29 16:11:11 UTC
[shardingsphere] branch master updated: minor refactoring for
parser api (#7957)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 51a9284 minor refactoring for parser api (#7957)
51a9284 is described below
commit 51a92840810902efa7aaeebb9297d48c9f69b177
Author: kimmking <ki...@163.com>
AuthorDate: Fri Oct 30 00:10:45 2020 +0800
minor refactoring for parser api (#7957)
* minor refactoring
* update and merge
* fix exception
* clean codes
* polish codes
---
.../engine/executor/DistSQLParserExecutor.java | 2 +-
.../StandardSQLStatementParserEngineFactory.java | 12 +-----------
.../sql/parser/api/SQLParserEngine.java | 5 +----
.../sql/parser/core/parser/SQLParserExecutor.java | 20 ++++++++++++--------
.../parser/core/parser/SQLParserFacadeRegistry.java | 5 ++---
.../core/visitor/SQLVisitorFacadeRegistry.java | 5 ++---
.../sql/parser/hook/ParsingHookRegistry.java | 3 +--
7 files changed, 20 insertions(+), 32 deletions(-)
diff --git a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/engine/executor/DistSQLParserExecutor.java b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/engine/executor/DistSQLParserExecutor.java
index beac0b4..883f115 100644
--- a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/engine/executor/DistSQLParserExecutor.java
+++ b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/engine/executor/DistSQLParserExecutor.java
@@ -52,7 +52,7 @@ public final class DistSQLParserExecutor {
public ParseASTNode execute() {
ParseASTNode result = twoPhaseParse();
if (result.getRootNode() instanceof ErrorNode) {
- throw new SQLParsingException(String.format("Unsupported SQL of `%s`", sql));
+ throw new SQLParsingException("Unsupported SQL of `%s`", sql);
}
return result;
}
diff --git a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/standard/StandardSQLStatementParserEngineFactory.java b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/standard/StandardSQLStatementParserEngineFactory.java
index 2820b7e..941cf3f 100644
--- a/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/standard/StandardSQLStatementParserEngineFactory.java
+++ b/shardingsphere-infra/shardingsphere-infra-parser/src/main/java/org/apache/shardingsphere/infra/parser/standard/StandardSQLStatementParserEngineFactory.java
@@ -38,16 +38,6 @@ public final class StandardSQLStatementParserEngineFactory {
* @return standard SQL statement parser engine
*/
public static StandardSQLStatementParserEngine getSQLStatementParserEngine(final String databaseType) {
- if (ENGINES.containsKey(databaseType)) {
- return ENGINES.get(databaseType);
- }
- synchronized (ENGINES) {
- if (ENGINES.containsKey(databaseType)) {
- return ENGINES.get(databaseType);
- }
- StandardSQLStatementParserEngine result = new StandardSQLStatementParserEngine(databaseType);
- ENGINES.put(databaseType, result);
- return result;
- }
+ return ENGINES.containsKey(databaseType) ? ENGINES.get(databaseType) : ENGINES.computeIfAbsent(databaseType, StandardSQLStatementParserEngine::new);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
index d73a0e3..d851ea3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngine.java
@@ -65,9 +65,6 @@ public final class SQLParserEngine {
}
private static SQLParserExecutor getSQLParserExecutor(final String databaseType) {
- if (ENGINES.containsKey(databaseType)) {
- return ENGINES.get(databaseType);
- }
- return ENGINES.computeIfAbsent(databaseType, key -> new SQLParserExecutor(databaseType));
+ return ENGINES.containsKey(databaseType) ? ENGINES.get(databaseType) : ENGINES.computeIfAbsent(databaseType, SQLParserExecutor::new);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserExecutor.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserExecutor.java
index 35f2ce7..4b1f8d5 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserExecutor.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserExecutor.java
@@ -51,23 +51,27 @@ public final class SQLParserExecutor {
if (!useCache) {
return parse(sql);
}
- Optional<ParseTree> parseTree = cache.get(sql);
- if (parseTree.isPresent()) {
- return parseTree.get();
- }
- ParseTree result = parse(sql);
- cache.put(sql, result);
- return result;
+ return parseAndCacheParseTree(sql);
}
private ParseTree parse(final String sql) {
ParseASTNode result = twoPhaseParse(sql);
if (result.getRootNode() instanceof ErrorNode) {
- throw new SQLParsingException(String.format("Unsupported SQL of `%s`", sql));
+ throw new SQLParsingException("Unsupported SQL of `%s`", sql);
}
return result.getRootNode();
}
+ private ParseTree parseAndCacheParseTree(final String sql) {
+ Optional<ParseTree> parseTree = cache.get(sql);
+ if (parseTree.isPresent()) {
+ return parseTree.get();
+ }
+ ParseTree result = parse(sql);
+ cache.put(sql, result);
+ return result;
+ }
+
private ParseASTNode twoPhaseParse(final String sql) {
SQLParser sqlParser = SQLParserFactory.newInstance(databaseType, sql);
try {
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
index ca957f5..caff4d9 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sql.parser.core.parser;
import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ServiceLoader;
@@ -30,10 +30,9 @@ public final class SQLParserFacadeRegistry {
private static final SQLParserFacadeRegistry INSTANCE = new SQLParserFacadeRegistry();
- private final Map<String, SQLParserFacade> facades;
+ private final Map<String, SQLParserFacade> facades = new LinkedHashMap<>();
private SQLParserFacadeRegistry() {
- facades = new HashMap<>();
for (SQLParserFacade each : ServiceLoader.load(SQLParserFacade.class)) {
facades.put(each.getDatabaseType(), each);
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFacadeRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFacadeRegistry.java
index dc003fb..c4d4cc0 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFacadeRegistry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFacadeRegistry.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.sql.parser.core.visitor;
import org.apache.shardingsphere.sql.parser.spi.SQLVisitorFacade;
-import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ServiceLoader;
@@ -30,10 +30,9 @@ public final class SQLVisitorFacadeRegistry {
private static final SQLVisitorFacadeRegistry INSTANCE = new SQLVisitorFacadeRegistry();
- private final Map<String, SQLVisitorFacade> facades;
+ private final Map<String, SQLVisitorFacade> facades = new LinkedHashMap<>();
private SQLVisitorFacadeRegistry() {
- facades = new HashMap<>();
for (SQLVisitorFacade each : ServiceLoader.load(SQLVisitorFacade.class)) {
facades.put(getQualifiedType(each.getDatabaseType(), each.getVisitorType()), each);
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/hook/ParsingHookRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/hook/ParsingHookRegistry.java
index 7a536fc..bf33e87 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/hook/ParsingHookRegistry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/hook/ParsingHookRegistry.java
@@ -30,10 +30,9 @@ public final class ParsingHookRegistry {
private static final ParsingHookRegistry INSTANCE = new ParsingHookRegistry();
- private final Collection<ParsingHook> hooks;
+ private final Collection<ParsingHook> hooks = new LinkedList<>();
private ParsingHookRegistry() {
- hooks = new LinkedList<>();
for (ParsingHook each : ServiceLoader.load(ParsingHook.class)) {
hooks.add(each);
}