This is an automated email from the ASF dual-hosted git repository.
menghaoran 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 ec42c731e3a Add SQLParserRule.getSQLParserEngine() (#17970)
ec42c731e3a is described below
commit ec42c731e3ac2c3fd73ddb358af5efcb8674f4d9
Author: Liang Zhang <[email protected]>
AuthorDate: Thu May 26 16:25:47 2022 +0800
Add SQLParserRule.getSQLParserEngine() (#17970)
* Add SQLParserRule.getSQLParserEngine()
* Add SQLParserRule.getSQLParserEngine()
---
.../optimizer/ShardingSphereOptimizerTest.java | 23 +++++++++++-----------
.../statement/ShardingSpherePreparedStatement.java | 4 ++--
.../core/statement/ShardingSphereStatement.java | 6 ++----
.../metadata/generator/PipelineDDLGenerator.java | 3 +--
.../shardingsphere/parser/rule/SQLParserRule.java | 10 ++++++----
.../text/TextProtocolBackendHandlerFactory.java | 3 +--
.../ral/advanced/ParseDistSQLBackendHandler.java | 4 +---
.../ral/advanced/PreviewDistSQLBackendHandler.java | 3 +--
.../information/SelectInformationExecutorTest.java | 10 ++++------
.../executor/SelectDatabaseExecutorTest.java | 12 +++++------
.../advance/ParseDistSQLBackendHandlerTest.java | 3 +--
.../execute/MySQLComStmtExecuteExecutor.java | 8 +++-----
.../prepare/MySQLComStmtPrepareExecutor.java | 6 ++----
.../fieldlist/MySQLComFieldListPacketExecutor.java | 6 ++----
.../text/query/MySQLComQueryPacketExecutor.java | 8 ++++----
.../text/query/MySQLMultiStatementsHandler.java | 7 ++++---
.../extended/parse/PostgreSQLComParseExecutor.java | 3 +--
.../ReactiveMySQLComStmtExecuteExecutor.java | 8 +++-----
.../ReactiveMySQLComFieldListPacketExecutor.java | 6 ++----
19 files changed, 56 insertions(+), 77 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
index a5c72317dd9..9787abb70f8 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/test/java/org/apache/shardingsphere/infra/federation/optimizer/ShardingSphereOptimizerTest.java
@@ -26,7 +26,6 @@ import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRule
import
org.apache.shardingsphere.infra.metadata.database.schema.ShardingSphereSchema;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.ColumnMetaData;
import
org.apache.shardingsphere.infra.metadata.database.schema.loader.model.TableMetaData;
-import org.apache.shardingsphere.infra.parser.ParserConfiguration;
import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
@@ -89,7 +88,7 @@ public final class ShardingSphereOptimizerTest {
private final String schemaName = "federate_jdbc";
- private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
+ private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
private ShardingSphereOptimizer optimizer;
@@ -131,7 +130,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossJoinCondition() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_CROSS_JOIN_CONDITION, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -146,7 +145,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectWhereAllFields() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_WHERE_ALL_FIELDS, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -157,7 +156,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectWhereSingleField() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_WHERE_SINGLE_FIELD, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -168,7 +167,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossWhere() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement = sqlParserEngine.parse(SELECT_CROSS_WHERE,
false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -185,7 +184,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectCrossJoin() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement = sqlParserEngine.parse(SELECT_CROSS_JOIN,
false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -202,7 +201,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectJoinWhere() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_CROSS_WHERE_CONDITION, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -215,7 +214,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryFrom() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_FROM, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -226,7 +225,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereExist() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_EXIST, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -241,7 +240,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereIn() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_IN, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
@@ -255,7 +254,7 @@ public final class ShardingSphereOptimizerTest {
@Test
public void assertSelectSubQueryWhereBetween() {
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()), parserConfig);
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(new
H2DatabaseType()));
SQLStatement sqlStatement =
sqlParserEngine.parse(SELECT_SUBQUERY_WHERE_BETWEEN, false);
String actual = optimizer.optimize(databaseName, schemaName,
sqlStatement).explain();
String expected =
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 faeab00fe8a..51f9dfa1b40 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
@@ -174,8 +174,8 @@ public final class ShardingSpherePreparedStatement extends
AbstractPreparedState
parameterSets = new ArrayList<>();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(
-
metaDataContexts.getDatabase(connection.getDatabaseName()).getResource().getDatabaseType()),
sqlParserRule.get().toParserConfiguration());
+ ShardingSphereSQLParserEngine sqlParserEngine =
sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connection.getDatabaseName()).getResource().getDatabaseType()));
sqlStatement = sqlParserEngine.parse(sql, true);
sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
sqlStatement, connection.getDatabaseName());
parameterMetaData = new ShardingSphereParameterMetaData(sqlStatement);
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 81792bf3cdd..9c7b3413087 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
@@ -64,7 +64,6 @@ import
org.apache.shardingsphere.infra.federation.executor.FederationContext;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.merge.MergeEngine;
import org.apache.shardingsphere.infra.merge.result.MergedResult;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.route.context.RouteUnit;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.infra.rule.identifier.type.RawExecutionRule;
@@ -455,9 +454,8 @@ public final class ShardingSphereStatement extends
AbstractStatementAdapter {
private LogicSQL createLogicSQL(final String sql) {
SQLParserRule sqlParserRule = findSQLParserRule();
- ShardingSphereSQLParserEngine sqlParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connection.getDatabaseName()).getResource().getDatabaseType()),
sqlParserRule.toParserConfiguration());
- SQLStatement sqlStatement = sqlParserEngine.parse(sql, false);
+ SQLStatement sqlStatement = sqlParserRule.getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connection.getDatabaseName()).getResource().getDatabaseType())).parse(sql,
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
sqlStatement, connection.getDatabaseName());
return new LogicSQL(sqlStatementContext, sql, Collections.emptyList());
}
diff --git
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
index 9c137cb8749..784602fa923 100644
---
a/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
+++
b/shardingsphere-kernel/shardingsphere-data-pipeline/shardingsphere-data-pipeline-core/src/main/java/org/apache/shardingsphere/data/pipeline/core/metadata/generator/PipelineDDLGenerator.java
@@ -38,7 +38,6 @@ import org.apache.shardingsphere.infra.datanode.DataNodes;
import org.apache.shardingsphere.infra.exception.ShardingSphereException;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.schema.util.IndexMetaDataUtil;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -217,7 +216,7 @@ public final class PipelineDDLGenerator {
private LogicSQL getLogicSQL(final String sql, final DatabaseType
databaseType, final String databaseName) {
Optional<SQLParserRule> sqlParserRule =
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- SQLStatement sqlStatement = new
ShardingSphereSQLParserEngine(databaseType.getType(),
sqlParserRule.get().toParserConfiguration()).parse(sql, false);
+ SQLStatement sqlStatement =
sqlParserRule.get().getSQLParserEngine(databaseType.getType()).parse(sql,
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
sqlStatement, databaseName);
return new LogicSQL(sqlStatementContext, sql, Collections.emptyList());
}
diff --git
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
index 6eeb9730729..a60d65d1ed8 100644
---
a/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
+++
b/shardingsphere-kernel/shardingsphere-parser/shardingsphere-parser-core/src/main/java/org/apache/shardingsphere/parser/rule/SQLParserRule.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.parser.rule;
import lombok.Getter;
import org.apache.shardingsphere.infra.parser.ParserConfiguration;
+import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.identifier.scope.GlobalRule;
import org.apache.shardingsphere.parser.config.SQLParserRuleConfiguration;
import org.apache.shardingsphere.sql.parser.api.CacheOption;
@@ -42,12 +43,13 @@ public final class SQLParserRule implements GlobalRule {
}
/**
- * Convert to parser configuration.
+ * Get SQL parser engine.
*
- * @return parser configuration
+ * @param databaseType database type
+ * @return SQL parser engine
*/
- public ParserConfiguration toParserConfiguration() {
- return new ParserConfiguration(sqlStatementCache, parseTreeCache,
sqlCommentParseEnabled);
+ public ShardingSphereSQLParserEngine getSQLParserEngine(final String
databaseType) {
+ return new ShardingSphereSQLParserEngine(databaseType, new
ParserConfiguration(sqlStatementCache, parseTreeCache, sqlCommentParseEnabled));
}
@Override
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 04abcb4ec52..45169725a8b 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
@@ -29,7 +29,6 @@ import
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -91,7 +90,7 @@ public final class TextProtocolBackendHandlerFactory {
SQLStatement sqlStatement = sqlStatementSupplier.get().orElseGet(() ->
{
Optional<SQLParserRule> sqlParserRule =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- return new
ShardingSphereSQLParserEngine(getProtocolType(databaseType,
connectionSession).getType(),
sqlParserRule.get().toParserConfiguration()).parse(sql, false);
+ return
sqlParserRule.get().getSQLParserEngine(getProtocolType(databaseType,
connectionSession).getType()).parse(sql, false);
});
databaseType.handleRollbackOnly(connectionSession.getTransactionStatus().isRollbackOnly(),
sqlStatement);
checkUnsupportedSQLStatement(sqlStatement);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
index 42ea447e9d7..d140d05c933 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/ParseDistSQLBackendHandler.java
@@ -22,7 +22,6 @@ import com.google.common.base.Strings;
import com.google.gson.Gson;
import
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -68,8 +67,7 @@ public final class ParseDistSQLBackendHandler extends
QueryableRALBackendHandler
Preconditions.checkState(sqlParserRule.isPresent());
SQLStatement parsedSqlStatement;
try {
- parsedSqlStatement = new ShardingSphereSQLParserEngine(
- getStorageType(databaseType, connectionSession).getType(),
sqlParserRule.get().toParserConfiguration()).parse(sqlStatement.getSql(),
false);
+ parsedSqlStatement =
sqlParserRule.get().getSQLParserEngine(getStorageType(databaseType,
connectionSession).getType()).parse(sqlStatement.getSql(), false);
} catch (SQLParsingException ex) {
throw new SQLParsingException("You have a syntax error in your
parsed statement");
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
index 0c8c8c78e88..40f68a2e20f 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advanced/PreviewDistSQLBackendHandler.java
@@ -45,7 +45,6 @@ import
org.apache.shardingsphere.infra.federation.executor.FederationContext;
import org.apache.shardingsphere.infra.federation.executor.FederationExecutor;
import
org.apache.shardingsphere.infra.federation.executor.FederationExecutorFactory;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -102,7 +101,7 @@ public final class PreviewDistSQLBackendHandler extends
QueryableRALBackendHandl
String databaseType =
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType());
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- SQLStatement previewedStatement = new
ShardingSphereSQLParserEngine(databaseType,
sqlParserRule.get().toParserConfiguration()).parse(sqlStatement.getSql(),
false);
+ SQLStatement previewedStatement =
sqlParserRule.get().getSQLParserEngine(databaseType).parse(sqlStatement.getSql(),
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
previewedStatement, databaseName);
// TODO optimize SQLStatementDatabaseHolder
if (sqlStatementContext instanceof TableAvailable) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
index 7ba8b0d2d5d..5a9b651d89e 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/mysql/executor/information/SelectInformationExecutorTest.java
@@ -26,8 +26,6 @@ import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.metadata.user.Grantee;
-import org.apache.shardingsphere.infra.parser.ParserConfiguration;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
@@ -66,7 +64,7 @@ import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class SelectInformationExecutorTest extends ProxyContextRestorer {
- private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
+ private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
@Mock
private ConnectionSession connectionSession;
@@ -91,7 +89,7 @@ public final class SelectInformationExecutorTest extends
ProxyContextRestorer {
databaseMap.put("sharding_db", createDatabase(expectedResultSetMap));
databaseMap.put("database_without_authority",
createEmptyDatabase("database_without_authority"));
String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false), sql);
+ SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
executor.execute(connectionSession);
assertThat(executor.getQueryResultMetaData().getColumnCount(),
is(expectedResultSetMap.size()));
int count = 0;
@@ -112,7 +110,7 @@ public final class SelectInformationExecutorTest extends
ProxyContextRestorer {
Map<String, ShardingSphereDatabase> databaseMap =
ProxyContext.getInstance().getContextManager().getMetaDataContexts().getMetaData().getDatabases();
databaseMap.put("empty_db", createEmptyDatabase("empty_db"));
String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false), sql);
+ SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
executor.execute(connectionSession);
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(4));
while (executor.getMergedResult().next()) {
@@ -126,7 +124,7 @@ public final class SelectInformationExecutorTest extends
ProxyContextRestorer {
@Test
public void assertSelectSchemataInNoSchemaExecute() throws SQLException {
String sql = "SELECT SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME,
DEFAULT_COLLATION_NAME, DEFAULT_ENCRYPTION FROM information_schema.SCHEMATA";
- SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("MySQL", parserConfig).parse(sql, false), sql);
+ SelectInformationSchemataExecutor executor = new
SelectInformationSchemataExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false), sql);
executor.execute(connectionSession);
assertThat(executor.getQueryResultMetaData().getColumnCount(), is(0));
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
index 1374ed2e05c..0ade995e900 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/admin/postgresql/executor/SelectDatabaseExecutorTest.java
@@ -24,8 +24,6 @@ import
org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ShardingSphereResource;
import
org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
-import org.apache.shardingsphere.infra.parser.ParserConfiguration;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
@@ -59,7 +57,7 @@ import static org.mockito.Mockito.when;
public final class SelectDatabaseExecutorTest extends ProxyContextRestorer {
- private final ParserConfiguration parserConfig = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build()).toParserConfiguration();
+ private final SQLParserRule sqlParserRule = new SQLParserRule(new
DefaultSQLParserRuleConfigurationBuilder().build());
@Before
public void setUp() {
@@ -77,7 +75,7 @@ public final class SelectDatabaseExecutorTest extends
ProxyContextRestorer {
String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate, d.datallowconn, pg_get_userbyid(d.datdba) AS databaseowner,"
+ " d.datcollate, d.datctype, shobj_description(d.oid,
'pg_database') AS description, d.datconnlimit, t.spcname, d.encoding,
pg_encoding_to_char(d.encoding) AS encodingname "
+ "FROM pg_database d LEFT JOIN pg_tablespace t ON
d.dattablespace = t.oid;";
- SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false),
sql);
+ SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("PostgreSQL").parse(sql, false), sql);
selectDatabaseExecutor.execute(mock(ConnectionSession.class));
assertThat(selectDatabaseExecutor.getQueryResultMetaData().getColumnCount(),
is(4));
int count = 0;
@@ -145,7 +143,7 @@ public final class SelectDatabaseExecutorTest extends
ProxyContextRestorer {
String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate, d.datallowconn, pg_get_userbyid(d.datdba) AS databaseowner, "
+ "d.datcollate, d.datctype, shobj_description(d.oid,
'pg_database') AS description, d.datconnlimit, t.spcname, d.encoding,
pg_encoding_to_char(d.encoding) AS encodingname "
+ "FROM pg_database d LEFT JOIN pg_tablespace t ON
d.dattablespace = t.oid;";
- SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false),
sql);
+ SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("PostgreSQL").parse(sql, false), sql);
selectDatabaseExecutor.execute(mock(ConnectionSession.class));
while (selectDatabaseExecutor.getMergedResult().next()) {
assertThat(selectDatabaseExecutor.getMergedResult().getValue(1,
String.class), is("empty_db"));
@@ -156,7 +154,7 @@ public final class SelectDatabaseExecutorTest extends
ProxyContextRestorer {
public void
assertSelectDatabaseWithoutDataSourceExecuteAndWithColumnProjectionSegment()
throws SQLException {
addEmptyDatabase();
String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate FROM pg_database d LEFT JOIN pg_tablespace t ON d.dattablespace
= t.oid;";
- SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false),
sql);
+ SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("PostgreSQL").parse(sql, false), sql);
selectDatabaseExecutor.execute(mock(ConnectionSession.class));
while (selectDatabaseExecutor.getMergedResult().next()) {
assertThat(selectDatabaseExecutor.getMergedResult().getValue(1,
String.class), is(""));
@@ -169,7 +167,7 @@ public final class SelectDatabaseExecutorTest extends
ProxyContextRestorer {
@Test
public void assertSelectDatabaseInNoSchemaExecute() throws SQLException {
String sql = "SELECT d.oid, d.datname AS databasename, d.datacl,
d.datistemplate FROM pg_database d LEFT JOIN pg_tablespace t ON d.dattablespace
= t.oid;";
- SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement) new
ShardingSphereSQLParserEngine("PostgreSQL", parserConfig).parse(sql, false),
sql);
+ SelectDatabaseExecutor selectDatabaseExecutor = new
SelectDatabaseExecutor((SelectStatement)
sqlParserRule.getSQLParserEngine("PostgreSQL").parse(sql, false), sql);
selectDatabaseExecutor.execute(mock(ConnectionSession.class));
assertThat(selectDatabaseExecutor.getQueryResultMetaData().getColumnCount(),
is(0));
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
index 87994e196ad..414fb19770f 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/test/java/org/apache/shardingsphere/proxy/backend/text/distsql/ral/advance/ParseDistSQLBackendHandlerTest.java
@@ -20,7 +20,6 @@ package
org.apache.shardingsphere.proxy.backend.text.distsql.ral.advance;
import com.google.gson.Gson;
import
org.apache.shardingsphere.distsql.parser.statement.ral.advanced.ParseStatement;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.parser.rule.builder.DefaultSQLParserRuleConfigurationBuilder;
@@ -68,7 +67,7 @@ public final class ParseDistSQLBackendHandlerTest extends
ProxyContextRestorer {
ParseDistSQLBackendHandler parseDistSQLBackendHandler = new
ParseDistSQLBackendHandler().init(new HandlerParameter<>(parseStatement, new
MySQLDatabaseType(), mock(ConnectionSession.class)));
parseDistSQLBackendHandler.execute();
parseDistSQLBackendHandler.next();
- SQLStatement statement = new ShardingSphereSQLParserEngine("MySQL",
sqlParserRule.toParserConfiguration()).parse(sql, false);
+ SQLStatement statement =
sqlParserRule.getSQLParserEngine("MySQL").parse(sql, false);
assertThat(new
LinkedList<>(parseDistSQLBackendHandler.getRowData()).getFirst(),
is("MySQLSelectStatement"));
assertThat(new
LinkedList<>(parseDistSQLBackendHandler.getRowData()).getLast(), is(new
Gson().toJson(statement)));
}
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 896011a0b09..aa07c92811a 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
@@ -30,10 +30,9 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -85,9 +84,8 @@ public final class MySQLComStmtExecuteExecutor implements
QueryCommandExecutor {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(
- metaDataContexts.getDatabase(databaseName).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
- SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType())).parse(packet.getSql(),
true);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
packet.getParameters(),
sqlStatement, connectionSession.getDefaultDatabaseName());
// TODO optimize SQLStatementDatabaseHolder
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 085efe171be..94904cef0b8 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
@@ -31,7 +31,6 @@ import
org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import
org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -71,9 +70,8 @@ public final class MySQLComStmtPrepareExecutor implements
CommandExecutor {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(
-
metaDataContexts.getDatabase(connectionSession.getDatabaseName()).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
- SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connectionSession.getDatabaseName()).getProtocolType())).parse(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 1560ef49d11..5fbe2c55362 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
@@ -27,7 +27,6 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
@@ -67,9 +66,8 @@ public final class MySQLComFieldListPacketExecutor implements
CommandExecutor {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
- SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
+ SQLStatement sqlStatement = sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType())).parse(sql,
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
sqlStatement, databaseName);
JDBCBackendConnection backendConnection = (JDBCBackendConnection)
connectionSession.getBackendConnection();
databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(sqlStatementContext,
sql, backendConnection);
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
index cfb1cedb92d..95df5c5a09c 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLComQueryPacketExecutor.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query;
+import com.google.common.base.Preconditions;
import lombok.Getter;
import org.apache.shardingsphere.db.protocol.mysql.constant.MySQLConstants;
import
org.apache.shardingsphere.db.protocol.mysql.constant.MySQLServerErrorCode;
@@ -29,7 +30,6 @@ import
org.apache.shardingsphere.db.protocol.mysql.packet.generic.MySQLOKPacket;
import org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
@@ -80,9 +80,9 @@ public final class MySQLComQueryPacketExecutor implements
QueryCommandExecutor {
return new EmptyStatement();
}
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
- ShardingSphereSQLParserEngine engine = new
ShardingSphereSQLParserEngine(databaseType.getType(), metaDataContexts
-
.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class).orElseThrow(()
-> new IllegalStateException("SQLParserRule not
found")).toParserConfiguration());
- return engine.parse(sql, false);
+ Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
+ return
sqlParserRule.get().getSQLParserEngine(databaseType.getType()).parse(sql,
false);
}
private boolean areMultiStatements(final ConnectionSession
connectionSession, final SQLStatement sqlStatement, final String sql) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
index 16bf05ea8b5..1b81be79a88 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/text/query/MySQLMultiStatementsHandler.java
@@ -17,6 +17,7 @@
package
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query;
+import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.binder.LogicSQL;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
@@ -108,9 +109,9 @@ public final class MySQLMultiStatementsHandler implements
TextProtocolBackendHan
private ShardingSphereSQLParserEngine getSQLParserEngine() {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
- return new
ShardingSphereSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connectionSession.getDatabaseName()).getProtocolType()),
- metaDataContexts
-
.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class).orElseThrow(()
-> new IllegalStateException("SQLParserRule not
found")).toParserConfiguration());
+ Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
+ Preconditions.checkState(sqlParserRule.isPresent());
+ return
sqlParserRule.get().getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(connectionSession.getDatabaseName()).getProtocolType()));
}
private List<String> extractMultiStatements(final Pattern pattern, final
String sql) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
index 83b401aefa7..de287975056 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/query/extended/parse/PostgreSQLComParseExecutor.java
@@ -73,8 +73,7 @@ public final class PostgreSQLComParseExecutor implements
CommandExecutor {
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- return new ShardingSphereSQLParserEngine(
-
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(schemaName).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
+ return
sqlParserRule.get().getSQLParserEngine(DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(schemaName).getProtocolType()));
}
private String convertSQLToJDBCStyle(final SQLStatement sqlStatement,
final String sql) {
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
index 1f1c2aac305..1dc040db0bb 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/binary/execute/ReactiveMySQLComStmtExecuteExecutor.java
@@ -32,10 +32,9 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.binder.type.TableAvailable;
-import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
+import org.apache.shardingsphere.infra.database.type.DatabaseTypeFactory;
import org.apache.shardingsphere.infra.executor.check.SQLCheckEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
@@ -86,9 +85,8 @@ public final class ReactiveMySQLComStmtExecuteExecutor
implements ReactiveComman
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
- SQLStatement sqlStatement =
sqlStatementParserEngine.parse(packet.getSql(), true);
+ SQLStatement sqlStatement = sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType())).parse(packet.getSql(),
true);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
packet.getParameters(),
sqlStatement, connectionSession.getDefaultDatabaseName());
// TODO optimize SQLStatementDatabaseHolder
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
index 38e3b3e64ec..a30259baa10 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-reactive-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/reactive/mysql/command/query/text/fieldlist/ReactiveMySQLComFieldListPacketExecutor.java
@@ -28,7 +28,6 @@ import
org.apache.shardingsphere.db.protocol.packet.DatabasePacket;
import org.apache.shardingsphere.infra.binder.SQLStatementContextFactory;
import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
-import org.apache.shardingsphere.infra.parser.ShardingSphereSQLParserEngine;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.parser.rule.SQLParserRule;
import
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngineFactory;
@@ -67,9 +66,8 @@ public final class ReactiveMySQLComFieldListPacketExecutor
implements ReactiveCo
MetaDataContexts metaDataContexts =
ProxyContext.getInstance().getContextManager().getMetaDataContexts();
Optional<SQLParserRule> sqlParserRule =
metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(SQLParserRule.class);
Preconditions.checkState(sqlParserRule.isPresent());
- ShardingSphereSQLParserEngine sqlStatementParserEngine = new
ShardingSphereSQLParserEngine(
-
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType()),
sqlParserRule.get().toParserConfiguration());
- SQLStatement sqlStatement = sqlStatementParserEngine.parse(sql, false);
+ SQLStatement sqlStatement = sqlParserRule.get().getSQLParserEngine(
+
DatabaseTypeEngine.getTrunkDatabaseTypeName(metaDataContexts.getDatabase(databaseName).getProtocolType())).parse(sql,
false);
SQLStatementContext<?> sqlStatementContext =
SQLStatementContextFactory.newInstance(metaDataContexts.getMetaData().getDatabases(),
sqlStatement, databaseName);
databaseCommunicationEngine =
DatabaseCommunicationEngineFactory.getInstance().newTextProtocolInstance(sqlStatementContext,
sql, connectionSession.getBackendConnection());
characterSet =
connectionSession.getAttributeMap().attr(MySQLConstants.MYSQL_CHARACTER_SET_ATTRIBUTE_KEY).get().getId();