This is an automated email from the ASF dual-hosted git repository.

panjuan 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 ea4da68b Use SQLStatementContext on LogicSQLContext (#7670)
ea4da68b is described below

commit ea4da68b8b622adcb2b27c79994c26c40285c99f
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Sep 30 17:17:36 2020 +0800

    Use SQLStatementContext on LogicSQLContext (#7670)
    
    * Update route spi document
    
    * Use SQLStatementContext on LogicSQLContext
---
 .../infra/context/kernel/KernelProcessor.java      |   7 +-
 .../infra/context/sql/LogicSQLContext.java         |   6 +-
 .../statement/ShardingSpherePreparedStatement.java |  13 ++-
 .../core/statement/ShardingSphereStatement.java    |  16 +++-
 .../DatabaseCommunicationEngineFactory.java        |   9 +-
 .../explain/ShardingCTLExplainBackendHandler.java  |  13 ++-
 .../mysql/command/MySQLCommandExecutorFactory.java |   4 +-
 .../command/MySQLCommandExecutorFactoryTest.java   | 104 +++++++++++++--------
 .../execute/MySQLComStmtExecuteExecutorTest.java   |  16 +---
 9 files changed, 116 insertions(+), 72 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
index c9ac1d2..e7bd6be 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/kernel/KernelProcessor.java
@@ -24,11 +24,9 @@ import 
org.apache.shardingsphere.infra.executor.sql.context.ExecutionContextBuil
 import org.apache.shardingsphere.infra.executor.sql.context.ExecutionUnit;
 import org.apache.shardingsphere.infra.rewrite.SQLRewriteEntry;
 import org.apache.shardingsphere.infra.rewrite.engine.result.SQLRewriteResult;
-import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
 import org.apache.shardingsphere.infra.route.context.RouteContext;
+import org.apache.shardingsphere.infra.route.engine.SQLRouteEngine;
 import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory;
-import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 
 import java.util.Collection;
@@ -48,8 +46,7 @@ public final class KernelProcessor {
     public ExecutionContext generateExecutionContext(final LogicSQLContext 
logicSQLContext, final ConfigurationProperties props) {
         Collection<ShardingSphereRule> rules = 
logicSQLContext.getSchemaContext().getSchema().getRules();
         SQLRouteEngine sqlRouteEngine = new 
SQLRouteEngine(logicSQLContext.getSchemaContext().getSchema().getMetaData(), 
props, rules);
-        SchemaMetaData schemaMetaData = 
logicSQLContext.getSchemaContext().getSchema().getMetaData().getRuleSchemaMetaData().getSchemaMetaData();
-        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schemaMetaData, 
logicSQLContext.getParameters(), logicSQLContext.getSqlStatement());
+        SQLStatementContext<?> sqlStatementContext = 
logicSQLContext.getSqlStatementContext();
         RouteContext routeContext = sqlRouteEngine.route(sqlStatementContext, 
logicSQLContext.getSql(), logicSQLContext.getParameters());
         SQLRewriteEntry rewriteEntry = new 
SQLRewriteEntry(logicSQLContext.getSchemaContext().getSchema().getMetaData().getRuleSchemaMetaData().getConfiguredSchemaMetaData(),
 props, rules);
         SQLRewriteResult rewriteResult = 
rewriteEntry.rewrite(logicSQLContext.getSql(), logicSQLContext.getParameters(), 
sqlStatementContext, routeContext);
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/sql/LogicSQLContext.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/sql/LogicSQLContext.java
index cea97f4..05c84e4 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/sql/LogicSQLContext.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/sql/LogicSQLContext.java
@@ -20,7 +20,7 @@ package org.apache.shardingsphere.infra.context.sql;
 import lombok.Getter;
 import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.infra.context.schema.SchemaContext;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 
 import java.util.List;
 
@@ -33,9 +33,9 @@ public final class LogicSQLContext {
     
     private final SchemaContext schemaContext;
     
+    private final SQLStatementContext<?> sqlStatementContext;
+    
     private final String sql;
     
     private final List<Object> parameters;
-    
-    private final SQLStatement sqlStatement;
 }
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 24b4a68..bf935b7 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
@@ -51,7 +51,10 @@ import 
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.S
 import org.apache.shardingsphere.infra.merge.MergeEngine;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
+import org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory;
+import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
 import 
org.apache.shardingsphere.sql.parser.binder.segment.insert.keygen.GeneratedKeyContext;
+import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -253,13 +256,19 @@ public final class ShardingSpherePreparedStatement 
extends AbstractPreparedState
     }
     
     private ExecutionContext createExecutionContext() {
-        LogicSQLContext logicSQLContext = new 
LogicSQLContext(schemaContexts.getDefaultSchemaContext(), sql, new 
ArrayList<>(getParameters()), sqlStatement);
-        ExecutionContext result = new 
KernelProcessor().generateExecutionContext(logicSQLContext, 
schemaContexts.getProps());
+        ExecutionContext result = new 
KernelProcessor().generateExecutionContext(createLogicSQLContext(), 
schemaContexts.getProps());
         findGeneratedKey(result).ifPresent(generatedKey -> 
generatedValues.addAll(generatedKey.getGeneratedValues()));
         logSQL(result);
         return result;
     }
     
+    private LogicSQLContext createLogicSQLContext() {
+        List<Object> parameters = new ArrayList<>(getParameters());
+        SchemaMetaData schemaMetaData = 
schemaContexts.getDefaultSchemaContext().getSchema().getMetaData().getRuleSchemaMetaData().getSchemaMetaData();
+        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schemaMetaData, parameters, 
sqlStatement);
+        return new LogicSQLContext(schemaContexts.getDefaultSchemaContext(), 
sqlStatementContext, sql, parameters);
+    }
+    
     private MergedResult mergeQuery(final List<QueryResult> queryResults) 
throws SQLException {
         SchemaContext schemaContext = schemaContexts.getDefaultSchemaContext();
         MergeEngine mergeEngine = new 
MergeEngine(schemaContexts.getDatabaseType(),
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 3b880d0..3f348b2 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
@@ -49,7 +49,10 @@ import 
org.apache.shardingsphere.infra.executor.sql.resourced.jdbc.queryresult.S
 import org.apache.shardingsphere.infra.merge.MergeEngine;
 import org.apache.shardingsphere.infra.merge.result.MergedResult;
 import org.apache.shardingsphere.infra.rule.DataNodeRoutedRule;
+import org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory;
+import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
 import 
org.apache.shardingsphere.sql.parser.binder.segment.insert.keygen.GeneratedKeyContext;
+import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.dml.InsertStatementContext;
 import 
org.apache.shardingsphere.sql.parser.binder.statement.dml.SelectStatementContext;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -278,10 +281,7 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
     
     private ExecutionContext createExecutionContext(final String sql) throws 
SQLException {
         clearStatements();
-        SchemaContext schemaContext = schemaContexts.getDefaultSchemaContext();
-        SQLStatement sqlStatement = 
schemaContext.getRuntimeContext().getSqlParserEngine().parse(sql, false);
-        LogicSQLContext logicSQLContext = new LogicSQLContext(schemaContext, 
sql, Collections.emptyList(), sqlStatement);
-        ExecutionContext result = new 
KernelProcessor().generateExecutionContext(logicSQLContext, 
schemaContexts.getProps());
+        ExecutionContext result = new 
KernelProcessor().generateExecutionContext(createLogicSQLContext(sql), 
schemaContexts.getProps());
         logSQL(sql, schemaContexts.getProps(), result);
         return result;
     }
@@ -299,6 +299,14 @@ public final class ShardingSphereStatement extends 
AbstractStatementAdapter {
         }
     }
     
+    private LogicSQLContext createLogicSQLContext(final String sql) {
+        SchemaContext schemaContext = schemaContexts.getDefaultSchemaContext();
+        SchemaMetaData schemaMetaData = 
schemaContext.getSchema().getMetaData().getRuleSchemaMetaData().getSchemaMetaData();
+        SQLStatement sqlStatement = 
schemaContext.getRuntimeContext().getSqlParserEngine().parse(sql, false);
+        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schemaMetaData, Collections.emptyList(), 
sqlStatement);
+        return new LogicSQLContext(schemaContext, sqlStatementContext, sql, 
Collections.emptyList());
+    }
+    
     private Collection<InputGroup<StatementExecuteUnit>> getInputGroups() 
throws SQLException {
         int maxConnectionsSizePerQuery = 
schemaContexts.getProps().<Integer>getValue(ConfigurationPropertyKey.MAX_CONNECTIONS_SIZE_PER_QUERY);
         return new StatementExecuteGroupEngine(maxConnectionsSizePerQuery, 
connection, statementOption,
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
index 5b36fe2..891a33a 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngineFactory.java
@@ -20,13 +20,16 @@ package 
org.apache.shardingsphere.proxy.backend.communication;
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
 import org.apache.shardingsphere.infra.context.schema.SchemaContext;
+import org.apache.shardingsphere.infra.context.sql.LogicSQLContext;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.JDBCDatabaseCommunicationEngine;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.execute.engine.jdbc.JDBCExecuteEngine;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.accessor.impl.PreparedStatementAccessor;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.statement.accessor.impl.StatementAccessor;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
-import org.apache.shardingsphere.infra.context.sql.LogicSQLContext;
+import org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory;
+import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
+import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.util.ArrayList;
@@ -79,6 +82,8 @@ public final class DatabaseCommunicationEngineFactory {
     
     private LogicSQLContext createLogicSQLContext(final SQLStatement 
sqlStatement, final String sql, final List<Object> parameters, final 
BackendConnection backendConnection) {
         SchemaContext schemaContext = 
ProxyContext.getInstance().getSchema(backendConnection.getSchemaName());
-        return new LogicSQLContext(schemaContext, sql, parameters, 
sqlStatement);
+        SchemaMetaData schemaMetaData = 
schemaContext.getSchema().getMetaData().getRuleSchemaMetaData().getSchemaMetaData();
+        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schemaMetaData, parameters, 
sqlStatement);
+        return new LogicSQLContext(schemaContext, sqlStatementContext, sql, 
parameters);
     }
 }
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 96fdea1..4f7a316 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
@@ -32,6 +32,9 @@ import 
org.apache.shardingsphere.proxy.backend.response.query.QueryData;
 import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
 import org.apache.shardingsphere.proxy.backend.text.TextProtocolBackendHandler;
 import 
org.apache.shardingsphere.proxy.backend.text.sctl.exception.InvalidShardingCTLFormatException;
+import org.apache.shardingsphere.sql.parser.binder.SQLStatementContextFactory;
+import 
org.apache.shardingsphere.sql.parser.binder.metadata.schema.SchemaMetaData;
+import 
org.apache.shardingsphere.sql.parser.binder.statement.SQLStatementContext;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.Types;
@@ -68,8 +71,7 @@ public final class ShardingCTLExplainBackendHandler 
implements TextProtocolBacke
         if (!schemaContext.isComplete()) {
             throw new RuleNotExistsException();
         }
-        SQLStatement sqlStatement = 
schemaContext.getRuntimeContext().getSqlParserEngine().parse(explainStatement.get().getSql(),
 false);
-        LogicSQLContext logicSQLContext = new LogicSQLContext(schemaContext, 
explainStatement.get().getSql(), Collections.emptyList(), sqlStatement);
+        LogicSQLContext logicSQLContext = createLogicSQLContext(schemaContext, 
explainStatement.get());
         executionUnits = new 
KernelProcessor().generateExecutionContext(logicSQLContext, 
ProxyContext.getInstance().getSchemaContexts().getProps()).getExecutionUnits().iterator();
         queryHeaders = new ArrayList<>(2);
         queryHeaders.add(new QueryHeader("", "", "datasource_name", "", 255, 
Types.CHAR, 0, false, false, false, false));
@@ -77,6 +79,13 @@ public final class ShardingCTLExplainBackendHandler 
implements TextProtocolBacke
         return new QueryResponse(queryHeaders);
     }
     
+    private LogicSQLContext createLogicSQLContext(final SchemaContext 
schemaContext, final ShardingCTLExplainStatement explainStatement) {
+        SchemaMetaData schemaMetaData = 
schemaContext.getSchema().getMetaData().getRuleSchemaMetaData().getSchemaMetaData();
+        SQLStatement sqlStatement = 
schemaContext.getRuntimeContext().getSqlParserEngine().parse(explainStatement.getSql(),
 false);
+        SQLStatementContext<?> sqlStatementContext = 
SQLStatementContextFactory.newInstance(schemaMetaData, Collections.emptyList(), 
sqlStatement);
+        return new LogicSQLContext(schemaContext, sqlStatementContext, 
explainStatement.getSql(), Collections.emptyList());
+    }
+    
     @Override
     public boolean next() {
         return null != executionUnits && executionUnits.hasNext();
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
index d938908..5b4fce5 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/main/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactory.java
@@ -68,6 +68,8 @@ public final class MySQLCommandExecutorFactory {
                 return new 
MySQLComFieldListPacketExecutor((MySQLComFieldListPacket) commandPacket, 
backendConnection);
             case COM_QUERY:
                 return new MySQLComQueryPacketExecutor((MySQLComQueryPacket) 
commandPacket, backendConnection);
+            case COM_PING:
+                return new MySQLComPingExecutor();
             case COM_STMT_PREPARE:
                 return new 
MySQLComStmtPrepareExecutor((MySQLComStmtPreparePacket) commandPacket, 
backendConnection);
             case COM_STMT_EXECUTE:
@@ -76,8 +78,6 @@ public final class MySQLCommandExecutorFactory {
                 return new MySQLComStmtResetExecutor((MySQLComStmtResetPacket) 
commandPacket);
             case COM_STMT_CLOSE:
                 return new MySQLComStmtCloseExecutor((MySQLComStmtClosePacket) 
commandPacket);
-            case COM_PING:
-                return new MySQLComPingExecutor();
             default:
                 return new MySQLUnsupportedCommandExecutor(commandPacketType);
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
index 886d27d..7bb26f7 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/MySQLCommandExecutorFactoryTest.java
@@ -17,7 +17,6 @@
 
 package org.apache.shardingsphere.proxy.frontend.mysql.command;
 
-import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.MySQLCommandPacketType;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.admin.initdb.MySQLComInitDbPacket;
 import 
org.apache.shardingsphere.db.protocol.mysql.packet.command.query.binary.close.MySQLComStmtClosePacket;
@@ -31,23 +30,24 @@ import org.apache.shardingsphere.infra.auth.Authentication;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.schema.SchemaContext;
 import 
org.apache.shardingsphere.infra.context.schema.impl.StandardSchemaContexts;
-import org.apache.shardingsphere.infra.context.schema.runtime.RuntimeContext;
-import org.apache.shardingsphere.infra.context.schema.ShardingSphereSchema;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.initdb.MySQLComInitDbExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.ping.MySQLComPingExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.admin.quit.MySQLComQuitExecutor;
+import 
org.apache.shardingsphere.proxy.frontend.mysql.command.generic.MySQLUnsupportedCommandExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.close.MySQLComStmtCloseExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.execute.MySQLComStmtExecuteExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.prepare.MySQLComStmtPrepareExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.binary.reset.MySQLComStmtResetExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.fieldlist.MySQLComFieldListPacketExecutor;
 import 
org.apache.shardingsphere.proxy.frontend.mysql.command.query.text.query.MySQLComQueryPacketExecutor;
-import 
org.apache.shardingsphere.rdl.parser.engine.ShardingSphereSQLParserEngine;
-import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
+import org.junit.Before;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
 
 import java.lang.reflect.Field;
 import java.util.Collections;
@@ -56,52 +56,78 @@ import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.junit.Assert.assertThat;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+@RunWith(MockitoJUnitRunner.class)
 public final class MySQLCommandExecutorFactoryTest {
     
-    @Test
-    @SneakyThrows(ReflectiveOperationException.class)
-    public void assertNewInstance() {
-        Field schemaContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("schemaContexts");
-        schemaContexts.setAccessible(true);
-        schemaContexts.set(ProxyContext.getInstance(),
-                new StandardSchemaContexts(getSchemaContextMap(), new 
Authentication(), new ConfigurationProperties(new Properties()), new 
MySQLDatabaseType()));
-        BackendConnection backendConnection = mock(BackendConnection.class);
+    @Mock
+    private BackendConnection backendConnection;
+    
+    @Before
+    public void setUp() throws ReflectiveOperationException {
         when(backendConnection.getSchemaName()).thenReturn("schema");
-        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUIT,
-            mock(CommandPacket.class), backendConnection), 
instanceOf(MySQLComQuitExecutor.class));
-        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_INIT_DB,
-            mock(MySQLComInitDbPacket.class), backendConnection), 
instanceOf(MySQLComInitDbExecutor.class));
+        Field field = 
ProxyContext.getInstance().getClass().getDeclaredField("schemaContexts");
+        field.setAccessible(true);
+        Map<String, SchemaContext> schemaContextMap = 
Collections.singletonMap("schema", mock(SchemaContext.class, 
RETURNS_DEEP_STUBS));
+        field.set(ProxyContext.getInstance(), new 
StandardSchemaContexts(schemaContextMap, new Authentication(), new 
ConfigurationProperties(new Properties()), new MySQLDatabaseType()));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComQuit() {
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUIT,
 mock(CommandPacket.class), backendConnection), 
instanceOf(MySQLComQuitExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComInitDb() {
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_INIT_DB,
 mock(MySQLComInitDbPacket.class), backendConnection), 
instanceOf(MySQLComInitDbExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComFieldList() {
         
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_FIELD_LIST,
-            mock(MySQLComFieldListPacket.class), backendConnection), 
instanceOf(MySQLComFieldListPacketExecutor.class));
-        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUERY,
-            mock(MySQLComQueryPacket.class), backendConnection), 
instanceOf(MySQLComQueryPacketExecutor.class));
+                mock(MySQLComFieldListPacket.class), backendConnection), 
instanceOf(MySQLComFieldListPacketExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComQuery() {
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_QUERY,
 mock(MySQLComQueryPacket.class), backendConnection), 
instanceOf(MySQLComQueryPacketExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComPing() {
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_PING,
 mock(CommandPacket.class), backendConnection), 
instanceOf(MySQLComPingExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComStmtPrepare() {
         
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_PREPARE,
-            mock(MySQLComStmtPreparePacket.class), backendConnection), 
instanceOf(MySQLComStmtPrepareExecutor.class));
+                mock(MySQLComStmtPreparePacket.class), backendConnection), 
instanceOf(MySQLComStmtPrepareExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComStmtExecute() {
         
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_EXECUTE,
-            mock(MySQLComStmtExecutePacket.class), backendConnection), 
instanceOf(MySQLComStmtExecuteExecutor.class));
+                mock(MySQLComStmtExecutePacket.class), backendConnection), 
instanceOf(MySQLComStmtExecuteExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComStmtReset() {
         
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_RESET,
-            mock(MySQLComStmtResetPacket.class), backendConnection), 
instanceOf(MySQLComStmtResetExecutor.class));
+                mock(MySQLComStmtResetPacket.class), backendConnection), 
instanceOf(MySQLComStmtResetExecutor.class));
+    }
+    
+    @Test
+    public void assertNewInstanceWithComStmtClose() {
         
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_STMT_CLOSE,
-            mock(MySQLComStmtClosePacket.class), backendConnection), 
instanceOf(MySQLComStmtCloseExecutor.class));
-        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_PING,
-            mock(CommandPacket.class), backendConnection), 
instanceOf(MySQLComPingExecutor.class));
+                mock(MySQLComStmtClosePacket.class), backendConnection), 
instanceOf(MySQLComStmtCloseExecutor.class));
     }
     
