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/28 13:36:36 UTC
[shardingsphere] branch master updated: Redesign SQL parser and
visitor API (#7946)
This is an automated email from the ASF dual-hosted git repository.
zhangyonglun 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 ead87d4 Redesign SQL parser and visitor API (#7946)
ead87d4 is described below
commit ead87d484543d56a7ceb70ad744a3980baa4f59e
Author: Liang Zhang <te...@163.com>
AuthorDate: Wed Oct 28 21:31:42 2020 +0800
Redesign SQL parser and visitor API (#7946)
* Refactor SQLParserFactory
* Refactor SQLParserFactory
* Refactor SQLParserFactory
* Refactor SQLParserExecutor
* Move SQLParserFacadeRegistry to parser package
* Merge SQLStatementVisitorFactory and SQLFormatVisitorFactory
* Add generic on SQLVisitorFactory
* Refactor StandardSQLStatementParserEngineFactory
* Move SQLParserEngine inside core package
* Add SQLVisitorEngineFactory
* Add generic type for SQLVisitorEngineFactory
* Revert invalid changes
---
.../engine/executor/RDLSQLParserExecutor.java | 2 +-
.../parser/sql/parser/ShardingSphereParser.java | 2 +-
.../sql/parser/mysql/parser/MySQLParser.java | 2 +-
.../sql/parser/oracle/parser/OracleParser.java | 2 +-
.../parser/postgresql/parser/PostgreSQLParser.java | 2 +-
.../sql/parser/sql92/parser/SQL92Parser.java | 2 +-
.../parser/sqlserver/parser/SQLServerParser.java | 2 +-
.../{engine => api/parser}/SQLParserEngine.java | 42 +++++++++++---
.../parser}/SQLParserEngineFactory.java | 20 +++----
.../visitor/SQLVisitorEngine.java} | 28 +++++----
.../visitor/SQLVisitorEngineFactory.java} | 28 ++++-----
.../sql/parser/core/{ => parser}/ParseASTNode.java | 2 +-
.../sql/parser/core/parser/SQLParserExecutor.java | 66 ----------------------
.../core/{ => parser}/SQLParserFacadeRegistry.java | 2 +-
.../sql/parser/core/parser/SQLParserFactory.java | 27 ++++++---
.../core/visitor/SQLStatementVisitorFactory.java | 65 ---------------------
...tVisitorFactory.java => SQLVisitorFactory.java} | 23 ++++----
.../sql/parser/core/visitor/SQLVisitorRule.java | 36 ++++++------
.../standard/StandardSQLStatementParserEngine.java | 7 +--
.../StandardSQLStatementParserEngineFactory.java | 16 +++---
.../SQLParserEngineFactoryTest.java | 3 +-
21 files changed, 148 insertions(+), 231 deletions(-)
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/executor/RDLSQLParserExecutor.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/executor/RDLSQLParserExecutor.java
index 24643b5..1c44992 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/executor/RDLSQLParserExecutor.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/executor/RDLSQLParserExecutor.java
@@ -31,7 +31,7 @@ import org.antlr.v4.runtime.tree.ErrorNode;
import org.apache.shardingsphere.rdl.parser.autogen.ShardingSphereStatementLexer;
import org.apache.shardingsphere.rdl.parser.sql.parser.ShardingSphereParser;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
import java.nio.CharBuffer;
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/parser/ShardingSphereParser.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/parser/ShardingSphereParser.java
index 4b16ca1..2c3d3b7 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/parser/ShardingSphereParser.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-sql/src/main/java/org/apache/shardingsphere/rdl/parser/sql/parser/ShardingSphereParser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.rdl.parser.autogen.ShardingSphereStatementParser;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for RDL.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParser.java
index b3b8f63..523e66e 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/parser/MySQLParser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
import org.apache.shardingsphere.sql.parser.autogen.MySQLStatementParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for MySQL.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParser.java
index 990f88c..35b5ecb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-oracle/src/main/java/org/apache/shardingsphere/sql/parser/oracle/parser/OracleParser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
import org.apache.shardingsphere.sql.parser.autogen.OracleStatementParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for Oracle.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParser.java
index 10f9250..f471186 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/parser/PostgreSQLParser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
import org.apache.shardingsphere.sql.parser.autogen.PostgreSQLStatementParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for PostgreSQL.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92Parser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92Parser.java
index dfa421d..b8d3585 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92Parser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sql92/src/main/java/org/apache/shardingsphere/sql/parser/sql92/parser/SQL92Parser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
import org.apache.shardingsphere.sql.parser.autogen.SQL92StatementParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for SQL92.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParser.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParser.java
index 1b7eef1..ed80c18 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParser.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-sqlserver/src/main/java/org/apache/shardingsphere/sql/parser/sqlserver/parser/SQLServerParser.java
@@ -21,7 +21,7 @@ import org.antlr.v4.runtime.TokenStream;
import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
import org.apache.shardingsphere.sql.parser.autogen.SQLServerStatementParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
+import org.apache.shardingsphere.sql.parser.core.parser.ParseASTNode;
/**
* SQL parser for SQLServer.
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngine.java
similarity index 53%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngine.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngine.java
index 567a628..9a159fc 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngine.java
@@ -15,12 +15,19 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine;
+package org.apache.shardingsphere.sql.parser.api.parser;
import lombok.RequiredArgsConstructor;
+import org.antlr.v4.runtime.BailErrorStrategy;
+import org.antlr.v4.runtime.Parser;
+import org.antlr.v4.runtime.atn.PredictionMode;
+import org.antlr.v4.runtime.misc.ParseCancellationException;
+import org.antlr.v4.runtime.tree.ErrorNode;
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.shardingsphere.sql.parser.cache.SQLParsedResultCache;
-import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
+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 java.util.Optional;
@@ -30,13 +37,13 @@ import java.util.Optional;
@RequiredArgsConstructor
public final class SQLParserEngine {
- private final String databaseTypeName;
+ private final String databaseType;
private final SQLParsedResultCache<ParseTree> cache = new SQLParsedResultCache<>();
/**
- * Parse SQL.
- *
+ * Parse.
+ *
* @param sql SQL to be parsed
* @param useCache whether use cache
* @return parse tree
@@ -49,12 +56,33 @@ public final class SQLParserEngine {
if (parseTree.isPresent()) {
return parseTree.get();
}
- ParseTree result = new SQLParserExecutor(databaseTypeName, sql).execute().getRootNode();
+ ParseTree result = parse(sql);
cache.put(sql, result);
return result;
}
private ParseTree parse(final String sql) {
- return new SQLParserExecutor(databaseTypeName, sql).execute().getRootNode();
+ ParseASTNode result = twoPhaseParse(sql);
+ if (result.getRootNode() instanceof ErrorNode) {
+ throw new SQLParsingException(String.format("Unsupported SQL of `%s`", sql));
+ }
+ return result.getRootNode();
+ }
+
+ private ParseASTNode twoPhaseParse(final String sql) {
+ SQLParser sqlParser = SQLParserFactory.newInstance(databaseType, sql);
+ try {
+ setPredictionMode((Parser) sqlParser, PredictionMode.SLL);
+ return (ParseASTNode) sqlParser.parse();
+ } catch (final ParseCancellationException ex) {
+ ((Parser) sqlParser).reset();
+ setPredictionMode((Parser) sqlParser, PredictionMode.LL);
+ return (ParseASTNode) sqlParser.parse();
+ }
+ }
+
+ private void setPredictionMode(final Parser sqlParser, final PredictionMode mode) {
+ sqlParser.setErrorHandler(new BailErrorStrategy());
+ sqlParser.getInterpreter().setPredictionMode(mode);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngineFactory.java
similarity index 78%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactory.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngineFactory.java
index 1571ba9..70e2203 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/parser/SQLParserEngineFactory.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine;
+package org.apache.shardingsphere.sql.parser.api.parser;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -33,20 +33,20 @@ public final class SQLParserEngineFactory {
/**
* Get SQL parser engine.
- *x
- * @param databaseTypeName name of database type
+ *
+ * @param databaseType database type
* @return SQL parser engine
*/
- public static SQLParserEngine getSQLParserEngine(final String databaseTypeName) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ public static SQLParserEngine getSQLParserEngine(final String databaseType) {
+ if (ENGINES.containsKey(databaseType)) {
+ return ENGINES.get(databaseType);
}
synchronized (ENGINES) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ if (ENGINES.containsKey(databaseType)) {
+ return ENGINES.get(databaseType);
}
- SQLParserEngine result = new SQLParserEngine(databaseTypeName);
- ENGINES.put(databaseTypeName, result);
+ SQLParserEngine result = new SQLParserEngine(databaseType);
+ ENGINES.put(databaseType, result);
return result;
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngine.java
similarity index 55%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngine.java
index 6f2772e..b488522 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngine.java
@@ -15,26 +15,34 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.core;
+package org.apache.shardingsphere.sql.parser.api.visitor;
import lombok.RequiredArgsConstructor;
import org.antlr.v4.runtime.tree.ParseTree;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorFactory;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorRule;
/**
- * Parse AST node.
+ * SQL visitor engnie.
+ *
+ * @param <T> type of return value
*/
@RequiredArgsConstructor
-public final class ParseASTNode implements ASTNode {
+public final class SQLVisitorEngine<T> {
- private final ParseTree parseTree;
+ private final String databaseType;
+
+ private final String visitorType;
/**
- * Get root node.
- *
- * @return root node
+ * Visit parse tree.
+ *
+ * @param parseTree parse tree
+ * @return visit result
*/
- public ParseTree getRootNode() {
- return parseTree.getChild(0);
+ public T visit(final ParseTree parseTree) {
+ ParseTreeVisitor<T> visitor = SQLVisitorFactory.newInstance(databaseType, visitorType, SQLVisitorRule.valueOf(parseTree.getClass()));
+ return parseTree.accept(visitor);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngineFactory.java
similarity index 57%
copy from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
copy to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngineFactory.java
index 6f2772e..c30f3df 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/api/visitor/SQLVisitorEngineFactory.java
@@ -15,26 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.core;
+package org.apache.shardingsphere.sql.parser.api.visitor;
-import lombok.RequiredArgsConstructor;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.apache.shardingsphere.sql.parser.api.visitor.ASTNode;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
/**
- * Parse AST node.
+ * SQL visitor engine factory.
*/
-@RequiredArgsConstructor
-public final class ParseASTNode implements ASTNode {
-
- private final ParseTree parseTree;
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
+public final class SQLVisitorEngineFactory {
/**
- * Get root node.
- *
- * @return root node
+ * Get SQL visitor engine.
+ *
+ * @param databaseType database type
+ * @param visitorType visitor type
+ * @param <T> type of visitor result
+ * @return SQL visitor engine
*/
- public ParseTree getRootNode() {
- return parseTree.getChild(0);
+ public static <T> SQLVisitorEngine<T> getSQLVisitorEngine(final String databaseType, final String visitorType) {
+ return new SQLVisitorEngine<>(databaseType, visitorType);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/ParseASTNode.java
similarity index 95%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/ParseASTNode.java
index 6f2772e..9da8f77 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/ParseASTNode.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/ParseASTNode.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.core;
+package org.apache.shardingsphere.sql.parser.core.parser;
import lombok.RequiredArgsConstructor;
import org.antlr.v4.runtime.tree.ParseTree;
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
deleted file mode 100644
index b64d92a..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserExecutor.java
+++ /dev/null
@@ -1,66 +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.parser;
-
-import lombok.RequiredArgsConstructor;
-import org.antlr.v4.runtime.BailErrorStrategy;
-import org.antlr.v4.runtime.Parser;
-import org.antlr.v4.runtime.atn.PredictionMode;
-import org.antlr.v4.runtime.misc.ParseCancellationException;
-import org.antlr.v4.runtime.tree.ErrorNode;
-import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-import org.apache.shardingsphere.sql.parser.core.ParseASTNode;
-import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
-
-/**
- * SQL parser executor.
- */
-@RequiredArgsConstructor
-public final class SQLParserExecutor {
-
- private final String databaseTypeName;
-
- private final String sql;
-
- /**
- * Execute to parse SQL.
- *
- * @return AST node
- */
- public ParseASTNode execute() {
- ParseASTNode result = twoPhaseParse();
- if (result.getRootNode() instanceof ErrorNode) {
- throw new SQLParsingException(String.format("Unsupported SQL of `%s`", sql));
- }
- return result;
- }
-
- private ParseASTNode twoPhaseParse() {
- SQLParser sqlParser = SQLParserFactory.newInstance(databaseTypeName, sql);
- try {
- ((Parser) sqlParser).setErrorHandler(new BailErrorStrategy());
- ((Parser) sqlParser).getInterpreter().setPredictionMode(PredictionMode.SLL);
- return (ParseASTNode) sqlParser.parse();
- } catch (final ParseCancellationException ex) {
- ((Parser) sqlParser).reset();
- ((Parser) sqlParser).setErrorHandler(new BailErrorStrategy());
- ((Parser) sqlParser).getInterpreter().setPredictionMode(PredictionMode.LL);
- return (ParseASTNode) sqlParser.parse();
- }
- }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/SQLParserFacadeRegistry.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
similarity index 97%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/SQLParserFacadeRegistry.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
index 126c356..ca957f5 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/SQLParserFacadeRegistry.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/parser/SQLParserFacadeRegistry.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.core;
+package org.apache.shardingsphere.sql.parser.core.parser;
import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
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 6a4b987..9b838e2 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
@@ -26,8 +26,8 @@ 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.sql.parser.api.lexer.SQLLexer;
import org.apache.shardingsphere.sql.parser.api.parser.SQLParser;
-import org.apache.shardingsphere.sql.parser.core.SQLParserFacadeRegistry;
import org.apache.shardingsphere.sql.parser.spi.SQLParserFacade;
import java.nio.CharBuffer;
@@ -38,22 +38,31 @@ import java.nio.CharBuffer;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SQLParserFactory {
- /**
+ /**
* New instance of SQL parser.
*
- * @param databaseTypeName name of database type
+ * @param databaseType database type
* @param sql SQL
* @return SQL parser
*/
- public static SQLParser newInstance(final String databaseTypeName, final String sql) {
- return createSQLParser(sql, SQLParserFacadeRegistry.getInstance().getSQLParserFacade(databaseTypeName));
+ public static SQLParser newInstance(final String databaseType, final String sql) {
+ SQLParserFacade sqlParserFacade = SQLParserFacadeRegistry.getInstance().getSQLParserFacade(databaseType);
+ return createSQLParser(createTokenStream(sql, sqlParserFacade.getLexerClass()), sqlParserFacade.getParserClass());
}
@SneakyThrows(ReflectiveOperationException.class)
- private static SQLParser createSQLParser(final String sql, final SQLParserFacade config) {
+ 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()));
- CodePointCharStream codePointCharStream = CodePointCharStream.fromBuffer(buffer);
- Lexer lexer = (Lexer) config.getLexerClass().getConstructor(CharStream.class).newInstance(codePointCharStream);
- return config.getParserClass().getConstructor(TokenStream.class).newInstance(new CommonTokenStream(lexer));
+ return CodePointCharStream.fromBuffer(buffer);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLStatementVisitorFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLStatementVisitorFactory.java
deleted file mode 100644
index 5e53c58..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLStatementVisitorFactory.java
+++ /dev/null
@@ -1,65 +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.visitor;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.SneakyThrows;
-import org.antlr.v4.runtime.tree.ParseTreeVisitor;
-import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
-import org.apache.shardingsphere.sql.parser.spi.SQLVisitorFacade;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatementType;
-
-/**
- * SQL statement visitor factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SQLStatementVisitorFactory {
-
- /**
- * New instance of SQL statement visitor.
- *
- * @param databaseTypeName name of database type
- * @param sqlVisitorRule SQL visitor rule
- * @return parse tree visitor
- */
- public static ParseTreeVisitor newInstance(final String databaseTypeName, final SQLVisitorRule sqlVisitorRule) {
- SQLVisitorFacade facade = SQLVisitorFacadeRegistry.getInstance().getSQLVisitorFacade(databaseTypeName, "STATEMENT");
- return createParseTreeVisitor(facade, sqlVisitorRule.getType());
- }
-
- @SneakyThrows(ReflectiveOperationException.class)
- private static ParseTreeVisitor createParseTreeVisitor(final SQLVisitorFacade visitorFacade, final SQLStatementType type) {
- switch (type) {
- case DML:
- return (ParseTreeVisitor) visitorFacade.getDMLVisitorClass().getConstructor().newInstance();
- case DDL:
- return (ParseTreeVisitor) visitorFacade.getDDLVisitorClass().getConstructor().newInstance();
- case TCL:
- return (ParseTreeVisitor) visitorFacade.getTCLVisitorClass().getConstructor().newInstance();
- case DCL:
- return (ParseTreeVisitor) visitorFacade.getDCLVisitorClass().getConstructor().newInstance();
- case DAL:
- return (ParseTreeVisitor) visitorFacade.getDALVisitorClass().getConstructor().newInstance();
- case RL:
- return (ParseTreeVisitor) visitorFacade.getRLVisitorClass().getConstructor().newInstance();
- default:
- throw new SQLParsingException("Can not support SQL statement type: `%s`", type);
- }
- }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLFormatVisitorFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java
similarity index 77%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLFormatVisitorFactory.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java
index 5abcec8..8e7701f 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLFormatVisitorFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorFactory.java
@@ -26,25 +26,28 @@ import org.apache.shardingsphere.sql.parser.spi.SQLVisitorFacade;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatementType;
/**
- * SQL format visitor factory.
+ * SQL visitor factory.
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class SQLFormatVisitorFactory {
+public final class SQLVisitorFactory {
- /**
- * New instance of SQL format visitor.
+ /**
+ * New instance of SQL visitor.
*
- * @param databaseTypeName name of database type
- * @param sqlVisitorRule visitor rule
+ * @param databaseType database type
+ * @param visitorType SQL visitor type
+ * @param visitorRule SQL visitor rule
+ * @param <T> type of visitor result
* @return parse tree visitor
*/
- public static ParseTreeVisitor newInstance(final String databaseTypeName, final SQLVisitorRule sqlVisitorRule) {
- SQLVisitorFacade facade = SQLVisitorFacadeRegistry.getInstance().getSQLVisitorFacade(databaseTypeName, "FORMAT");
- return createParseTreeVisitor(facade, sqlVisitorRule.getType());
+ public static <T> ParseTreeVisitor<T> newInstance(final String databaseType, final String visitorType, final SQLVisitorRule visitorRule) {
+ SQLVisitorFacade facade = SQLVisitorFacadeRegistry.getInstance().getSQLVisitorFacade(databaseType, visitorType);
+ return createParseTreeVisitor(facade, visitorRule.getType());
}
+ @SuppressWarnings("unchecked")
@SneakyThrows(ReflectiveOperationException.class)
- private static ParseTreeVisitor createParseTreeVisitor(final SQLVisitorFacade visitorFacade, final SQLStatementType type) {
+ private static <T> ParseTreeVisitor<T> createParseTreeVisitor(final SQLVisitorFacade visitorFacade, final SQLStatementType type) {
switch (type) {
case DML:
return (ParseTreeVisitor) visitorFacade.getDMLVisitorClass().getConstructor().newInstance();
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorRule.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorRule.java
index 230903b..d0dcfeb 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorRule.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/core/visitor/SQLVisitorRule.java
@@ -51,47 +51,47 @@ public enum SQLVisitorRule {
ALTER_INDEX("AlterIndex", SQLStatementType.DDL),
DROP_INDEX("DropIndex", SQLStatementType.DDL),
-
+
CREATE_PROCEDURE("CreateProcedure", SQLStatementType.DDL),
-
+
ALTER_PROCEDURE("AlterProcedure", SQLStatementType.DDL),
-
+
DROP_PROCEDURE("DropProcedure", SQLStatementType.DDL),
-
+
CREATE_FUNCTION("CreateFunction", SQLStatementType.DDL),
-
+
ALTER_FUNCTION("AlterFunction", SQLStatementType.DDL),
-
+
DROP_FUNCTION("DropFunction", SQLStatementType.DDL),
-
+
CREATE_DATABASE("CreateDatabase", SQLStatementType.DDL),
ALTER_DATABASE("AlterDatabase", SQLStatementType.DDL),
-
+
DROP_DATABASE("DropDatabase", SQLStatementType.DDL),
-
+
CREATE_EVENT("CreateEvent", SQLStatementType.DDL),
-
+
ALTER_EVENT("AlterEvent", SQLStatementType.DDL),
DROP_EVENT("DropEvent", SQLStatementType.DDL),
-
+
ALTER_INSTANCE("AlterInstance", SQLStatementType.DDL),
-
+
CREATE_LOGFILE_GROUP("CreateLogfileGroup", SQLStatementType.DDL),
-
+
ALTER_LOGFILE_GROUP("AlterLogfileGroup", SQLStatementType.DDL),
-
+
DROP_LOGFILE_GROUP("DropLogfileGroup", SQLStatementType.DDL),
-
+
CREATE_SERVER("CreateServer", SQLStatementType.DDL),
ALTER_SERVER("AlterServer", SQLStatementType.DDL),
-
+
DROP_SERVER("DropServer", SQLStatementType.DDL),
-
+
CREATE_TRIGGER("CreateTrigger", SQLStatementType.DDL),
-
+
DROP_TRIGGER("DropTrigger", SQLStatementType.DDL),
CREATE_VIEW("CreateView", SQLStatementType.DDL),
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngine.java
index b3bda7d..664ad42 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngine.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngine.java
@@ -21,9 +21,9 @@ import lombok.RequiredArgsConstructor;
import org.antlr.v4.runtime.tree.ParseTree;
import org.antlr.v4.runtime.tree.ParseTreeVisitor;
import org.apache.shardingsphere.sql.parser.cache.SQLParsedResultCache;
-import org.apache.shardingsphere.sql.parser.core.visitor.SQLStatementVisitorFactory;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorFactory;
import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorRule;
-import org.apache.shardingsphere.sql.parser.engine.SQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.api.parser.SQLParserEngineFactory;
import org.apache.shardingsphere.sql.parser.hook.ParsingHookRegistry;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.statement.SQLStatementParserEngine;
@@ -76,10 +76,9 @@ public final class StandardSQLStatementParserEngine implements SQLStatementParse
return result;
}
- @SuppressWarnings("unchecked")
private SQLStatement parseSQLStatement(final String sql) {
ParseTree parseTree = SQLParserEngineFactory.getSQLParserEngine(databaseTypeName).parse(sql, false);
- ParseTreeVisitor<SQLStatement> visitor = SQLStatementVisitorFactory.newInstance(databaseTypeName, SQLVisitorRule.valueOf(parseTree.getClass()));
+ ParseTreeVisitor<SQLStatement> visitor = SQLVisitorFactory.newInstance(databaseTypeName, "STATEMENT", SQLVisitorRule.valueOf(parseTree.getClass()));
return parseTree.accept(visitor);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngineFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngineFactory.java
index 617800a..8c637a3 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngineFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/statement/standard/StandardSQLStatementParserEngineFactory.java
@@ -34,19 +34,19 @@ public final class StandardSQLStatementParserEngineFactory {
/**
* Get standard SQL statement parser engine.
*x
- * @param databaseTypeName name of database type
+ * @param databaseType name of database type
* @return standard SQL statement parser engine
*/
- public static StandardSQLStatementParserEngine getSQLStatementParserEngine(final String databaseTypeName) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ public static StandardSQLStatementParserEngine getSQLStatementParserEngine(final String databaseType) {
+ if (ENGINES.containsKey(databaseType)) {
+ return ENGINES.get(databaseType);
}
synchronized (ENGINES) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ if (ENGINES.containsKey(databaseType)) {
+ return ENGINES.get(databaseType);
}
- StandardSQLStatementParserEngine result = new StandardSQLStatementParserEngine(databaseTypeName);
- ENGINES.put(databaseTypeName, result);
+ StandardSQLStatementParserEngine result = new StandardSQLStatementParserEngine(databaseType);
+ ENGINES.put(databaseType, result);
return result;
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactoryTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineFactoryTest.java
similarity index 92%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactoryTest.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineFactoryTest.java
index 73dd287..1887e21 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/engine/SQLParserEngineFactoryTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/api/SQLParserEngineFactoryTest.java
@@ -15,8 +15,9 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine;
+package org.apache.shardingsphere.sql.parser.api;
+import org.apache.shardingsphere.sql.parser.api.parser.SQLParserEngineFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;