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/26 08:19:16 UTC
[shardingsphere] branch master updated: Refactor
StandardSQLParserEngine and cacheEngine (#7914)
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 f6df19f Refactor StandardSQLParserEngine and cacheEngine (#7914)
f6df19f is described below
commit f6df19f78739ea12f50177a1f35c7f8b57e925d1
Author: Juan Pan(Trista) <pa...@apache.org>
AuthorDate: Mon Oct 26 16:18:47 2020 +0800
Refactor StandardSQLParserEngine and cacheEngine (#7914)
* Rename to getVisitorFacadeFactoryClass() in SQLParserConfiguration
* Refactor StandardSQLParserEngine and cacheEngine
* modify SQLParserEngine
* check style
* java doc
---
.../EncryptSQLRewriterParameterizedTest.java | 8 +-
.../MixSQLRewriterParameterizedTest.java | 12 +-
.../ShardingSQLRewriterParameterizedTest.java | 8 +-
.../engine/type/standard/AbstractSQLRouteTest.java | 6 +-
.../statement/ShardingSpherePreparedStatement.java | 2 +-
.../core/statement/ShardingSphereStatement.java | 2 +-
.../text/TextProtocolBackendHandlerFactory.java | 2 +-
.../explain/ShardingCTLExplainBackendHandler.java | 2 +-
.../execute/MySQLComStmtExecuteExecutor.java | 2 +-
.../prepare/MySQLComStmtPrepareExecutor.java | 2 +-
.../fieldlist/MySQLComFieldListPacketExecutor.java | 2 +-
.../binary/bind/PostgreSQLComBindExecutor.java | 2 +-
.../binary/parse/PostgreSQLComParseExecutor.java | 2 +-
.../engine/ShardingSphereSQLParserEngine.java | 14 +--
.../parser/engine/engine/RDLSQLParserEngine.java | 6 +-
.../{engine => cache}/SQLParsedResultCache.java | 2 +-
.../SQLParsedResultCaches.java} | 34 +++---
.../sql/parser/engine/SQLParserEngine.java | 14 ++-
.../sql/parser/engine/ast/ASTSQLParserEngine.java | 52 ---------
.../engine/standard/StandardSQLParserEngine.java | 126 +++++++++++++++++++++
.../standard/StandardSQLParserEngineFactory.java | 4 +-
.../engine/statement/StatementSQLParserEngine.java | 30 -----
.../standard/StandardSQLParserEngine.java | 82 --------------
.../sql/parser/SQLParseEngineFactoryTest.java | 2 +-
.../sql/parser/cache/SQLParsedResultCacheTest.java | 1 -
.../engine/SQLParserParameterizedTest.java | 4 +-
.../UnsupportedSQLParserParameterizedTest.java | 4 +-
27 files changed, 194 insertions(+), 233 deletions(-)
diff --git a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
index 3a24829..48e7926 100644
--- a/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
+++ b/shardingsphere-features/shardingsphere-encrypt/shardingsphere-encrypt-rewrite/src/test/java/org/apache/shardingsphere/encrypt/rewrite/parameterized/EncryptSQLRewriterParameterizedTest.java
@@ -44,8 +44,8 @@ import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.yaml.config.YamlRootRuleConfigurations;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngine;
import org.junit.runners.Parameterized.Parameters;
import java.io.File;
@@ -80,8 +80,8 @@ public final class EncryptSQLRewriterParameterizedTest extends AbstractSQLRewrit
StandardSQLParserEngineFactory.getSQLParserEngine(null == getTestParameters().getDatabaseType() ? "SQL92" : getTestParameters().getDatabaseType());
ShardingSphereMetaData metaData = createShardingSphereMetaData();
ConfigurationProperties props = new ConfigurationProperties(ruleConfigurations.getProps());
- SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(
- metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), getTestParameters().getInputParameters(), standardSqlParserEngine.parse(getTestParameters().getInputSQL(), false));
+ SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(metaData.getSchemaMetaData().getConfiguredSchemaMetaData(),
+ getTestParameters().getInputParameters(), standardSqlParserEngine.parseToSQLStatement(getTestParameters().getInputSQL(), false));
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
ShardingSphereSchema schema = new ShardingSphereSchema("sharding_db", Collections.emptyList(), rules, Collections.emptyMap(), metaData);
RouteContext routeContext = new SQLRouteEngine(props, rules).route(logicSQL, schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
index b0446df..078165e 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/MixSQLRewriterParameterizedTest.java
@@ -47,8 +47,8 @@ import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.yaml.config.YamlRootRuleConfigurations;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngine;
import org.junit.runners.Parameterized.Parameters;
import java.io.File;
@@ -83,12 +83,12 @@ public final class MixSQLRewriterParameterizedTest extends AbstractSQLRewriterPa
YamlRootRuleConfigurations ruleConfigurations = createRuleConfigurations();
Collection<ShardingSphereRule> rules = ShardingSphereRulesBuilder.build(
new YamlRuleConfigurationSwapperEngine().swapToRuleConfigurations(ruleConfigurations.getRules()), ruleConfigurations.getDataSources().keySet());
- StandardSQLParserEngine standardSqlParserEngine =
- StandardSQLParserEngineFactory.getSQLParserEngine(null == getTestParameters().getDatabaseType() ? "SQL92" : getTestParameters().getDatabaseType());
+ StandardSQLParserEngine standardSqlParserEngine = StandardSQLParserEngineFactory.getSQLParserEngine(null == getTestParameters().getDatabaseType()
+ ? "SQL92" : getTestParameters().getDatabaseType());
ShardingSphereMetaData metaData = createShardingSphereMetaData();
ConfigurationProperties props = new ConfigurationProperties(ruleConfigurations.getProps());
- SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(
- metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), getTestParameters().getInputParameters(), standardSqlParserEngine.parse(getTestParameters().getInputSQL(), false));
+ SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(metaData.getSchemaMetaData().getConfiguredSchemaMetaData(),
+ getTestParameters().getInputParameters(), standardSqlParserEngine.parseToSQLStatement(getTestParameters().getInputSQL(), false));
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
ShardingSphereSchema schema = new ShardingSphereSchema("sharding_db", Collections.emptyList(), rules, Collections.emptyMap(), metaData);
RouteContext routeContext = new SQLRouteEngine(props, rules).route(logicSQL, schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
index 9318096..21dedaa 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-rewrite/src/test/java/org/apache/shardingsphere/sharding/rewrite/parameterized/ShardingSQLRewriterParameterizedTest.java
@@ -47,8 +47,8 @@ import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.infra.yaml.config.YamlRootRuleConfigurations;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.infra.yaml.swapper.YamlRuleConfigurationSwapperEngine;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngine;
import org.junit.runners.Parameterized.Parameters;
import java.io.File;
@@ -87,8 +87,8 @@ public final class ShardingSQLRewriterParameterizedTest extends AbstractSQLRewri
StandardSQLParserEngineFactory.getSQLParserEngine(null == getTestParameters().getDatabaseType() ? "SQL92" : getTestParameters().getDatabaseType());
ShardingSphereMetaData metaData = createShardingSphereMetaData();
ConfigurationProperties props = new ConfigurationProperties(yamlRootRuleConfigs.getProps());
- SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(
- metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), getTestParameters().getInputParameters(), standardSqlParserEngine.parse(getTestParameters().getInputSQL(), false));
+ SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(metaData.getSchemaMetaData().getConfiguredSchemaMetaData(),
+ getTestParameters().getInputParameters(), standardSqlParserEngine.parseToSQLStatement(getTestParameters().getInputSQL(), false));
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, getTestParameters().getInputSQL(), getTestParameters().getInputParameters());
ShardingSphereSchema schema = new ShardingSphereSchema("sharding_db", Collections.emptyList(), rules, Collections.emptyMap(), metaData);
RouteContext routeContext = new SQLRouteEngine(props, rules).route(logicSQL, schema);
diff --git a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
index 686a677..9ba134d 100644
--- a/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
+++ b/shardingsphere-features/shardingsphere-sharding/shardingsphere-sharding-route/src/test/java/org/apache/shardingsphere/sharding/route/engine/type/standard/AbstractSQLRouteTest.java
@@ -36,8 +36,8 @@ import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
import org.apache.shardingsphere.infra.schema.ShardingSphereSchema;
import org.apache.shardingsphere.sharding.route.engine.fixture.AbstractRoutingEngineTest;
import org.apache.shardingsphere.sharding.rule.ShardingRule;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngine;
import java.sql.Types;
import java.util.Arrays;
@@ -60,7 +60,7 @@ public abstract class AbstractSQLRouteTest extends AbstractRoutingEngineTest {
ConfigurationProperties props = new ConfigurationProperties(new Properties());
StandardSQLParserEngine standardSqlParserEngine = StandardSQLParserEngineFactory.getSQLParserEngine("MySQL");
SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(
- metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), parameters, standardSqlParserEngine.parse(sql, false));
+ metaData.getSchemaMetaData().getConfiguredSchemaMetaData(), parameters, standardSqlParserEngine.parseToSQLStatement(sql, false));
LogicSQL logicSQL = new LogicSQL(sqlStatementContext, sql, parameters);
ShardingSphereSchema schema = new ShardingSphereSchema("sharding_db", Collections.emptyList(), Collections.singleton(shardingRule), Collections.emptyMap(), metaData);
RouteContext result = new SQLRouteEngine(props, Collections.singletonList(shardingRule)).route(logicSQL, schema);
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 4838d8c..a56abb5 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -139,7 +139,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
statements = new ArrayList<>();
parameterSets = new ArrayList<>();
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(schemaContexts.getDatabaseType()));
- sqlStatement = sqlParserEngine.parse(sql, true);
+ sqlStatement = sqlParserEngine.parseToSQLStatement(sql, true);
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
statementOption = returnGeneratedKeys ? new StatementOption(true) : new StatementOption(resultSetType, resultSetConcurrency, resultSetHoldability);
SQLExecutor sqlExecutor = new SQLExecutor(schemaContexts.getExecutorKernel(), connection.isHoldTransaction());
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index fb77574..2bf8e42 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -307,7 +307,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
private LogicSQL createLogicSQL(final String sql) {
PhysicalSchemaMetaData schemaMetaData = schemaContexts.getDefaultSchema().getMetaData().getSchemaMetaData().getSchemaMetaData();
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(DatabaseTypeRegistry.getTrunkDatabaseTypeName(schemaContexts.getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(sql, false);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(sql, false);
SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(schemaMetaData, Collections.emptyList(), sqlStatement);
return new LogicSQL(sqlStatementContext, sql, Collections.emptyList());
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
index 2d27657..f13ec99 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/TextProtocolBackendHandlerFactory.java
@@ -60,7 +60,7 @@ public final class TextProtocolBackendHandlerFactory {
if (trimSQL.toUpperCase().startsWith(ShardingCTLBackendHandlerFactory.SCTL)) {
return ShardingCTLBackendHandlerFactory.newInstance(trimSQL, backendConnection);
}
- SQLStatement sqlStatement = new ShardingSphereSQLParserEngine(databaseType.getName()).parse(sql, false);
+ SQLStatement sqlStatement = new ShardingSphereSQLParserEngine(databaseType.getName()).parseToSQLStatement(sql, false);
if (sqlStatement instanceof RDLStatement || sqlStatement instanceof CreateDatabaseStatement || sqlStatement instanceof DropDatabaseStatement) {
return new RDLBackendHandler(backendConnection, sqlStatement);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java
index 25d2b57..ea8df65 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/sctl/explain/ShardingCTLExplainBackendHandler.java
@@ -87,7 +87,7 @@ public final class ShardingCTLExplainBackendHandler implements TextProtocolBacke
PhysicalSchemaMetaData schemaMetaData = schema.getMetaData().getSchemaMetaData().getSchemaMetaData();
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(explainStatement.getSql(), false);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(explainStatement.getSql(), false);
SQLStatementContext<?> sqlStatementContext = SQLStatementContextFactory.newInstance(schemaMetaData, Collections.emptyList(), sqlStatement);
return new LogicSQL(sqlStatementContext, explainStatement.getSql(), Collections.emptyList());
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
index a610437..63abfdb 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutor.java
@@ -59,7 +59,7 @@ public final class MySQLComStmtExecuteExecutor implements QueryCommandExecutor {
public MySQLComStmtExecuteExecutor(final MySQLComStmtExecutePacket packet, final BackendConnection backendConnection) {
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(packet.getSql(), true);
databaseCommunicationEngine = DatabaseCommunicationEngineFactory.getInstance().newBinaryProtocolInstance(sqlStatement, packet.getSql(), packet.getParameters(), backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
index 2e1550b..ade45b7 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/prepare/MySQLComStmtPrepareExecutor.java
@@ -52,7 +52,7 @@ public final class MySQLComStmtPrepareExecutor implements CommandExecutor {
public Collection<DatabasePacket<?>> execute() {
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(packet.getSql(), true);
if (!MySQLComStmtPrepareChecker.isStatementAllowed(sqlStatement)) {
throw new UnsupportedPreparedStatementException();
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
index 8feb8a6..5cc28e4 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/fieldlist/MySQLComFieldListPacketExecutor.java
@@ -56,7 +56,7 @@ public final class MySQLComFieldListPacketExecutor implements CommandExecutor {
String sql = String.format(SQL, packet.getTable(), schemaName);
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(sql, false);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(sql, false);
databaseCommunicationEngine = DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(sqlStatement, sql, backendConnection);
}
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
index ed42fdc..f4762da 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/bind/PostgreSQLComBindExecutor.java
@@ -73,7 +73,7 @@ public final class PostgreSQLComBindExecutor implements QueryCommandExecutor {
if (null != packet.getSql() && null != schema) {
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(packet.getSql(), true);
databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance().newBinaryProtocolInstance(sqlStatement, packet.getSql(), packet.getParameters(), backendConnection);
} else {
diff --git a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java
index 9bcdb74..7530269 100644
--- a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java
+++ b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/binary/parse/PostgreSQLComParseExecutor.java
@@ -51,7 +51,7 @@ public final class PostgreSQLComParseExecutor implements CommandExecutor {
if (!packet.getSql().isEmpty()) {
ShardingSphereSQLParserEngine sqlParserEngine = new ShardingSphereSQLParserEngine(
DatabaseTypeRegistry.getTrunkDatabaseTypeName(ProxyContext.getInstance().getSchemaContexts().getDatabaseType()));
- SQLStatement sqlStatement = sqlParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserEngine.parseToSQLStatement(packet.getSql(), true);
binaryStatementRegistry.register(packet.getStatementId(), packet.getSql(), sqlStatement.getParameterCount(), packet.getBinaryStatementParameterTypes());
}
return Collections.singletonList(new PostgreSQLParseCompletePacket());
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/ShardingSphereSQLParserEngine.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/ShardingSphereSQLParserEngine.java
index f84cd29..a8d8dcf 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/ShardingSphereSQLParserEngine.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/ShardingSphereSQLParserEngine.java
@@ -18,15 +18,15 @@
package org.apache.shardingsphere.rdl.parser.engine;
import org.apache.shardingsphere.rdl.parser.engine.engine.RDLSQLParserEngine;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
-import org.apache.shardingsphere.sql.parser.engine.statement.StatementSQLParserEngine;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngine;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
/**
* Sharding sphere SQL parser engine.
*/
-public final class ShardingSphereSQLParserEngine implements StatementSQLParserEngine {
+public final class ShardingSphereSQLParserEngine implements SQLParserEngine {
private final StandardSQLParserEngine standardSqlParserEngine;
@@ -38,14 +38,14 @@ public final class ShardingSphereSQLParserEngine implements StatementSQLParserEn
}
@Override
- public SQLStatement parse(final String sql, final boolean useCache) {
+ public SQLStatement parseToSQLStatement(final String sql, final boolean useCache) {
SQLStatement result;
try {
- result = standardSqlParserEngine.parse(sql, useCache);
+ result = standardSqlParserEngine.parseToSQLStatement(sql, useCache);
// CHECKSTYLE:OFF
} catch (final Exception ex) {
// CHECKSTYLE:ON
- result = rdlsqlParserEngine.parse(sql, useCache);
+ result = rdlsqlParserEngine.parseToSQLStatement(sql, useCache);
}
return result;
}
diff --git a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/engine/RDLSQLParserEngine.java b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/engine/RDLSQLParserEngine.java
index 6294edf..a9359a2 100644
--- a/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/engine/RDLSQLParserEngine.java
+++ b/shardingsphere-rdl-parser/shardingsphere-rdl-parser-engine/src/main/java/org/apache/shardingsphere/rdl/parser/engine/engine/RDLSQLParserEngine.java
@@ -21,7 +21,7 @@ import lombok.RequiredArgsConstructor;
import org.antlr.v4.runtime.tree.ParseTree;
import org.apache.shardingsphere.rdl.parser.engine.executor.RDLSQLParserExecutor;
import org.apache.shardingsphere.rdl.parser.sql.visitor.ShardingSphereVisitor;
-import org.apache.shardingsphere.sql.parser.engine.statement.StatementSQLParserEngine;
+import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
import org.apache.shardingsphere.sql.parser.hook.ParsingHookRegistry;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -29,7 +29,7 @@ import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
* RDL SQL parser engine.
*/
@RequiredArgsConstructor
-public final class RDLSQLParserEngine implements StatementSQLParserEngine {
+public final class RDLSQLParserEngine implements SQLParserEngine {
private final ParsingHookRegistry parsingHookRegistry = ParsingHookRegistry.getInstance();
@@ -41,7 +41,7 @@ public final class RDLSQLParserEngine implements StatementSQLParserEngine {
* @see <a href="https://github.com/apache/skywalking/blob/master/docs/en/guides/Java-Plugin-Development-Guide.md#user-content-plugin-development-guide">Plugin Development Guide</a>
*/
@Override
- public SQLStatement parse(final String sql, final boolean useCache) {
+ public SQLStatement parseToSQLStatement(final String sql, final boolean useCache) {
parsingHookRegistry.start(sql);
try {
SQLStatement result = parse0(sql);
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCache.java
similarity index 97%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCache.java
index 2b59d50..6636b4a 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/SQLParsedResultCache.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCache.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine;
+package org.apache.shardingsphere.sql.parser.cache;
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngineFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCaches.java
similarity index 51%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngineFactory.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCaches.java
index 915b367..e23d1ea 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngineFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCaches.java
@@ -15,38 +15,36 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine.ast;
+package org.apache.shardingsphere.sql.parser.cache;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitorType;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
- * AST SQL parser engine factory.
+ * SQL Parsed result caches.
*/
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class ASTSQLParserEngineFactory {
+public final class SQLParsedResultCaches {
- private static final Map<String, ASTSQLParserEngine> ENGINES = new ConcurrentHashMap<>();
+ private final Map<SQLVisitorType, SQLParsedResultCache> cacheMap = new ConcurrentHashMap<>();
/**
- * Get SQL parser engine.
+ * Get SQL parsed result cache.
*
- * @param databaseTypeName name of database type
- * @return SQL parser engine
+ * @param type type
+ * @return SQL parsed result cache
*/
- public static ASTSQLParserEngine getSQLParserEngine(final String databaseTypeName) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ public SQLParsedResultCache getCache(final SQLVisitorType type) {
+ if (cacheMap.containsKey(type)) {
+ return cacheMap.get(type);
}
- synchronized (ENGINES) {
- if (ENGINES.containsKey(databaseTypeName)) {
- return ENGINES.get(databaseTypeName);
+ synchronized (cacheMap) {
+ if (cacheMap.containsKey(type)) {
+ return cacheMap.get(type);
}
- ASTSQLParserEngine result = new ASTSQLParserEngine(databaseTypeName);
- ENGINES.put(databaseTypeName, result);
+ SQLParsedResultCache result = new SQLParsedResultCache<>();
+ cacheMap.put(type, result);
return result;
}
}
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/engine/SQLParserEngine.java
index 16472b5..164179a 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/engine/SQLParserEngine.java
@@ -17,17 +17,19 @@
package org.apache.shardingsphere.sql.parser.engine;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
/**
- * SQL parser engine.
+ * Statement SQL parser engine.
*/
-public interface SQLParserEngine<T> {
+public interface SQLParserEngine {
/**
- * Parse SQL.
- *
+ * Parse to SQL Statement.
+ *
* @param sql SQL
* @param useCache use cache or not
- * @return T
+ * @return SQL statement
*/
- T parse(String sql, boolean useCache);
+ SQLStatement parseToSQLStatement(String sql, boolean useCache);
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java
deleted file mode 100644
index 5fc3267..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/ast/ASTSQLParserEngine.java
+++ /dev/null
@@ -1,52 +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.engine.ast;
-
-import lombok.RequiredArgsConstructor;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
-import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
-import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
-
-import java.util.Optional;
-
-/**
- * AST SQL parser engine.
- */
-@RequiredArgsConstructor
-public final class ASTSQLParserEngine implements SQLParserEngine<ParseTree> {
-
- private final String databaseTypeName;
-
- private final SQLParsedResultCache<ParseTree> cache = new SQLParsedResultCache<>();
-
- @Override
- public ParseTree parse(final String sql, final boolean useCache) {
- if (useCache) {
- Optional<ParseTree> parsedResult = cache.get(sql);
- if (parsedResult.isPresent()) {
- return parsedResult.get();
- }
- }
- ParseTree result = new SQLParserExecutor(databaseTypeName, sql).execute().getRootNode();
- if (useCache) {
- cache.put(sql, result);
- }
- return result;
- }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngine.java
new file mode 100644
index 0000000..01cc50e
--- /dev/null
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngine.java
@@ -0,0 +1,126 @@
+/*
+ * 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.engine.standard;
+
+import lombok.RequiredArgsConstructor;
+import org.antlr.v4.runtime.tree.ParseTree;
+import org.antlr.v4.runtime.tree.ParseTreeVisitor;
+import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitorType;
+import org.apache.shardingsphere.sql.parser.cache.SQLParsedResultCaches;
+import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorFactory;
+import org.apache.shardingsphere.sql.parser.core.visitor.SQLVisitorRule;
+import org.apache.shardingsphere.sql.parser.cache.SQLParsedResultCache;
+import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
+import org.apache.shardingsphere.sql.parser.hook.ParsingHookRegistry;
+import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+
+import java.util.Optional;
+
+/**
+ * Standard SQL parser engine.
+ */
+@RequiredArgsConstructor
+public final class StandardSQLParserEngine implements SQLParserEngine {
+
+ private final String databaseTypeName;
+
+ private final SQLParsedResultCaches caches = new SQLParsedResultCaches();
+
+ private final ParsingHookRegistry parsingHookRegistry = ParsingHookRegistry.getInstance();
+
+ /**
+ * Parse to AST.
+ * @param sql SQL
+ * @param useCache use cache or not
+ * @return parse tree
+ */
+ public ParseTree parseToAST(final String sql, final boolean useCache) {
+ Optional<ParseTree> parseTree = getCache(sql, useCache, SQLVisitorType.FORMAT);
+ if (parseTree.isPresent()) {
+ return parseTree.get();
+ }
+ ParseTree result = parse0(sql);
+ putCache(sql, result, useCache, SQLVisitorType.FORMAT);
+ return result;
+ }
+
+ // TODO check skywalking plugin
+ /**
+ * To make sure SkyWalking will be available at the next release of ShardingSphere,
+ * a new plugin should be provided to SkyWalking project if this API changed.
+ *
+ * @see <a href="https://github.com/apache/skywalking/blob/master/docs/en/guides/Java-Plugin-Development-Guide.md#user-content-plugin-development-guide">Plugin Development Guide</a>
+ */
+ @Override
+ public SQLStatement parseToSQLStatement(final String sql, final boolean useCache) {
+ parsingHookRegistry.start(sql);
+ try {
+ SQLStatement result = parseToSQLStatement0(sql, useCache);
+ parsingHookRegistry.finishSuccess(result);
+ return result;
+ // CHECKSTYLE:OFF
+ } catch (final Exception ex) {
+ // CHECKSTYLE:ON
+ parsingHookRegistry.finishFailure(ex);
+ throw ex;
+ }
+ }
+
+ /**
+ * Parse.
+ *
+ * @param sql SQL
+ * @param visitor visitor
+ * @return object
+ */
+ public Object parse(final String sql, final ParseTreeVisitor visitor) {
+ return parse0(sql).accept(visitor);
+ }
+
+ private SQLStatement parseToSQLStatement0(final String sql, final boolean useCache) {
+ Optional<SQLStatement> statement = getCache(sql, useCache, SQLVisitorType.STATEMENT);
+ if (statement.isPresent()) {
+ return statement.get();
+ }
+ ParseTree parseTree = parse0(sql);
+ ParseTreeVisitor visitor = SQLVisitorFactory.newInstance(databaseTypeName, SQLVisitorType.STATEMENT, SQLVisitorRule.valueOf(parseTree.getClass()));
+ SQLStatement result = (SQLStatement) parseTree.accept(visitor);
+ putCache(sql, result, useCache, SQLVisitorType.STATEMENT);
+ return result;
+ }
+
+ private Optional getCache(final String sql, final boolean useCache, final SQLVisitorType type) {
+ if (useCache) {
+ SQLParsedResultCache cache = caches.getCache(type);
+ return cache.get(sql);
+ }
+ return Optional.empty();
+ }
+
+ private void putCache(final String sql, final Object parsedResult, final boolean useCache, final SQLVisitorType type) {
+ if (useCache) {
+ SQLParsedResultCache cache = caches.getCache(type);
+ cache.put(sql, parsedResult);
+ }
+ }
+
+ private ParseTree parse0(final String sql) {
+ return new SQLParserExecutor(databaseTypeName, sql).execute().getRootNode();
+ }
+}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngineFactory.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngineFactory.java
similarity index 95%
rename from shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngineFactory.java
rename to shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngineFactory.java
index 3ad601d..cb49906 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngineFactory.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/standard/StandardSQLParserEngineFactory.java
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.sql.parser.engine.statement.standard;
+package org.apache.shardingsphere.sql.parser.engine.standard;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
@@ -33,7 +33,7 @@ public final class StandardSQLParserEngineFactory {
/**
* Get SQL parser engine.
- *
+ *x
* @param databaseTypeName name of database type
* @return SQL parser engine
*/
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/StatementSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/StatementSQLParserEngine.java
deleted file mode 100644
index 04007a0..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/StatementSQLParserEngine.java
+++ /dev/null
@@ -1,30 +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.engine.statement;
-
-import org.apache.shardingsphere.sql.parser.engine.SQLParserEngine;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-/**
- * Statement SQL parser engine.
- */
-public interface StatementSQLParserEngine extends SQLParserEngine<SQLStatement> {
-
- @Override
- SQLStatement parse(String sql, boolean useCache);
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java
deleted file mode 100644
index 801f516..0000000
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/main/java/org/apache/shardingsphere/sql/parser/engine/statement/standard/StandardSQLParserEngine.java
+++ /dev/null
@@ -1,82 +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.engine.statement.standard;
-
-import lombok.RequiredArgsConstructor;
-import org.antlr.v4.runtime.tree.ParseTree;
-import org.apache.shardingsphere.sql.parser.api.visitor.SQLVisitorType;
-import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
-import org.apache.shardingsphere.sql.parser.core.parser.SQLParserExecutor;
-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.statement.StatementSQLParserEngine;
-import org.apache.shardingsphere.sql.parser.hook.ParsingHookRegistry;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
-
-import java.util.Optional;
-
-/**
- * Standard SQL parser engine.
- */
-@RequiredArgsConstructor
-public final class StandardSQLParserEngine implements StatementSQLParserEngine {
-
- private final String databaseTypeName;
-
- private final SQLParsedResultCache<SQLStatement> cache = new SQLParsedResultCache<>();
-
- private final ParsingHookRegistry parsingHookRegistry = ParsingHookRegistry.getInstance();
-
- // TODO check skywalking plugin
- /*
- * To make sure SkyWalking will be available at the next release of ShardingSphere,
- * a new plugin should be provided to SkyWalking project if this API changed.
- *
- * @see <a href="https://github.com/apache/skywalking/blob/master/docs/en/guides/Java-Plugin-Development-Guide.md#user-content-plugin-development-guide">Plugin Development Guide</a>
- */
- @Override
- public SQLStatement parse(final String sql, final boolean useCache) {
- parsingHookRegistry.start(sql);
- try {
- SQLStatement result = parse0(sql, useCache);
- parsingHookRegistry.finishSuccess(result);
- return result;
- // CHECKSTYLE:OFF
- } catch (final Exception ex) {
- // CHECKSTYLE:ON
- parsingHookRegistry.finishFailure(ex);
- throw ex;
- }
- }
-
- private SQLStatement parse0(final String sql, final boolean useCache) {
- if (useCache) {
- Optional<SQLStatement> cachedSQLStatement = cache.get(sql);
- if (cachedSQLStatement.isPresent()) {
- return cachedSQLStatement.get();
- }
- }
- ParseTree parseTree = new SQLParserExecutor(databaseTypeName, sql).execute().getRootNode();
- SQLStatement result =
- (SQLStatement) SQLVisitorFactory.newInstance(databaseTypeName, SQLVisitorType.STATEMENT, SQLVisitorRule.valueOf(parseTree.getClass())).visit(parseTree);
- if (useCache) {
- cache.put(sql, result);
- }
- return result;
- }
-}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/SQLParseEngineFactoryTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/SQLParseEngineFactoryTest.java
index 25b5e3d..8de8d8d 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/SQLParseEngineFactoryTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/SQLParseEngineFactoryTest.java
@@ -17,7 +17,7 @@
package org.apache.shardingsphere.sql.parser;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
index cb576ec..6a9981c 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-engine/src/test/java/org/apache/shardingsphere/sql/parser/cache/SQLParsedResultCacheTest.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.sql.parser.cache;
-import org.apache.shardingsphere.sql.parser.engine.SQLParsedResultCache;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dml.MySQLSelectStatement;
import org.junit.Test;
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java
index 9945be6..23d5cd1 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/SQLParserParameterizedTest.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.test.sql.parser.parameterized.engine;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.SQLCaseAssertContext;
import org.apache.shardingsphere.test.sql.parser.parameterized.asserts.statement.SQLStatementAssert;
@@ -78,7 +78,7 @@ public abstract class SQLParserParameterizedTest {
SQLParserTestCase expected = SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId);
String databaseType = "H2".equals(this.databaseType) ? "MySQL" : this.databaseType;
String sql = SQL_CASES_LOADER.getSQL(sqlCaseId, sqlCaseType, SQL_PARSER_TEST_CASES_REGISTRY.get(sqlCaseId).getParameters());
- SQLStatement actual = StandardSQLParserEngineFactory.getSQLParserEngine(databaseType).parse(sql, false);
+ SQLStatement actual = StandardSQLParserEngineFactory.getSQLParserEngine(databaseType).parseToSQLStatement(sql, false);
SQLStatementAssert.assertIs(new SQLCaseAssertContext(sqlCaseId, sqlCaseType), actual, expected);
}
}
diff --git a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java
index a1f1c26..0755f09 100644
--- a/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java
+++ b/shardingsphere-sql-parser/shardingsphere-sql-parser-test/src/main/java/org/apache/shardingsphere/test/sql/parser/parameterized/engine/UnsupportedSQLParserParameterizedTest.java
@@ -18,7 +18,7 @@
package org.apache.shardingsphere.test.sql.parser.parameterized.engine;
import lombok.RequiredArgsConstructor;
-import org.apache.shardingsphere.sql.parser.engine.statement.standard.StandardSQLParserEngineFactory;
+import org.apache.shardingsphere.sql.parser.engine.standard.StandardSQLParserEngineFactory;
import org.apache.shardingsphere.sql.parser.exception.SQLParsingException;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.SQLCaseType;
import org.apache.shardingsphere.test.sql.parser.parameterized.jaxb.sql.loader.SQLCasesLoader;
@@ -47,6 +47,6 @@ public abstract class UnsupportedSQLParserParameterizedTest {
public final void assertUnsupportedSQL() {
String sql = SQL_CASES_LOADER.getSQL(sqlCaseId, sqlCaseType, Collections.emptyList());
String databaseType = "H2".equals(this.databaseType) ? "MySQL" : this.databaseType;
- StandardSQLParserEngineFactory.getSQLParserEngine(databaseType).parse(sql, false);
+ StandardSQLParserEngineFactory.getSQLParserEngine(databaseType).parseToSQLStatement(sql, false);
}
}