Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package io.mycat.proxy.packet;
- import io.mycat.beans.mysql.MySQLCapabilityFlags;
- import io.mycat.beans.mysql.MySQLServerStatus;
- import io.mycat.proxy.MycatExpection;
- import java.io.IOException;
- import static io.mycat.proxy.packet.ComQueryState.*;
- import static io.mycat.proxy.packet.MySQLPayloadType.*;
- public interface MySQLPacketResolver extends OkPacket, LongDataPacket, EOFPacket, ErrorPacket, PreparedOKPacket, ColumnDefPacket, MySQLPacketAppendStrategy {
- void setMySQLPacketCallback(MySQLPacketCallback callback);
- MySQLPacketCallback getMySQLPacketCallback();
- public void setPayloadLength(int length);
- public int getPayloadLength();
- byte setPacketId(byte packetId);
- byte getPacketId();
- boolean readFromChannel() throws IOException;
- void writeToChannel() throws IOException;
- boolean hasResolvePayloadType();
- void markedResolvePayloadType(boolean marked);
- int getHead();
- int setHead(int head);
- int setCurrentComQuerySQLType(int type);
- int getCurrentSQLType();
- int setStartPos(int i);
- int getStartPos();
- int setEndPos(int i);
- int getEndPos();
- ComQueryState getState();
- void setState(ComQueryState state);
- void setMySQLpayloadType(MySQLPayloadType type);
- int setColumnCount(int count);
- int getColumnCount();
- boolean clientDeprecateEof();
- MySQLCapabilityFlags capabilityFlags();
- int setRemainsBytes(int remainsBytes);
- int getRemainsBytes();
- public boolean setMultiPacket(boolean c);
- public boolean isMultiPacket();
- public MySQLPacket currentProxybuffer();
- public MySQLPacket currentPayload();
- default void setRequestFininshed(boolean b) {
- setState(b ? FIRST_PACKET : QUERY_PACKET);
- }
- default boolean isRequestFininshed() {
- return getState() != QUERY_PACKET;
- }
- void resetCurrentPayloadMySQLPacket();
- default void reset() {
- setMySQLPacketCallback(MySQLPacketCallback.DEFAULT);
- currentProxybuffer().reset();
- resetCurrentPayloadMySQLPacket();
- setPacketId((byte) -1);
- markedResolvePayloadType(false);
- setHead(0);
- setStartPos(0);
- setEndPos(0);
- setCurrentComQuerySQLType(0);
- setMySQLpayloadType(UNKNOWN);
- setColumnCount(0);
- setRemainsBytes(0);
- setMultiPacket(false);
- setColumnCatalog(null);
- setColumnSchema(null);
- setColumnOrgTable(null);
- setColumnName(null);
- setColumnOrgName(null);
- setColumnNextLength(0);
- setColumnLength(0);
- setColumnFlags(0);
- setColumnDecimals((byte) 0);
- setColumnDefaultValues(null);
- setErrorStage(0);
- setErrorMaxStage(0);
- setErrorProgress(0);
- setErrorProgressInfo(null);
- setErrorMark((byte) 0);
- setErrorSqlState(null);
- setErrorMessage(null);
- setLongDataParamId(0);
- setPreparedOkStatementId(0);
- setPrepareOkColumnsCount(0);
- setPrepareOkParametersCount(0);
- setPreparedOkWarningCount(0);
- setLongDataParamId(0);
- setLongData(null);
- setOkAffectedRows(0);
- setOkLastInsertId(0);
- setOkServerStatus(0);
- setOkWarningCount(0);
- setOkStatusInfo(null);
- setOkSessionStateInfoType((byte) 0);
- setOkSessionStateInfoTypeData(null);
- setOkMessage(null);
- setEofWarningCount(0);
- setEofServerStatus(0);
- }
- default boolean readMySQLPacketFully() throws IOException {
- MySQLPacket mySQLPacket = currentProxybuffer();
- int wholePakcetSize = mySQLPacket.packetReadEndIndex() - mySQLPacket.packetReadStartIndex();
- if (wholePakcetSize < 4) return false;
- int startIndex = mySQLPacket.packetReadStartIndex();
- int length = (int) mySQLPacket.getFixInt(startIndex, 3);
- System.out.println("payloadLength:" + length);
- setPayloadLength(length);
- byte packetId = mySQLPacket.getByte(startIndex + 3);
- System.out.println("========full====packetId=========");
- setPacketId(packetId);
- System.out.println(packetId);
- System.out.println("======full======packetId=========");
- byte andIncrementPacketId = getAndIncrementPacketId();
- if (packetId != andIncrementPacketId) {
- throw new MycatExpection("");
- }
- boolean multiPacket = length == 0xffffff;
- boolean isFirstPacket = false;
- boolean isEnd = !multiPacket;
- int packetLength = length;
- if (multiPacket) {
- packetLength = 0xffffff;
- } else {
- packetLength = packetLength + 4;
- }
- if (packetLength <= (wholePakcetSize)) {
- setStartPos(startIndex);
- setEndPos(startIndex + packetLength);
- if (!isMultiPacket()) {
- if (length > 0) {
- int aByte = mySQLPacket.getByte(startIndex + 4) & 0xff;
- System.out.println("=======full=====head=========");
- System.out.println(aByte);
- System.out.println("--------full=====head-----------------------");
- setHead(aByte);
- markedResolvePayloadType(false);
- isFirstPacket = true;
- }
- }
- setMultiPacket(multiPacket);
- if (isFirstPacket && isEnd) {
- appendFirstPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (!isFirstPacket && isEnd) {
- appendEndMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (isFirstPacket && !isEnd) {
- appendFirstMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (!isFirstPacket && !isEnd) {
- appendAfterMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- }
- if (isEnd) {
- resolvePayloadType(getHead(), true, true, currentPayload(), getPayloadLength());
- }
- return !multiPacket;
- } else {
- return false;
- }
- }
- default byte getAndIncrementPacketId() {
- byte packetId = getPacketId();
- setPacketId((byte) (packetId + 1));
- return packetId;
- }
- default byte incrementPacketIdAndGet() {
- byte packetId = getPacketId();
- return setPacketId((byte) (packetId + 1));
- }
- default boolean readMySQLPacket() throws IOException {
- MySQLPacket mySQLPacket = currentProxybuffer();
- boolean needWholePacket = getState().isNeedFull();
- if (needWholePacket) {
- System.out.println("readMySQLPacketFully");
- return readMySQLPacketFully();
- } else {
- System.out.println("readMySQLPacket");
- int startIndex = mySQLPacket.packetReadStartIndex();
- int endIndex = mySQLPacket.packetReadEndIndex();
- int receiveSize = endIndex - startIndex;
- int remains = getRemainsBytes();
- boolean multiPacket;
- boolean isFirstPacket = false;
- if (remains == 0) {
- if (receiveSize < 4) return false;
- int payloadLength = (int) mySQLPacket.getFixInt(startIndex, 3);
- if (payloadLength == 0) {
- setRemainsBytes(0);
- setPayloadLength(0);
- setMultiPacket(false);
- setStartPos(startIndex);
- setEndPos(startIndex + 3);
- return true;
- }
- int aByte = mySQLPacket.getByte(startIndex + 4) & 0xff;
- if (aByte == 0xfe || aByte == 0x00) {
- return readMySQLPacketFully();
- }
- System.out.println("payloadLength:" + payloadLength);
- setPayloadLength(payloadLength);
- multiPacket = setMultiPacket(payloadLength == 0xffffff);
- if (multiPacket) {
- payloadLength = 0xffffff;
- } else {
- payloadLength = payloadLength + 4;
- }
- markedResolvePayloadType(false);
- byte packetId = mySQLPacket.getByte(startIndex + 3);
- System.out.println("------------packetId--------------------");
- System.out.println(packetId);
- System.out.println("-----------packetId--------------------");
- setPacketId(packetId);
- byte andIncrementPacketId = getAndIncrementPacketId();
- if (packetId != andIncrementPacketId || packetId < 0) {
- throw new MycatExpection("");
- }
- System.out.println(aByte);
- setHead(aByte);
- isFirstPacket = true;
- if (payloadLength < receiveSize) {
- setStartPos(startIndex);
- setEndPos(startIndex + payloadLength);
- remains = 0;
- } else {
- remains = payloadLength - receiveSize;
- setStartPos(startIndex);
- setEndPos(startIndex + receiveSize);
- }
- } else {
- if (receiveSize >= remains) {
- setStartPos(startIndex);
- setEndPos(startIndex + remains);
- remains = 0;
- } else {
- remains -= receiveSize;
- setStartPos(startIndex);
- setEndPos(startIndex + receiveSize);
- }
- multiPacket = isMultiPacket();
- }
- setRemainsBytes(remains);
- boolean isEnd = !multiPacket;
- if (isFirstPacket && isEnd) {
- appendFirstPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (!isFirstPacket && isEnd) {
- appendEndMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (isFirstPacket && !isEnd) {
- appendFirstMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- } else if (!isFirstPacket && !isEnd) {
- appendAfterMultiPacket(currentPayload(), mySQLPacket, getStartPos(), getEndPos(), getRemainsBytes());
- }
- if (isEnd) {
- resolvePayloadType(getHead(), false, true, currentPayload(), getPayloadLength());
- }
- return true;
- }
- }
- default public void resolvePayloadType(int head, boolean isPacketFinished, boolean parse, MySQLPacket mySQLPacket, int wholePacketLength) {
- MySQLPacketCallback callback = getMySQLPacketCallback();
- if (hasResolvePayloadType()) {
- return;
- } else {
- markedResolvePayloadType(true);
- }
- switch (getState()) {
- case QUERY_PACKET: {
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- if (head == 18) {
- int statementId = (int) mySQLPacket.readFixInt(4);
- setLongDataStatementId(statementId);
- int paramId = (int) mySQLPacket.readFixInt(2);
- setLongDataParamId(paramId);
- setLongData(mySQLPacket.getEOFStringBytes(mySQLPacket.packetReadStartIndex()));
- setMySQLpayloadType(MySQLPayloadType.SEND_LONG_DATA);
- setState(QUERY_PACKET);
- setRequestFininshed(true);
- callback.onRequest(mySQLPacket, getStartPos(), getEndPos());
- return;
- } else if (head == 25) {
- setMySQLpayloadType(MySQLPayloadType.COM_STMT_CLOSE);
- setState(QUERY_PACKET);
- setRequestFininshed(true);
- callback.onRequest(mySQLPacket, getStartPos(), getEndPos());
- return;
- } else {
- setMySQLpayloadType(MySQLPayloadType.UNKNOWN);
- setCurrentComQuerySQLType(head);
- setState(FIRST_PACKET);
- setRequestFininshed(true);
- }
- callback.onRequest(mySQLPacket, getStartPos(), getEndPos());
- return;
- }
- case FIRST_PACKET: {
- if (!isPacketFinished) throw new MycatExpection("unknown state!");
- if (head == 0xff) {
- setMySQLpayloadType(MySQLPayloadType.ERROR);
- setState(ComQueryState.COMMAND_END);
- callback.onError(mySQLPacket, getStartPos(), getEndPos());
- callback.onRowFinished();
- } else if (head == 0x00) {
- if (getCurrentSQLType() == 22 && wholePacketLength == 16 && getPacketId() == 1) {
- resolvePrepareOkPacket(mySQLPacket, isPacketFinished);
- callback.onPrepareOk(mySQLPacket, getStartPos(), getEndPos());
- return;
- } else {
- setMySQLpayloadType(MySQLPayloadType.OK);
- setOkServerStatus(okPacketReadServerStatus(mySQLPacket));
- callback.onOk(mySQLPacket, getStartPos(), getEndPos());
- if (hasMoreResult(getOkServerStatus())) {
- setState(FIRST_PACKET);
- } else {
- setState(ComQueryState.COMMAND_END);
- callback.onRowFinished();
- }
- return;
- }
- } else if (head == 0xfb) {
- setState(ComQueryState.LOCAL_INFILE_FILE_CONTENT);
- setMySQLpayloadType(LOCAL_INFILE_REQUEST);
- return;
- } else if (head == 0xfe) {
- setMySQLpayloadType(EOF);
- setOkServerStatus(eofPacketReadStatus(mySQLPacket));
- setState(ComQueryState.COMMAND_END);
- callback.onEof(mySQLPacket, getStartPos(), getEndPos());
- return;
- } else {
- setColumnCount((int) mySQLPacket.getLenencInt(getStartPos() + MySQLPacket.getPacketHeaderSize()));
- setMySQLpayloadType(MySQLPayloadType.COLUMN_COUNT);
- setState(ComQueryState.COLUMN_DEFINITION);
- callback.onColumnCount(mySQLPacket, getStartPos(), getEndPos());
- }
- return;
- }
- case COLUMN_DEFINITION: {
- if (setColumnCount(getColumnCount() - 1) == 0) {
- setState(!clientDeprecateEof() ? ComQueryState.COLUMN_END_EOF : ComQueryState.RESULTSET_ROW);
- }
- setMySQLpayloadType(MySQLPayloadType.COLUMN_DEFINITION);
- callback.onColumnDef(mySQLPacket, getStartPos(), getEndPos());
- return;
- }
- case COLUMN_END_EOF: {
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- setOkServerStatus(eofPacketReadStatus(mySQLPacket));
- setMySQLpayloadType(EOF);
- setState(ComQueryState.RESULTSET_ROW);
- callback.onColumnDefEof(mySQLPacket, getStartPos(), getEndPos());
- return;
- }
- case RESULTSET_ROW: {
- if (head == 0x00) {
- setMySQLpayloadType(MySQLPayloadType.BINARY_RESULTSET_ROW);
- callback.onBinaryRow(mySQLPacket, getStartPos(), getEndPos());
- } else if (head == 0xfe && wholePacketLength < 0xffffff) {
- resolveResultsetRowEnd(mySQLPacket, isPacketFinished);
- } else if (head == 0xff) {
- setMySQLpayloadType(MySQLPayloadType.ERROR);
- setState(ComQueryState.COMMAND_END);
- callback.onRowError(mySQLPacket, getStartPos(), getEndPos());
- callback.onRowFinished();
- } else {
- setMySQLpayloadType(MySQLPayloadType.TEXT_RESULTSET_ROW);
- //text resultset row
- callback.onTextRow(mySQLPacket, getStartPos(), getEndPos());
- }
- break;
- }
- // case RESULTSET_ROW_END:
- // resolveResultsetRowEnd(mySQLPacket, isPacketFinished);
- // break;
- case PREPARE_FIELD:
- case PREPARE_FIELD_EOF:
- case PREPARE_PARAM:
- case PREPARE_PARAM_EOF:
- resolvePrepareResponse(mySQLPacket, head, isPacketFinished);
- return;
- case LOCAL_INFILE_FILE_CONTENT:
- if (wholePacketLength == 4) {
- setState(ComQueryState.LOCAL_INFILE_OK_PACKET);
- setMySQLpayloadType(LOCAL_INFILE_EMPTY_PACKET);
- return;
- } else {
- setState(ComQueryState.LOCAL_INFILE_FILE_CONTENT);
- setMySQLpayloadType(LOCAL_INFILE_CONTENT_OF_FILENAME);
- return;
- }
- case LOCAL_INFILE_OK_PACKET:
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- setMySQLpayloadType(MySQLPayloadType.OK);
- setOkServerStatus(okPacketReadServerStatus(mySQLPacket));
- setState(ComQueryState.COMMAND_END);
- return;
- case COMMAND_END: {
- System.out.println("--------------");
- }
- return;
- default: {
- if (!isPacketFinished) {
- throw new RuntimeException("unknown state!");
- } else {
- }
- }
- }
- }
- default public void setResponseFinished(boolean b) {
- setState(b ? ComQueryState.COMMAND_END : FIRST_PACKET);
- }
- default public boolean isResponseFinished() {
- return getState() == ComQueryState.COMMAND_END;
- }
- default public int eofPacketReadStatus(MySQLPacket buffer) {
- int bpStartIndex = buffer.packetReadStartIndex();
- int bpEndIndex = buffer.packetReadEndIndex();
- buffer.packetReadStartIndex(getStartPos());
- buffer.packetReadStartIndex(getEndPos());
- //7 = packetLength(3) + packetId(1) + pkgType(1) + warningCount(2)
- // buffers.skipInReading(7);
- int i = setOkServerStatus((int) buffer.getFixInt(7, 2));//status
- buffer.packetReadStartIndex(bpStartIndex);
- buffer.packetReadEndIndex(bpEndIndex);
- return i;
- }
- default public int okPacketReadServerStatus(MySQLPacket buffer) {
- int bpStartIndex = buffer.packetReadStartIndex();
- int bpEndIndex = buffer.packetReadEndIndex();
- buffer.packetReadStartIndex(getStartPos() + 4);
- buffer.packetReadEndIndex(getEndPos());
- byte header = buffer.readByte();
- assert (0x00 == header) || (0xfe == header);
- int serverStatus = 0;
- setOkAffectedRows(buffer.readLenencInt());//affectedRows
- setOkLastInsertId(buffer.readLenencInt());//lastInsertId
- MySQLCapabilityFlags capabilityFlags = capabilityFlags();
- if (capabilityFlags.isClientProtocol41() || capabilityFlags.isKnowsAboutTransactions()) {
- setOkServerStatus(serverStatus = (int) buffer.readFixInt(2));
- buffer.packetReadStartIndex(bpStartIndex);
- buffer.packetReadEndIndex(bpEndIndex);
- return serverStatus;
- }
- throw new java.lang.RuntimeException("OKPacket readServerStatus error ");
- }
- //
- // default public void okPacketReadPayload(MySQLPacket buffers) {
- // byte header = buffers.readByte();
- // assert (0x00 == header) || (0xfe == header);
- // setOkAffectedRows(buffers.readLenencInt());
- // setOkLastInsertId(buffers.readLenencInt());
- //
- // MySQLCapabilityFlags capabilityFlags = capabilityFlags();
- // if (capabilityFlags.isClientProtocol41()) {
- // setOkServerStatus((int) buffers.readFixInt(2));
- // setOkWarningCount((int) buffers.readFixInt(2));
- //
- // } else if (capabilityFlags.isKnowsAboutTransactions()) {
- // setOkServerStatus((int) buffers.readFixInt(2));
- // }
- // if (capabilityFlags.isSessionVariableTracking()) {
- // setOkStatusInfo(buffers.readLenencBytes());
- // if ((getOkServerStatus() & MySQLServerStatus.STATE_CHANGED) != 0) {
- // setOkSessionStateInfoType(buffers.readByte());
- // setOkSessionStateInfoTypeData(buffers.readLenencBytes());
- // }
- // } else {
- // setOkMessage(buffers.readEOFStringBytes());
- // }
- // }
- default void resolveResultsetRowEnd(MySQLPacket mySQLPacket, boolean isPacketFinished) {
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- if (clientDeprecateEof()) {
- setMySQLpayloadType(MySQLPayloadType.OK);
- setOkServerStatus(okPacketReadServerStatus(mySQLPacket));
- getMySQLPacketCallback().onRowOk(mySQLPacket, getStartPos(), getEndPos());
- } else {
- setMySQLpayloadType(EOF);
- setOkServerStatus(eofPacketReadStatus(mySQLPacket));
- getMySQLPacketCallback().onRowEof(mySQLPacket, getStartPos(), getEndPos());
- }
- if (hasMoreResult(getOkServerStatus())) {
- setState(FIRST_PACKET);
- } else {
- setState(ComQueryState.COMMAND_END);
- getMySQLPacketCallback().onRowFinished();
- }
- }
- default void resolvePrepareOkPacket(MySQLPacket buffer, boolean isPacketFinished) {
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- int bpStartIndex = buffer.packetReadStartIndex();
- int bpEndIndex = buffer.packetReadEndIndex();
- buffer.packetReadStartIndex(getStartPos() + 4);
- buffer.packetReadStartIndex(getEndPos());
- setErrorStage(buffer.readByte());
- setLongDataStatementId(buffer.readFixInt(4));
- setPrepareOkColumnsCount((int) buffer.readFixInt(2));
- setPrepareOkParametersCount((int) buffer.readFixInt(2));
- setMySQLpayloadType(MySQLPayloadType.PREPARE_OK);
- buffer.packetReadStartIndex(bpStartIndex);
- buffer.packetReadEndIndex(bpEndIndex);
- if (this.getPrepareOkColumnsCount() == 0 && getPrepareOkParametersCount() == 0) {
- setState(ComQueryState.COMMAND_END);
- return;
- } else if (this.getPrepareOkColumnsCount() > 0) {
- setState(ComQueryState.PREPARE_FIELD);
- return;
- }
- if (getPrepareOkParametersCount() > 0) {
- setState(ComQueryState.PREPARE_PARAM);
- return;
- }
- throw new RuntimeException("unknown state!");
- }
- public default void columnDefPacketReadPayload(MySQLPacket buffer) {
- setColumnCatalog(buffer.readLenencStringBytes());
- setColumnSchema(buffer.readLenencStringBytes());
- setColumnTable(buffer.readLenencStringBytes());
- setColumnOrgTable(buffer.readLenencStringBytes());
- setColumnName(buffer.readLenencStringBytes());
- setColumnOrgName(buffer.readLenencStringBytes());
- setColumnNextLength(buffer.readByte());
- setColumnCharsetSet((int) buffer.readFixInt(2));
- setColumnLength((int) buffer.readFixInt(4));
- setColumnType((byte) (buffer.readByte() & 0xff));
- setColumnFlags((int) buffer.readFixInt(2));
- setColumnDecimals(buffer.readByte());
- if (buffer.readByte() != 0x00 && buffer.readByte() != 0x00) {//filler
- throw new IllegalArgumentException("ColumnDefPacket read fail!!!:" + this);
- }
- if (getCurrentSQLType() == 4) {//COM_FIELD_LIST
- setColumnDefaultValues(buffer.readLenencStringBytes());
- }
- }
- default void resolvePrepareResponse(MySQLPacket proxyBuf, int head, boolean isPacketFinished) {
- if (!isPacketFinished) throw new RuntimeException("unknown state!");
- MySQLPacketCallback callback = getMySQLPacketCallback();
- PreparedOKPacket p = this;
- if (p.getPrepareOkColumnsCount() > 0 && (getState() == ComQueryState.PREPARE_FIELD)) {
- p.setPrepareOkColumnsCount(p.getPrepareOkColumnsCount() - 1);
- setMySQLpayloadType(MySQLPayloadType.COLUMN_DEFINITION);
- setState(ComQueryState.PREPARE_FIELD);
- callback.onPrepareOkColumnDef(proxyBuf, getStartPos(), getEndPos());
- if (p.getPrepareOkColumnsCount() == 0) {
- if (!clientDeprecateEof()) {
- setState(ComQueryState.PREPARE_FIELD_EOF);
- } else if (p.getPrepareOkParametersCount() > 0) {
- setState(ComQueryState.PREPARE_PARAM);
- } else {
- setState(ComQueryState.COMMAND_END);
- }
- }
- return;
- } else if (getState() == ComQueryState.PREPARE_FIELD_EOF && head == 0xFE) {
- setOkServerStatus(eofPacketReadStatus(proxyBuf));
- setMySQLpayloadType(EOF);
- setState(ComQueryState.PREPARE_PARAM);
- callback.onPrepareOkColumnDefEof(proxyBuf, getStartPos(), getEndPos());
- return;
- } else if (p.getPrepareOkParametersCount() > 0 && getState() == ComQueryState.PREPARE_PARAM) {
- p.setPrepareOkParametersCount(p.getPrepareOkParametersCount() - 1);
- setMySQLpayloadType(MySQLPayloadType.COLUMN_DEFINITION);
- setState(ComQueryState.PREPARE_PARAM);
- callback.onPrepareOkParameterDef(proxyBuf, getStartPos(), getEndPos());
- if (p.getPrepareOkParametersCount() == 0) {
- if (!clientDeprecateEof()) {
- setState(ComQueryState.PREPARE_PARAM_EOF);
- return;
- } else {
- setState(ComQueryState.COMMAND_END);
- return;
- }
- } else {
- return;
- }
- } else if (p.getPrepareOkColumnsCount() == 0 && p.getPrepareOkParametersCount() == 0 && !clientDeprecateEof() && ComQueryState.PREPARE_PARAM_EOF == getState() && head == 0xFE) {
- setOkServerStatus(eofPacketReadStatus(proxyBuf));
- setMySQLpayloadType(EOF);
- setState(ComQueryState.COMMAND_END);
- callback.onPrepareOkParameterDefEof(proxyBuf, getStartPos(), getEndPos());
- return;
- }
- throw new RuntimeException("unknown state!");
- }
- public static boolean hasMulitQuery(int serverStatus) {
- return MySQLServerStatus.statusCheck(serverStatus, MySQLServerStatus.MULIT_QUERY);
- }
- public static boolean hasMoreResult(int serverStatus) {
- return MySQLServerStatus.statusCheck(serverStatus, MySQLServerStatus.MORE_RESULTS);
- }
- public static boolean hasResult(int serverStatus) {
- return (hasMoreResult(serverStatus) || hasMulitQuery(serverStatus));
- }
- public static boolean hasFatch(int serverStatus) {
- // 检查是否通过fatch执行的语句
- return MySQLServerStatus.statusCheck(serverStatus, MySQLServerStatus.CURSOR_EXISTS);
- }
- public static boolean hasTrans(int serverStatus) {
- // 检查是否通过fatch执行的语句
- boolean trans = MySQLServerStatus.statusCheck(serverStatus, MySQLServerStatus.IN_TRANSACTION)
- || MySQLServerStatus.statusCheck(serverStatus, MySQLServerStatus.IN_TRANS_READONLY);
- return trans;
- }
- MySQLPayloadType getPailoadType();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement