package fm.liu.timo.manager.response; import java.nio.ByteBuffer; import java.util.ArrayList; import fm.liu.timo.config.ErrorCode; import fm.liu.timo.config.Fields; import fm.liu.timo.manager.ManagerConnection; import fm.liu.timo.mysql.PacketUtil; import fm.liu.timo.mysql.packet.EOFPacket; import fm.liu.timo.mysql.packet.FieldPacket; import fm.liu.timo.mysql.packet.ResultSetHeaderPacket; import fm.liu.timo.mysql.packet.RowDataPacket; import fm.liu.timo.net.connection.FrontendConnection; import fm.liu.timo.util.StringUtil; public class ResponseUtil { public static class Head { public String name; public String desc; public int type = Fields.FIELD_TYPE_VARCHAR; public Head(String name, String desc) { this.name = name; this.desc = desc; } public Head(String name) { this.name = name; this.desc = name; } } public static void write(FrontendConnection c, ArrayList<Head> heads, ArrayList<Object[]> rows) { ByteBuffer buffer = c.allocate(); int size = heads.size(); ResultSetHeaderPacket header = PacketUtil.getHeader(size); byte packetId = 0; header.packetId = ++packetId; buffer = header.write(buffer, c); FieldPacket fielder = new FieldPacket(); for (Head head : heads) { fielder = PacketUtil.getField(head.name, head.type); fielder.packetId = ++packetId; buffer = fielder.write(buffer, c); } EOFPacket eof = new EOFPacket(); eof.packetId = ++packetId; buffer = eof.write(buffer, c); if (rows != null) { for (Object[] values : rows) { RowDataPacket row = new RowDataPacket(size); for (Object value : values) { if (value == null) { value = "NULL"; } row.add(StringUtil.encode(value.toString(), c.getVariables().getCharset())); } row.packetId = ++packetId; buffer = row.write(buffer, c); } } eof.packetId = ++packetId; buffer = eof.write(buffer, c); c.write(buffer); } public static void error(ManagerConnection c) { c.writeErrMessage(ErrorCode.ER_YES, "unsupported statement"); } public static void error(ManagerConnection c, String reason) { c.writeErrMessage(ErrorCode.ER_YES, reason); } }