You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2021/06/12 13:40:38 UTC

[shardingsphere] branch master updated: Use static instead of singleton for DatabaseTypedSQLParserFacadeRegistry (#10794)

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 4280ab0  Use static instead of singleton for DatabaseTypedSQLParserFacadeRegistry (#10794)
4280ab0 is described below

commit 4280ab0bff15f22133f7b0956288e93feb2c5d07
Author: Liang Zhang <te...@163.com>
AuthorDate: Sat Jun 12 21:39:53 2021 +0800

    Use static instead of singleton for DatabaseTypedSQLParserFacadeRegistry (#10794)
---
 .../sql/parser/api/SQLVisitorEngine.java           |  2 +-
 .../DatabaseTypedSQLParserFacadeRegistry.java      | 28 ++++++++--------------
 .../sql/parser/core/parser/SQLParserExecutor.java  |  2 +-
 3 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
index 6907cbc..026ec00 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/SQLVisitorEngine.java
@@ -34,7 +34,7 @@ public final class SQLVisitorEngine {
     private final String databaseType;
     
     private final String visitorType;
-
+    
     private final Properties props;
     
     /**
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/DatabaseTypedSQLParserFacadeRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/DatabaseTypedSQLParserFacadeRegistry.java
index d122577..38986f5 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/DatabaseTypedSQLParserFacadeRegistry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/DatabaseTypedSQLParserFacadeRegistry.java
@@ -18,44 +18,36 @@
 package org.apache.shardingsphere.sql.parser.core.parser;
 
 import com.google.common.base.Preconditions;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
 
-import java.util.LinkedHashMap;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.ServiceLoader;
 
 /**
  * Database type based SQL parser facade registry.
  */
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class DatabaseTypedSQLParserFacadeRegistry {
     
-    private static final DatabaseTypedSQLParserFacadeRegistry INSTANCE = new DatabaseTypedSQLParserFacadeRegistry();
+    private static final Map<String, DatabaseTypedSQLParserFacade> FACADES = new HashMap<>();
     
-    private final Map<String, DatabaseTypedSQLParserFacade> facades = new LinkedHashMap<>();
-    
-    private DatabaseTypedSQLParserFacadeRegistry() {
+    static {
         for (DatabaseTypedSQLParserFacade each : ServiceLoader.load(DatabaseTypedSQLParserFacade.class)) {
-            facades.put(each.getDatabaseType(), each);
+            FACADES.put(each.getDatabaseType(), each);
         }
     }
     
     /**
-     * Get instance.
-     *
-     * @return instance
-     */
-    public static DatabaseTypedSQLParserFacadeRegistry getInstance() {
-        return INSTANCE;
-    }
-    
-    /**
      * Get database type based SQL parser facade.
      * 
      * @param databaseType database type
      * @return database type based SQL parser facade
      */
-    public DatabaseTypedSQLParserFacade getFacade(final String databaseType) {
-        Preconditions.checkArgument(facades.containsKey(databaseType), "Cannot support database type '%s'", databaseType);
-        return facades.get(databaseType);
+    public static DatabaseTypedSQLParserFacade getFacade(final String databaseType) {
+        Preconditions.checkArgument(FACADES.containsKey(databaseType), "Cannot support database type '%s'", databaseType);
+        return FACADES.get(databaseType);
     }
 }
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 4ef18c6..3b109a4 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,7 +51,7 @@ public final class SQLParserExecutor {
     }
     
     private ParseASTNode twoPhaseParse(final String sql) {
-        DatabaseTypedSQLParserFacade sqlParserFacade = DatabaseTypedSQLParserFacadeRegistry.getInstance().getFacade(databaseType);
+        DatabaseTypedSQLParserFacade sqlParserFacade = DatabaseTypedSQLParserFacadeRegistry.getFacade(databaseType);
         SQLParser sqlParser = SQLParserFactory.newInstance(sql, sqlParserFacade.getLexerClass(), sqlParserFacade.getParserClass());
         try {
             setPredictionMode((Parser) sqlParser, PredictionMode.SLL);