未验证 提交 ecd0a9f7 编写于 作者: ShardingSphere's avatar ShardingSphere 提交者: GitHub

Merge pull request #748 from tuohai666/dev

for #675 COM_STMT_EXECUTE procedure
......@@ -65,9 +65,27 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
private final PreparedStatementRoutingEngine routingEngine;
private List<Connection> connections;
private List<ResultSet> resultSets;
private MergedResult mergedResult;
private int currentSequenceId;
private int columnCount;
private final List<ColumnType> columnTypes;
private boolean hasMoreResultValueFlag;
public StatementExecuteBackendHandler(final List<PreparedStatementParameter> preparedStatementParameters, final int statementId, final DatabaseType databaseType, final boolean showSQL) {
this.preparedStatementParameters = preparedStatementParameters;
routingEngine = new PreparedStatementRoutingEngine(PreparedStatementRegistry.getInstance().getSQL(statementId), ShardingRuleRegistry.getInstance().getShardingRule(), databaseType, showSQL);
connections = new ArrayList<>(1024);
resultSets = new ArrayList<>(1024);
columnTypes = new ArrayList<>(32);
hasMoreResultValueFlag = true;
}
@Override
......@@ -77,24 +95,23 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
if (routeResult.getExecutionUnits().isEmpty()) {
return new CommandResponsePackets(new OKPacket(1, 0, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
}
List<ColumnType> columnTypes = new ArrayList<>(32);
List<CommandResponsePackets> result = new LinkedList<>();
for (SQLExecutionUnit each : routeResult.getExecutionUnits()) {
// TODO multiple threads
result.add(execute(routeResult.getSqlStatement(), each, columnTypes));
result.add(execute(routeResult.getSqlStatement(), each));
}
return merge(routeResult.getSqlStatement(), result, columnTypes);
return merge(routeResult.getSqlStatement(), result);
}
private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit, final List<ColumnType> columnTypes) {
private CommandResponsePackets execute(final SQLStatement sqlStatement, final SQLExecutionUnit sqlExecutionUnit) {
switch (sqlStatement.getType()) {
case DQL:
return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSql(), columnTypes);
return executeQuery(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSql());
case DML:
case DDL:
return executeUpdate(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSql(), sqlStatement);
default:
return executeCommon(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSql(), columnTypes);
return executeCommon(ShardingRuleRegistry.getInstance().getDataSourceMap().get(sqlExecutionUnit.getDataSource()), sqlExecutionUnit.getSql());
}
}
......@@ -112,13 +129,16 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
}
}
private CommandResponsePackets executeQuery(final DataSource dataSource, final String sql, final List<ColumnType> columnTypes) {
try (
Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
private CommandResponsePackets executeQuery(final DataSource dataSource, final String sql) {
PreparedStatement preparedStatement;
try {
Connection connection = dataSource.getConnection();
connections.add(connection);
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setFetchSize(Integer.MIN_VALUE);
setJDBCPreparedStatementParameters(preparedStatement);
ResultSet resultSet = preparedStatement.executeQuery();
return getDatabaseProtocolPackets(resultSet, columnTypes);
resultSets.add(preparedStatement.executeQuery());
return getDatabaseProtocolPackets();
} catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
}
......@@ -144,24 +164,24 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
} catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
} finally {
if (preparedStatement != null) {
if (null != preparedStatement) {
try {
preparedStatement.close();
} catch (final SQLException ignore) {
}
}
}
}
private CommandResponsePackets executeCommon(final DataSource dataSource, final String sql, final List<ColumnType> columnTypes) {
private CommandResponsePackets executeCommon(final DataSource dataSource, final String sql) {
try (
Connection connection = dataSource.getConnection();
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
setJDBCPreparedStatementParameters(preparedStatement);
boolean hasResultSet = preparedStatement.execute();
if (hasResultSet) {
return getDatabaseProtocolPackets(preparedStatement.getResultSet(), columnTypes);
resultSets.add(preparedStatement.getResultSet());
return getDatabaseProtocolPackets();
} else {
return new CommandResponsePackets(new OKPacket(1, preparedStatement.getUpdateCount(), 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
}
......@@ -170,11 +190,11 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
}
}
private CommandResponsePackets getDatabaseProtocolPackets(final ResultSet resultSet, final List<ColumnType> columnTypes) throws SQLException {
private CommandResponsePackets getDatabaseProtocolPackets() throws SQLException {
CommandResponsePackets result = new CommandResponsePackets();
int currentSequenceId = 0;
ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
int columnCount = resultSetMetaData.getColumnCount();
ResultSetMetaData resultSetMetaData = resultSets.get(resultSets.size() - 1).getMetaData();
columnCount = resultSetMetaData.getColumnCount();
if (0 == columnCount) {
result.addPacket(new OKPacket(++currentSequenceId, 0, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
return result;
......@@ -188,14 +208,6 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
columnTypes.add(columnType);
}
result.addPacket(new EofPacket(++currentSequenceId, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue()));
while (resultSet.next()) {
List<Object> data = new ArrayList<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
data.add(resultSet.getObject(i));
}
result.addPacket(new BinaryResultSetRowPacket(++currentSequenceId, columnCount, data, columnTypes));
}
result.addPacket(new EofPacket(++currentSequenceId, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue()));
return result;
}
......@@ -208,7 +220,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
return result;
}
private CommandResponsePackets merge(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets, final List<ColumnType> columnTypes) {
private CommandResponsePackets merge(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) {
if (1 == packets.size()) {
return packets.iterator().next();
}
......@@ -225,7 +237,7 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
return mergeDML(headPackets);
}
if (SQLType.DQL == sqlStatement.getType() || SQLType.DAL == sqlStatement.getType()) {
return mergeDQLorDAL(sqlStatement, packets, columnTypes);
return mergeDQLorDAL(sqlStatement, packets);
}
return packets.get(0);
}
......@@ -241,44 +253,88 @@ public final class StatementExecuteBackendHandler implements BackendHandler {
return new CommandResponsePackets(new OKPacket(1, affectedRows, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue(), 0, ""));
}
private CommandResponsePackets mergeDQLorDAL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets, final List<ColumnType> columnTypes) {
private CommandResponsePackets mergeDQLorDAL(final SQLStatement sqlStatement, final List<CommandResponsePackets> packets) {
List<QueryResult> queryResults = new ArrayList<>(packets.size());
for (CommandResponsePackets each : packets) {
for (int i = 0; i < packets.size(); i++) {
// TODO replace to a common PacketQueryResult
queryResults.add(new MySQLPacketStatementExecuteQueryResult(each));
queryResults.add(new MySQLPacketStatementExecuteQueryResult(packets.get(i), resultSets.get(i), columnTypes));
}
MergedResult mergedResult;
try {
mergedResult = MergeEngineFactory.newInstance(ShardingRuleRegistry.getInstance().getShardingRule(), queryResults, sqlStatement).merge();
} catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
}
return buildPackets(packets, mergedResult, columnTypes);
return buildPackets(packets);
}
private CommandResponsePackets buildPackets(final List<CommandResponsePackets> packets, final MergedResult mergedResult, final List<ColumnType> columnTypes) {
private CommandResponsePackets buildPackets(final List<CommandResponsePackets> packets) {
CommandResponsePackets result = new CommandResponsePackets();
Iterator<DatabaseProtocolPacket> databaseProtocolPacketsSampling = packets.iterator().next().getDatabaseProtocolPackets().iterator();
FieldCountPacket fieldCountPacketSampling = (FieldCountPacket) databaseProtocolPacketsSampling.next();
result.addPacket(fieldCountPacketSampling);
int columnCount = fieldCountPacketSampling.getColumnCount();
++currentSequenceId;
for (int i = 0; i < columnCount; i++) {
result.addPacket(databaseProtocolPacketsSampling.next());
++currentSequenceId;
}
result.addPacket(databaseProtocolPacketsSampling.next());
int currentSequenceId = result.size();
++currentSequenceId;
return result;
}
/**
* Has more Result value.
*
* @return has more result value
* @throws SQLException sql exception
*/
public boolean hasMoreResultValue() throws SQLException {
if (!hasMoreResultValueFlag) {
return false;
}
if (!mergedResult.next()) {
hasMoreResultValueFlag = false;
cleanJDBCResources();
}
return true;
}
/**
* Get result value.
*
* @return database protocol packet
*/
public DatabaseProtocolPacket getResultValue() {
if (!hasMoreResultValueFlag) {
return new EofPacket(++currentSequenceId, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue());
}
try {
while (mergedResult.next()) {
List<Object> data = new ArrayList<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
data.add(mergedResult.getValue(i, Object.class));
}
result.addPacket(new BinaryResultSetRowPacket(++currentSequenceId, columnCount, data, columnTypes));
List<Object> data = new ArrayList<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
data.add(mergedResult.getValue(i, Object.class));
}
return new BinaryResultSetRowPacket(++currentSequenceId, columnCount, data, columnTypes);
} catch (final SQLException ex) {
return new CommandResponsePackets(new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage()));
return new ErrPacket(1, ex.getErrorCode(), "", ex.getSQLState(), ex.getMessage());
}
}
private void cleanJDBCResources() {
for (ResultSet each : resultSets) {
if (null != each) {
try {
each.close();
} catch (final SQLException ignore) {
}
}
}
for (Connection each : connections) {
if (null != each) {
try {
each.close();
} catch (final SQLException ignore) {
}
}
}
result.addPacket(new EofPacket(++currentSequenceId, 0, StatusFlag.SERVER_STATUS_AUTOCOMMIT.getValue()));
return result;
}
}
......@@ -19,6 +19,7 @@ package io.shardingjdbc.proxy.backend.mysql;
import io.shardingjdbc.core.merger.QueryResult;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.constant.ColumnType;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandResponsePackets;
import io.shardingjdbc.proxy.transport.mysql.packet.command.statement.execute.BinaryResultSetRowPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.command.text.query.ColumnDefinition41Packet;
......@@ -26,9 +27,13 @@ import io.shardingjdbc.proxy.transport.mysql.packet.command.text.query.FieldCoun
import lombok.RequiredArgsConstructor;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
......@@ -41,15 +46,19 @@ public final class MySQLPacketStatementExecuteQueryResult implements QueryResult
private final int columnCount;
private final List<ColumnType> columnTypes;
private final Map<Integer, String> columnIndexAndLabelMap;
private final Map<String, Integer> columnLabelAndIndexMap;
private final Iterator<DatabaseProtocolPacket> data;
private final ResultSet resultSet;
private int currentSequenceId;
private BinaryResultSetRowPacket currentRow;
public MySQLPacketStatementExecuteQueryResult(final CommandResponsePackets packets) {
public MySQLPacketStatementExecuteQueryResult(final CommandResponsePackets packets, final ResultSet resultSet, final List<ColumnType> columnTypes) {
Iterator<DatabaseProtocolPacket> packetIterator = packets.getDatabaseProtocolPackets().iterator();
columnCount = ((FieldCountPacket) packetIterator.next()).getColumnCount();
columnIndexAndLabelMap = new HashMap<>(columnCount, 1);
......@@ -59,15 +68,18 @@ public final class MySQLPacketStatementExecuteQueryResult implements QueryResult
columnIndexAndLabelMap.put(i, columnDefinition41Packet.getName());
columnLabelAndIndexMap.put(columnDefinition41Packet.getName(), i);
}
packetIterator.next();
data = packetIterator;
this.resultSet = resultSet;
this.columnTypes = columnTypes;
}
@Override
public boolean next() {
DatabaseProtocolPacket databaseProtocolPacket = data.next();
if (databaseProtocolPacket instanceof BinaryResultSetRowPacket) {
currentRow = (BinaryResultSetRowPacket) databaseProtocolPacket;
public boolean next() throws SQLException {
if (resultSet.next()) {
List<Object> data = new ArrayList<>(columnCount);
for (int i = 1; i <= columnCount; i++) {
data.add(resultSet.getObject(i));
}
currentRow = new BinaryResultSetRowPacket(++currentSequenceId, columnCount, data, columnTypes);
return true;
}
return false;
......
......@@ -69,9 +69,11 @@ public final class MySQLFrontendHandler extends FrontendHandler {
int sequenceId = mysqlPacketPayload.readInt1();
CommandPacket commandPacket = CommandPacketFactory.getCommandPacket(sequenceId, mysqlPacketPayload);
for (DatabaseProtocolPacket each : commandPacket.execute().getDatabaseProtocolPackets()) {
context.write(each);
context.writeAndFlush(each);
}
while (commandPacket.hasMoreResultValue()) {
context.writeAndFlush(commandPacket.getResultValue());
}
context.flush();
}
});
}
......
......@@ -33,6 +33,7 @@ import java.util.Date;
* @see <a href="https://dev.mysql.com/doc/internals/en/binary-protocol-value.html">binary protocol value</a>
*
* @author zhangliang
* @author zhangyonglun
*/
@RequiredArgsConstructor
@Getter
......
......@@ -17,6 +17,7 @@
package io.shardingjdbc.proxy.transport.mysql.packet.command;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacket;
/**
......@@ -36,4 +37,18 @@ public abstract class CommandPacket extends MySQLPacket {
* @return result packets to be sent
*/
public abstract CommandResponsePackets execute();
/**
* Has more result value.
*
* @return has more result value
*/
public abstract boolean hasMoreResultValue();
/**
* Get result value.
*
* @return result to be sent
*/
public abstract DatabaseProtocolPacket getResultValue();
}
......@@ -17,6 +17,7 @@
package io.shardingjdbc.proxy.transport.mysql.packet.command;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.generic.ErrPacket;
......@@ -50,4 +51,14 @@ public final class UnsupportedCommandPacket extends CommandPacket {
@Override
public void write(final MySQLPacketPayload mysqlPacketPayload) {
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
......@@ -17,6 +17,7 @@
package io.shardingjdbc.proxy.transport.mysql.packet.command.statement.close;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandResponsePackets;
......@@ -47,4 +48,14 @@ public class ComStmtClosePacket extends CommandPacket {
log.debug("COM_STMT_CLOSE received for Sharding-Proxy: {}", statementId);
return new CommandResponsePackets(new DummyPacket());
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
......@@ -23,6 +23,7 @@ import io.shardingjdbc.core.parsing.SQLParsingEngine;
import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
import io.shardingjdbc.proxy.backend.common.StatementExecuteBackendHandler;
import io.shardingjdbc.proxy.config.ShardingRuleRegistry;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.constant.ColumnType;
import io.shardingjdbc.proxy.transport.mysql.constant.NewParametersBoundFlag;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
......@@ -32,6 +33,7 @@ import io.shardingjdbc.proxy.transport.mysql.packet.command.statement.PreparedSt
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
......@@ -63,6 +65,8 @@ public final class ComStmtExecutePacket extends CommandPacket {
private final List<PreparedStatementParameter> preparedStatementParameters = new ArrayList<>(32);
private final StatementExecuteBackendHandler statementExecuteBackendHandler;
public ComStmtExecutePacket(final int sequenceId, final MySQLPacketPayload mysqlPacketPayload) {
super(sequenceId);
statementId = mysqlPacketPayload.readInt4();
......@@ -77,6 +81,7 @@ public final class ComStmtExecutePacket extends CommandPacket {
}
newParametersBoundFlag = NewParametersBoundFlag.valueOf(mysqlPacketPayload.readInt1());
setParameterList(mysqlPacketPayload, numParameters, newParametersBoundFlag);
statementExecuteBackendHandler = new StatementExecuteBackendHandler(preparedStatementParameters, statementId, DatabaseType.MySQL, true);
}
private void setParameterList(final MySQLPacketPayload mysqlPacketPayload, final int numParameters, final NewParametersBoundFlag newParametersBoundFlag) {
......@@ -144,6 +149,28 @@ public final class ComStmtExecutePacket extends CommandPacket {
@Override
public CommandResponsePackets execute() {
log.debug("COM_STMT_EXECUTE received for Sharding-Proxy: {}", statementId);
return new StatementExecuteBackendHandler(preparedStatementParameters, statementId, DatabaseType.MySQL, true).execute();
return statementExecuteBackendHandler.execute();
}
/**
* Has more Result value.
*
* @return has more result value
*/
public boolean hasMoreResultValue() {
try {
return statementExecuteBackendHandler.hasMoreResultValue();
} catch (final SQLException ex) {
return false;
}
}
/**
* Get result value.
*
* @return database protocol packet
*/
public DatabaseProtocolPacket getResultValue() {
return statementExecuteBackendHandler.getResultValue();
}
}
......@@ -24,6 +24,7 @@ import io.shardingjdbc.core.parsing.parser.sql.SQLStatement;
import io.shardingjdbc.core.parsing.parser.sql.dml.insert.InsertStatement;
import io.shardingjdbc.core.parsing.parser.sql.dql.select.SelectStatement;
import io.shardingjdbc.proxy.config.ShardingRuleRegistry;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.constant.ColumnType;
import io.shardingjdbc.proxy.transport.mysql.constant.StatusFlag;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
......@@ -75,6 +76,16 @@ public final class ComStmtPreparePacket extends CommandPacket {
return result;
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
private int getNumColumns(final SQLStatement sqlStatement) {
if (sqlStatement instanceof SelectStatement) {
// TODO select * cannot know items num
......
......@@ -20,6 +20,7 @@ package io.shardingjdbc.proxy.transport.mysql.packet.command.text.fieldlist;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.core.constant.ShardingConstant;
import io.shardingjdbc.proxy.backend.common.SQLExecuteBackendHandler;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacketType;
......@@ -60,4 +61,14 @@ public final class ComFieldListPacket extends CommandPacket {
// TODO use common database type
return new SQLExecuteBackendHandler(sql, DatabaseType.MySQL, true).execute();
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
......@@ -18,6 +18,7 @@
package io.shardingjdbc.proxy.transport.mysql.packet.command.text.initdb;
import io.shardingjdbc.core.constant.ShardingConstant;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.constant.StatusFlag;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacket;
......@@ -57,4 +58,14 @@ public final class ComInitDbPacket extends CommandPacket {
}
return new CommandResponsePackets(new ErrPacket(getSequenceId() + 1, 1049, "", "", String.format("Unknown database '%s'", schemaName)));
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
......@@ -19,6 +19,7 @@ package io.shardingjdbc.proxy.transport.mysql.packet.command.text.query;
import io.shardingjdbc.core.constant.DatabaseType;
import io.shardingjdbc.proxy.backend.common.SQLExecuteBackendHandler;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacket;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandResponsePackets;
......@@ -50,4 +51,14 @@ public final class ComQueryPacket extends CommandPacket {
log.debug("COM_QUERY received for Sharding-Proxy: {}", sql);
return new SQLExecuteBackendHandler(sql, DatabaseType.MySQL, true).execute();
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
......@@ -17,6 +17,7 @@
package io.shardingjdbc.proxy.transport.mysql.packet.command.text.quit;
import io.shardingjdbc.proxy.transport.common.packet.DatabaseProtocolPacket;
import io.shardingjdbc.proxy.transport.mysql.constant.StatusFlag;
import io.shardingjdbc.proxy.transport.mysql.packet.MySQLPacketPayload;
import io.shardingjdbc.proxy.transport.mysql.packet.command.CommandPacket;
......@@ -45,4 +46,14 @@ public final class ComQuitPacket extends CommandPacket {
public void write(final MySQLPacketPayload mysqlPacketPayload) {
mysqlPacketPayload.writeInt1(CommandPacketType.COM_QUIT.getValue());
}
@Override
public boolean hasMoreResultValue() {
return false;
}
@Override
public DatabaseProtocolPacket getResultValue() {
return null;
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册