-    private Map<String, SchemaContext> getSchemaContextMap() {
-        SchemaContext result = mock(SchemaContext.class);
-        ShardingSphereSchema schema = mock(ShardingSphereSchema.class);
-        RuntimeContext runtimeContext = mock(RuntimeContext.class);
-        ShardingSphereSQLParserEngine sqlParserEngine = 
mock(ShardingSphereSQLParserEngine.class);
-        when(sqlParserEngine.parse(anyString(), 
anyBoolean())).thenReturn(mock(SQLStatement.class));
-        when(runtimeContext.getSqlParserEngine()).thenReturn(sqlParserEngine);
-        when(schema.getRules()).thenReturn(Collections.emptyList());
-        when(result.getSchema()).thenReturn(schema);
-        when(result.getRuntimeContext()).thenReturn(runtimeContext);
-        return Collections.singletonMap("schema", result);
+    @Test
+    public void assertNewInstanceWithUnsupportedCommand() {
+        
assertThat(MySQLCommandExecutorFactory.newInstance(MySQLCommandPacketType.COM_REFRESH,
+                mock(CommandPacket.class), backendConnection), 
instanceOf(MySQLUnsupportedCommandExecutor.class));
     }
 }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
index eefe420..cc3beac 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-mysql/src/test/java/org/apache/shardingsphere/proxy/frontend/mysql/command/query/binary/execute/MySQLComStmtExecuteExecutorTest.java
@@ -22,7 +22,6 @@ import org.apache.shardingsphere.infra.auth.Authentication;
 import 
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.schema.SchemaContext;
 import 
