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);
         }