提交 427c66a4 编写于 作者: T tristaZero

Merge branch 'dev' of ssh://github.com/shardingjdbc/sharding-jdbc into dev

......@@ -17,14 +17,32 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.shardingproxy.transport.api.packet.CommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.MySQLPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL command packet.
*
* @author zhangliang
* @author wangkai
*/
public interface MySQLCommandPacket extends MySQLPacket, CommandPacket {
@RequiredArgsConstructor
public abstract class MySQLCommandPacket implements MySQLPacket, CommandPacket {
private final MySQLCommandPacketType type;
@Override
public final void write(final MySQLPacketPayload payload) {
payload.writeInt1(type.getValue());
doWrite(payload);
}
protected void doWrite(final MySQLPacketPayload payload) {
}
@Override
public final int getSequenceId() {
return 0;
}
}
......@@ -24,6 +24,7 @@ import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.MySQLPacke
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin.MySQLOKCommandPacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin.MySQLUnsupportedCommandPacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin.initdb.MySQLComInitDbPacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.close.MySQLComStmtClosePacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.execute.MySQLQueryComStmtExecutePacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.prepare.MySQLComStmtPreparePacketExecutor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.text.fieldlist.MySQLComFieldListPacketExecutor;
......@@ -58,7 +59,7 @@ public final class MySQLCommandPacketExecutorFactory {
case COM_STMT_EXECUTE:
return new MySQLQueryComStmtExecutePacketExecutor();
case COM_STMT_CLOSE:
return new MySQLComFieldListPacketExecutor();
return new MySQLComStmtClosePacketExecutor();
case COM_PING:
return new MySQLOKCommandPacketExecutor();
default:
......
......@@ -69,7 +69,7 @@ public final class MySQLCommandPacketFactory {
case COM_PING:
return new MySQLComPingPacket();
default:
return new MySQLUnsupportedCommandPacket();
return new MySQLUnsupportedCommandPacket(commandPacketType);
}
}
}
......@@ -18,21 +18,16 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
/**
* MySQL unsupported command packet.
* Unsupported command packet for MySQL.
*
* @author zhangliang
*/
public final class MySQLUnsupportedCommandPacket implements MySQLCommandPacket {
public final class MySQLUnsupportedCommandPacket extends MySQLCommandPacket {
@Override
public void write(final MySQLPacketPayload payload) {
}
@Override
public int getSequenceId() {
return 0;
public MySQLUnsupportedCommandPacket(final MySQLCommandPacketType type) {
super(type);
}
}
......@@ -30,7 +30,7 @@ import java.util.Collection;
import java.util.Collections;
/**
* MySQL unsupported command packet executor.
* Unsupported command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -23,28 +23,24 @@ import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.My
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_INIT_DB command packet.
* COM_INIT_DB command packet for MySQL.
*
* @author zhangliang
* @see <a href="https://dev.mysql.com/doc/internals/en/com-init-db.html#packet-COM_INIT_DB">COM_INIT_DB</a>
*
* @author zhangliang
*/
@Getter
public final class MySQLComInitDbPacket implements MySQLCommandPacket {
public final class MySQLComInitDbPacket extends MySQLCommandPacket {
private final String schema;
public MySQLComInitDbPacket(final MySQLPacketPayload payload) {
super(MySQLCommandPacketType.COM_INIT_DB);
schema = payload.readStringEOF();
}
@Override
public void write(final MySQLPacketPayload payload) {
payload.writeInt1(MySQLCommandPacketType.COM_INIT_DB.getValue());
public void doWrite(final MySQLPacketPayload payload) {
payload.writeStringEOF(schema);
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -30,7 +30,7 @@ import java.util.Collection;
import java.util.Collections;
/**
* MySQL COM_INIT_DB command packet executor.
* COM_INIT_DB command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -17,28 +17,19 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin.ping;
import lombok.Getter;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_PING command packet.
* COM_PING command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-ping.html">COM_PING</a>
*
* @author zhangyonglun
*/
@Getter
public final class MySQLComPingPacket implements MySQLCommandPacket {
public final class MySQLComPingPacket extends MySQLCommandPacket {
@Override
public void write(final MySQLPacketPayload payload) {
payload.writeInt1(MySQLCommandPacketType.COM_PING.getValue());
}
@Override
public int getSequenceId() {
return 0;
public MySQLComPingPacket() {
super(MySQLCommandPacketType.COM_PING);
}
}
......@@ -17,28 +17,19 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin.quit;
import lombok.Getter;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_QUIT command packet.
* COM_QUIT command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-quit.html">COM_QUIT</a>
*
* @author zhangliang
*/
@Getter
public final class MySQLComQuitPacket implements MySQLCommandPacket {
public final class MySQLComQuitPacket extends MySQLCommandPacket {
@Override
public void write(final MySQLPacketPayload payload) {
payload.writeInt1(MySQLCommandPacketType.COM_QUIT.getValue());
}
@Override
public int getSequenceId() {
return 0;
public MySQLComQuitPacket() {
super(MySQLCommandPacketType.COM_QUIT);
}
}
......@@ -19,30 +19,23 @@ package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.q
import lombok.Getter;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_STMT_CLOSE command packet.
* COM_STMT_CLOSE command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-stmt-close.html">COM_QUERY</a>
*
* @author zhangyonglun
*/
@Getter
public final class MySQLComStmtClosePacket implements MySQLCommandPacket {
public final class MySQLComStmtClosePacket extends MySQLCommandPacket {
private final int statementId;
public MySQLComStmtClosePacket(final MySQLPacketPayload payload) {
super(MySQLCommandPacketType.COM_STMT_CLOSE);
statementId = payload.readInt4();
}
@Override
public void write(final MySQLPacketPayload payload) {
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -26,7 +26,7 @@ import java.util.Collection;
import java.util.Collections;
/**
* MySQL COM_STMT_CLOSE command packet executor.
* COM_STMT_CLOSE command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -22,6 +22,7 @@ import lombok.Getter;
import org.apache.shardingsphere.shardingproxy.transport.mysql.constant.MySQLColumnType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.constant.MySQLNewParametersBoundFlag;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.MySQLBinaryStatement;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.MySQLBinaryStatementParameterType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.MySQLBinaryStatementRegistry;
......@@ -34,13 +35,13 @@ import java.util.ArrayList;
import java.util.List;
/**
* MySQL COM_STMT_EXECUTE command packet.
* COM_STMT_EXECUTE command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-stmt-execute.html">COM_STMT_EXECUTE</a>
*
* @author zhangyonglun
*/
public final class MySQLQueryComStmtExecutePacket implements MySQLCommandPacket {
public final class MySQLQueryComStmtExecutePacket extends MySQLCommandPacket {
private static final int ITERATION_COUNT = 1;
......@@ -61,6 +62,7 @@ public final class MySQLQueryComStmtExecutePacket implements MySQLCommandPacket
private final List<Object> parameters;
public MySQLQueryComStmtExecutePacket(final MySQLPacketPayload payload) throws SQLException {
super(MySQLCommandPacketType.COM_STMT_EXECUTE);
statementId = payload.readInt4();
binaryStatement = MySQLBinaryStatementRegistry.getInstance().getBinaryStatement(statementId);
flags = payload.readInt1();
......@@ -97,7 +99,7 @@ public final class MySQLQueryComStmtExecutePacket implements MySQLCommandPacket
}
@Override
public void write(final MySQLPacketPayload payload) {
public void doWrite(final MySQLPacketPayload payload) {
payload.writeInt4(statementId);
payload.writeInt1(flags);
payload.writeInt4(ITERATION_COUNT);
......@@ -114,9 +116,4 @@ public final class MySQLQueryComStmtExecutePacket implements MySQLCommandPacket
count++;
}
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -47,7 +47,7 @@ import java.util.LinkedList;
import java.util.List;
/**
* MySQL COM_STMT_EXECUTE command packet executor.
* COM_STMT_EXECUTE command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -18,34 +18,29 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.binary.prepare;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_STMT_PREPARE command packet.
* COM_STMT_PREPARE command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-stmt-prepare.html">COM_STMT_PREPARE</a>
*
* @author zhangliang
*/
@Slf4j
public final class MySQLComStmtPreparePacket implements MySQLCommandPacket {
@Getter
public final class MySQLComStmtPreparePacket extends MySQLCommandPacket {
@Getter
private final String sql;
public MySQLComStmtPreparePacket(final MySQLPacketPayload payload) {
super(MySQLCommandPacketType.COM_STMT_PREPARE);
sql = payload.readStringEOF();
}
@Override
public void write(final MySQLPacketPayload payload) {
public void doWrite(final MySQLPacketPayload payload) {
payload.writeStringEOF(sql);
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -39,7 +39,7 @@ import java.util.Collection;
import java.util.LinkedList;
/**
* MySQL COM_STMT_PREPARE command packet executor.
* COM_STMT_PREPARE command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -23,35 +23,29 @@ import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.My
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_FIELD_LIST command packet.
*
* COM_FIELD_LIST command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-field-list.html">COM_FIELD_LIST</a>
*
* @author zhangliang
* @author wangkai
* @see <a href="https://dev.mysql.com/doc/internals/en/com-field-list.html">COM_FIELD_LIST</a>
*/
@Getter
public final class MySQLComFieldListPacket implements MySQLCommandPacket {
private static final String SQL = "SHOW COLUMNS FROM %s FROM %s";
public final class MySQLComFieldListPacket extends MySQLCommandPacket {
private final String table;
private final String fieldWildcard;
public MySQLComFieldListPacket(final MySQLPacketPayload payload) {
super(MySQLCommandPacketType.COM_FIELD_LIST);
table = payload.readStringNul();
fieldWildcard = payload.readStringEOF();
}
@Override
public void write(final MySQLPacketPayload payload) {
payload.writeInt1(MySQLCommandPacketType.COM_FIELD_LIST.getValue());
public void doWrite(final MySQLPacketPayload payload) {
payload.writeStringNul(table);
payload.writeStringEOF(fieldWildcard);
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -36,7 +36,7 @@ import java.util.Collections;
import java.util.LinkedList;
/**
* MySQL COM_FIELD_LIST packet executor.
* COM_FIELD_LIST packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -18,13 +18,12 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.query.text.query;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacket;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
/**
* MySQL COM_QUERY command packet.
* COM_QUERY command packet for MySQL.
*
* @see <a href="https://dev.mysql.com/doc/internals/en/com-query.html">COM_QUERY</a>
*
......@@ -32,24 +31,18 @@ import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPack
* @author linjiaqi
* @author zhaojun
*/
@RequiredArgsConstructor
@Getter
public final class MySQLComQueryPacket implements MySQLCommandPacket {
public final class MySQLComQueryPacket extends MySQLCommandPacket {
private final String sql;
public MySQLComQueryPacket(final MySQLPacketPayload payload) {
this(payload.readStringEOF());
super(MySQLCommandPacketType.COM_QUERY);
sql = payload.readStringEOF();
}
@Override
public void write(final MySQLPacketPayload payload) {
payload.writeInt1(MySQLCommandPacketType.COM_QUERY.getValue());
public void doWrite(final MySQLPacketPayload payload) {
payload.writeStringEOF(sql);
}
@Override
public int getSequenceId() {
return 0;
}
}
......@@ -45,7 +45,7 @@ import java.util.LinkedList;
import java.util.List;
/**
* MySQL COM_QUERY command packet executor.
* COM_QUERY command packet executor for MySQL.
*
* @author zhangliang
*/
......
......@@ -17,6 +17,7 @@
package org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.admin;
import org.apache.shardingsphere.shardingproxy.transport.mysql.packet.command.MySQLCommandPacketType;
import org.apache.shardingsphere.shardingproxy.transport.mysql.payload.MySQLPacketPayload;
import org.junit.Test;
import org.junit.runner.RunWith;
......@@ -31,7 +32,7 @@ public final class MySQLUnsupportedCommandPacketTest {
@Test
public void assertWrite() {
MySQLUnsupportedCommandPacket actual = new MySQLUnsupportedCommandPacket();
MySQLUnsupportedCommandPacket actual = new MySQLUnsupportedCommandPacket(MySQLCommandPacketType.COM_DEBUG);
actual.write(payload);
}
}
......@@ -25,6 +25,7 @@ import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public final class MySQLComQueryPacketTest {
......@@ -34,7 +35,8 @@ public final class MySQLComQueryPacketTest {
@Test
public void assertWrite() {
MySQLComQueryPacket actual = new MySQLComQueryPacket("SELECT id FROM tbl");
when(payload.readStringEOF()).thenReturn("SELECT id FROM tbl");
MySQLComQueryPacket actual = new MySQLComQueryPacket(payload);
actual.write(payload);
verify(payload).writeInt1(MySQLCommandPacketType.COM_QUERY.getValue());
verify(payload).writeStringEOF("SELECT id FROM tbl");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册