package com.meidusa.amoeba.mysql.net.packet.result;
import java.util.ArrayList;
import java.util.List;
import com.meidusa.amoeba.mysql.net.packet.EOFPacket;
import com.meidusa.amoeba.mysql.net.packet.FieldPacket;
import com.meidusa.amoeba.mysql.net.packet.ResultSetHeaderPacket;
import com.meidusa.amoeba.mysql.net.packet.RowDataPacket;
import com.meidusa.amoeba.net.Connection;
import com.meidusa.amoeba.net.packet.AbstractPacketBuffer;
import com.meidusa.amoeba.net.packet.PacketBuffer;
/**
*
* @author struct
*
*/
public class MysqlResultSetPacket extends ErrorResultPacket {
public ResultSetHeaderPacket resulthead;
public FieldPacket[] fieldPackets;
private List<RowDataPacket> rowList;
private boolean isPrepared;
public boolean isPrepared() {
return isPrepared;
}
public void setPrepared(boolean isPrepared) {
this.isPrepared = isPrepared;
}
private byte[] content;
public void setContent(byte[] content) {
this.content = content;
}
public MysqlResultSetPacket(String query){
}
public void setRowList(List<RowDataPacket> rows){
this.rowList = rows;
}
public synchronized void addRowDataPacket(RowDataPacket row){
if(rowList == null){
rowList = new ArrayList<RowDataPacket>();
}
rowList.add(row);
}
/* (non-Javadoc)
* @see com.meidusa.amoeba.aladdin.io.ResultPacket#wirteToConnection(com.meidusa.amoeba.net.Connection)
*/
public void wirteToConnection(Connection conn){
if(isError()){
super.wirteToConnection(conn);
return;
}
if(content != null){
conn.postMessage(content);
return;
}
PacketBuffer buffer = new AbstractPacketBuffer(2048);
byte paketId = 1;
resulthead.packetId = paketId++;
//write header bytes
AbstractPacketBuffer.appendBufferToWrite(resulthead.toByteBuffer(conn).array(),buffer,conn,false);
//write fields bytes
if(fieldPackets != null){
for(int i=0;i<fieldPackets.length;i++){
fieldPackets[i].packetId = paketId++;
AbstractPacketBuffer.appendBufferToWrite(fieldPackets[i].toByteBuffer(conn).array(),buffer,conn,false);
}
}
//write eof bytes
EOFPacket eof = new EOFPacket();
eof.serverStatus = 2;
eof.warningCount = 0;
eof.packetId = paketId++;
AbstractPacketBuffer.appendBufferToWrite(eof.toByteBuffer(conn).array(),buffer,conn,false);
if(rowList != null && rowList.size()>0){
//write rows bytes
for(RowDataPacket row : rowList){
row.packetId = paketId++;
AbstractPacketBuffer.appendBufferToWrite(row.toByteBuffer(conn).array(),buffer,conn,false);
}
}
//write eof bytes
eof.packetId = paketId++;
AbstractPacketBuffer.appendBufferToWrite(eof.toByteBuffer(conn).array(),buffer,conn,true);
}
}