/* * Copyright 1999-2012 Alibaba Group. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.alibaba.cobar.net.mysql; import java.nio.ByteBuffer; import com.alibaba.cobar.mysql.BufferUtil; import com.alibaba.cobar.net.FrontendConnection; /** * <pre> * From server to client, in response to prepared statement initialization packet. * It is made up of: * 1.a PREPARE_OK packet * 2.if "number of parameters" > 0 * (field packets) as in a Result Set Header Packet * (EOF packet) * 3.if "number of columns" > 0 * (field packets) as in a Result Set Header Packet * (EOF packet) * * ----------------------------------------------------------------------------------------- * * Bytes Name * ----- ---- * 1 0 - marker for OK packet * 4 statement_handler_id * 2 number of columns in result set * 2 number of parameters in query * 1 filler (always 0) * 2 warning count * * @see http://dev.mysql.com/doc/internals/en/prepared-statement-initialization-packet.html * </pre> * * @author xianmao.hexm 2012-8-28 */ public class PreparedOkPacket extends MySQLPacket { public byte flag; public long statementId; public int columnsNumber; public int parametersNumber; public byte filler; public int warningCount; public PreparedOkPacket() { this.flag = 0; this.filler = 0; } @Override public ByteBuffer write(ByteBuffer buffer, FrontendConnection c) { int size = calcPacketSize(); buffer = c.checkWriteBuffer(buffer, c.getPacketHeaderSize() + size); BufferUtil.writeUB3(buffer, size); buffer.put(packetId); buffer.put(flag); BufferUtil.writeUB4(buffer, statementId); BufferUtil.writeUB2(buffer, columnsNumber); BufferUtil.writeUB2(buffer, parametersNumber); buffer.put(filler); BufferUtil.writeUB2(buffer, warningCount); return buffer; } @Override public int calcPacketSize() { return 12; } @Override protected String getPacketInfo() { return "MySQL PreparedOk Packet"; } }