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 cf31162  Refactor SQLParserFactory to adapt SQL parser and Dist SQL 
parser (#10793)
cf31162 is described below

commit cf31162ea79e678ff1594201cae708a2cb03ebdf
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Jun 12 21:21:25 2021 +0800

    Refactor SQLParserFactory to adapt SQL parser and Dist SQL parser (#10793)
---
 .../parser/api/DistSQLStatementParserEngine.java   |  8 +--
 .../parser/core/{standard => }/DistSQLParser.java  |  2 +-
 .../core/{standard => }/DistSQLParserFactory.java  |  2 +-
 .../parser/core/{standard => }/DistSQLVisitor.java |  2 +-
 .../parser/core/rule/DistRuleSQLParserFactory.java | 67 ----------------------
 ...a => DatabaseTypedSQLParserFacadeRegistry.java} | 23 ++++----
 .../sql/parser/core/parser/SQLParserExecutor.java  |  4 +-
 .../sql/parser/core/parser/SQLParserFactory.java   | 14 ++---
 8 files changed, 25 insertions(+), 97 deletions(-)

diff --git 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngine.java
 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngine.java
index e55c34f..c373b58 100644
--- 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngine.java
+++ 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/api/DistSQLStatementParserEngine.java
@@ -19,12 +19,12 @@ package org.apache.shardingsphere.distsql.parser.api;
 
 import org.antlr.v4.runtime.misc.ParseCancellationException;
 import org.antlr.v4.runtime.tree.ErrorNode;
-import 
org.apache.shardingsphere.distsql.parser.core.rule.DistRuleSQLParserFactory;
-import 
org.apache.shardingsphere.distsql.parser.core.standard.DistSQLParserFactory;
-import org.apache.shardingsphere.distsql.parser.core.standard.DistSQLVisitor;
+import org.apache.shardingsphere.distsql.parser.core.DistSQLParserFactory;
+import org.apache.shardingsphere.distsql.parser.core.DistSQLVisitor;
 import 
org.apache.shardingsphere.distsql.parser.spi.FeatureTypedSQLParserFacade;
 import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
 import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.SQLParserFactory;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
@@ -76,7 +76,7 @@ public final class DistSQLStatementParserEngine {
     private ParseASTNode parseFromRuleParsers(final String sql) {
         for (FeatureTypedSQLParserFacade each : RULE_PARSER_FACADES) {
             try {
-                return (ParseASTNode) 
DistRuleSQLParserFactory.newInstance(sql, each).parse();
+                return (ParseASTNode) SQLParserFactory.newInstance(sql, 
each.getLexerClass(), each.getParserClass()).parse();
             } catch (final ParseCancellationException ignored) {
             }
         }
diff --git 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParser.java
 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParser.java
similarity index 95%
rename from 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParser.java
rename to 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParser.java
index 29429ff..00e6c47 100644
--- 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParser.java
+++ 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParser.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.core.standard;
+package org.apache.shardingsphere.distsql.parser.core;
 
 import org.antlr.v4.runtime.TokenStream;
 import org.apache.shardingsphere.distsql.parser.autogen.DistSQLStatementParser;
diff --git 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParserFactory.java
 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParserFactory.java
similarity index 97%
rename from 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParserFactory.java
rename to 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParserFactory.java
index 903fdd6..3a59173 100644
--- 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLParserFactory.java
+++ 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLParserFactory.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.core.standard;
+package org.apache.shardingsphere.distsql.parser.core;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
diff --git 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLVisitor.java
 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
similarity index 99%
rename from 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLVisitor.java
rename to 
shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
index 931071d..de7623d 100644
--- 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/standard/DistSQLVisitor.java
+++ 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/DistSQLVisitor.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package org.apache.shardingsphere.distsql.parser.core.standard;
+package org.apache.shardingsphere.distsql.parser.core;
 
 import com.google.common.base.Joiner;
 import org.antlr.v4.runtime.tree.ParseTree;
diff --git 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/rule/DistRuleSQLParserFactory.java
 
b/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/rule/DistRuleSQLParserFactory.java
deleted file mode 100644
index b6ab976..0000000
--- 
a/shardingsphere-distsql-parser/shardingsphere-distsql-parser-engine/src/main/java/org/apache/shardingsphere/distsql/parser/core/rule/DistRuleSQLParserFactory.java
+++ /dev/null
@@ -1,67 +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.distsql.parser.core.rule;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.SneakyThrows;
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.CodePointBuffer;
-import org.antlr.v4.runtime.CodePointCharStream;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.Lexer;
-import org.antlr.v4.runtime.TokenStream;
-import 
org.apache.shardingsphere.distsql.parser.spi.FeatureTypedSQLParserFacade;
-import org.apache.shardingsphere.sql.parser.api.parser.SQLLexer;
-import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-
-import java.nio.CharBuffer;
-
-/**
- * Dist rule SQL parser factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class DistRuleSQLParserFactory {
-    
-    /**
-     * New instance of SQL parser.
-     * 
-     * @param facade dist rule SQL parser facade
-     * @param sql SQL
-     * @return SQL parser
-     */
-    public static SQLParser newInstance(final String sql, final 
FeatureTypedSQLParserFacade facade) {
-        return createSQLParser(createTokenStream(sql, facade.getLexerClass()), 
facade.getParserClass());
-    }
-    
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static SQLParser createSQLParser(final TokenStream tokenStream, 
final Class<? extends SQLParser> parserClass) {
-        return 
parserClass.getConstructor(TokenStream.class).newInstance(tokenStream);
-    }
-    
-    @SneakyThrows(ReflectiveOperationException.class)
-    private static TokenStream createTokenStream(final String sql, final 
Class<? extends SQLLexer> lexerClass) {
-        Lexer lexer = (Lexer) 
lexerClass.getConstructor(CharStream.class).newInstance(getSQLCharStream(sql));
-        return new CommonTokenStream(lexer);
-    }
-    
-    private static CharStream getSQLCharStream(final String sql) {
-        CodePointBuffer buffer = 
CodePointBuffer.withChars(CharBuffer.wrap(sql.toCharArray()));
-        return CodePointCharStream.fromBuffer(buffer);
-    }
-}
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/DatabaseTypedSQLParserFacadeRegistry.java
similarity index 66%
rename from 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
rename to 
shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/DatabaseTypedSQLParserFacadeRegistry.java
index 0d14cb3..d122577 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/DatabaseTypedSQLParserFacadeRegistry.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.sql.parser.core.parser;
 
+import com.google.common.base.Preconditions;
 import org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
 
 import java.util.LinkedHashMap;
@@ -24,15 +25,15 @@ import java.util.Map;
 import java.util.ServiceLoader;
 
 /**
- * SQL parser facade registry.
+ * Database type based SQL parser facade registry.
  */
-public final class SQLParserFacadeRegistry {
+public final class DatabaseTypedSQLParserFacadeRegistry {
     
-    private static final SQLParserFacadeRegistry INSTANCE = new 
SQLParserFacadeRegistry();
+    private static final DatabaseTypedSQLParserFacadeRegistry INSTANCE = new 
DatabaseTypedSQLParserFacadeRegistry();
     
     private final Map<String, DatabaseTypedSQLParserFacade> facades = new 
LinkedHashMap<>();
     
-    private SQLParserFacadeRegistry() {
+    private DatabaseTypedSQLParserFacadeRegistry() {
         for (DatabaseTypedSQLParserFacade each : 
ServiceLoader.load(DatabaseTypedSQLParserFacade.class)) {
             facades.put(each.getDatabaseType(), each);
         }
@@ -43,20 +44,18 @@ public final class SQLParserFacadeRegistry {
      *
      * @return instance
      */
-    public static SQLParserFacadeRegistry getInstance() {
+    public static DatabaseTypedSQLParserFacadeRegistry getInstance() {
         return INSTANCE;
     }
     
     /**
-     * Get SQL parser facade.
+     * Get database type based SQL parser facade.
      * 
      * @param databaseType database type
-     * @return SQL parser facade
+     * @return database type based SQL parser facade
      */
-    public DatabaseTypedSQLParserFacade getSQLParserFacade(final String 
databaseType) {
-        if (facades.containsKey(databaseType)) {
-            return facades.get(databaseType);
-        }
-        throw new UnsupportedOperationException(String.format("Cannot support 
database type '%s'", databaseType));
+    public 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 fa5fbfa..4ef18c6 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
@@ -26,6 +26,7 @@ import org.antlr.v4.runtime.tree.ErrorNode;
 import org.antlr.v4.runtime.tree.ParseTree;
 import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
 import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
+import org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
 
 /**
  * SQL parser executor.
@@ -50,7 +51,8 @@ public final class SQLParserExecutor {
     }
     
     private ParseASTNode twoPhaseParse(final String sql) {
-        SQLParser sqlParser = SQLParserFactory.newInstance(databaseType, sql);
+        DatabaseTypedSQLParserFacade sqlParserFacade = 
DatabaseTypedSQLParserFacadeRegistry.getInstance().getFacade(databaseType);
+        SQLParser sqlParser = SQLParserFactory.newInstance(sql, 
sqlParserFacade.getLexerClass(), sqlParserFacade.getParserClass());
         try {
             setPredictionMode((Parser) sqlParser, PredictionMode.SLL);
             return (ParseASTNode) sqlParser.parse();
diff --git 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFactory.java
 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFactory.java
index 205c775..01bfe26 100644
--- 
a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFactory.java
+++ 
b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFactory.java
@@ -28,8 +28,6 @@ import org.antlr.v4.runtime.Lexer;
 import org.antlr.v4.runtime.TokenStream;
 import org.apache.shardingsphere.sql.parser.api.parser.SQLLexer;
 import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-import org.apache.shardingsphere.sql.parser.spi.DatabaseTypedSQLParserFacade;
-import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
 
 import java.nio.CharBuffer;
 
@@ -42,17 +40,13 @@ public final class SQLParserFactory {
     /**
      * New instance of SQL parser.
      * 
-     * @param databaseType database type
      * @param sql SQL
+     * @param lexerClass lexer class
+     * @param parserClass parser class
      * @return SQL parser
      */
-    public static SQLParser newInstance(final String databaseType, final 
String sql) {
-        DatabaseTypedSQLParserFacade sqlParserFacade = 
SQLParserFacadeRegistry.getInstance().getSQLParserFacade(databaseType);
-        return createSQLParser(sql, sqlParserFacade);
-    }
-    
-    private static SQLParser createSQLParser(final String sql, final 
SQLParserFacade sqlParserFacade) {
-        return createSQLParser(createTokenStream(sql, 
sqlParserFacade.getLexerClass()), sqlParserFacade.getParserClass());
+    public static SQLParser newInstance(final String sql, final Class<? 
extends SQLLexer> lexerClass, final Class<? extends SQLParser> parserClass) {
+        return createSQLParser(createTokenStream(sql, lexerClass), 
parserClass);
     }
     
     @SneakyThrows(ReflectiveOperationException.class)

Reply via email to