org.apache.shardingsphere.infra.context.schema.impl.StandardSchemaContexts;
-import org.apache.shardingsphere.infra.context.schema.runtime.RuntimeContext;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import 
org.apache.shardingsphere.infra.executor.sql.raw.execute.result.query.QueryHeader;
 import 
org.apache.shardingsphere.proxy.backend.communication.DatabaseCommunicationEngine;
@@ -31,7 +30,6 @@ import 
org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import org.apache.shardingsphere.proxy.backend.response.query.QueryResponse;
 import org.apache.shardingsphere.proxy.backend.response.update.UpdateResponse;
 import org.apache.shardingsphere.proxy.frontend.command.executor.ResponseType;
-import 
org.apache.shardingsphere.rdl.parser.engine.ShardingSphereSQLParserEngine;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -47,6 +45,7 @@ import java.util.Properties;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -60,17 +59,8 @@ public final class MySQLComStmtExecuteExecutorTest {
     public void setUp() throws ReflectiveOperationException {
         Field schemaContexts = 
ProxyContext.getInstance().getClass().getDeclaredField("schemaContexts");
         schemaContexts.setAccessible(true);
-        schemaContexts.set(ProxyContext.getInstance(),
-                new StandardSchemaContexts(getSchemaContextMap(), new 
Authentication(), new ConfigurationProperties(new Properties()), new 
MySQLDatabaseType()));
-    }
-    
-    private Map<String, SchemaContext> getSchemaContextMap() {
-        SchemaContext result = mock(SchemaContext.class);
-        RuntimeContext runtimeContext = mock(RuntimeContext.class);
-        ShardingSphereSQLParserEngine sqlParserEngine = 
mock(ShardingSphereSQLParserEngine.class);
-        when(runtimeContext.getSqlParserEngine()).thenReturn(sqlParserEngine);
-        when(result.getRuntimeContext()).thenReturn(runtimeContext);
-        return Collections.singletonMap("schema", result);
+        Map<String, SchemaContext> schemaContextMap = 
Collections.singletonMap("schema", mock(SchemaContext.class, 
RETURNS_DEEP_STUBS));
+        schemaContexts.set(ProxyContext.getInstance(), new 
StandardSchemaContexts(schemaContextMap, new Authentication(), new 
ConfigurationProperties(new Properties()), new MySQLDatabaseType()));
     }
     
     @Test

Reply via email to