public Fields(FieldPacket[] fieldPackets) { FieldPackets = fieldPackets; for (int i = 0; i < FieldPackets.Length; i++) { dict[FieldPackets[i].Name] = i; } }
object Convert(FieldPacket field, string val) { if (val == null) { return null; } if ((field.Flags & ColumnFlags.UNSIGNED) > 0) { switch (field.Type) { case MySqlDbType.Int16: return UInt16.Parse(val); case MySqlDbType.Int24: return UInt32.Parse(val); case MySqlDbType.Int32: return UInt32.Parse(val); case MySqlDbType.Int64: return UInt64.Parse(val); case MySqlDbType.Byte: return val == "1"; default: throw new Exception(string.Format("(Unsigned) Not supported type {0}:{1}", field.Type, val)); } } else { switch (field.Type) { case MySqlDbType.Int16: return Int16.Parse(val); case MySqlDbType.Int24: return Int32.Parse(val); case MySqlDbType.Int32: return Int32.Parse(val); case MySqlDbType.Int64: return Int64.Parse(val); case MySqlDbType.Byte: return Byte.Parse(val); case MySqlDbType.Float: return float.Parse(val); case MySqlDbType.Date: return DateTime.Parse(val); case MySqlDbType.DateTime: return DateTime.Parse(val); case MySqlDbType.String: case MySqlDbType.VarChar: case MySqlDbType.Blob: return val; default: throw new Exception(string.Format("Not supported type {0}:{1}", field.Type, val)); } } }
IEnumerable <bool> ProcessRequest(byte packetNumber, byte[] packet) { var queryCommand = commands.Peek().Callback; packetReader.NewPacket(packet); var type = ResponsePacket.GetType(packet); if (type != ResponsePacketType.Other) { var responsePacket = ResponsePacket.Parse(packetReader); queryCommand.FireResponse(responsePacket); FireNextCommand(); yield return(true); yield break; } long length = packetReader.ReadLength(); byte[] data; byte num; FieldPacket[] fields = new FieldPacket[length]; for (int i = 0; i < length; i++) { while (!ReadPacket(out num, out data)) { yield return(false); } packetReader.NewPacket(data); var field = FieldPacket.Parse(packetReader); fields[i] = field; } var f = new Fields(fields); while (!ReadPacket(out num, out data)) { yield return(false); } queryCommand.FireFields(f.FieldPackets); packetReader.NewPacket(data); // TODO: check if the packet is in place EOFPacket.Parse(packetReader); while (true) { while (!ReadPacket(out num, out data)) { yield return(false); } if (ResponsePacket.GetType(data) == ResponsePacketType.EOF) { queryCommand.FireEnd(); FireNextCommand(); yield return(true); yield break; } packetReader.NewPacket(data); string[] values = new string[length]; for (int i = 0; i < length; i++) { values[i] = packetReader.ReadLengthString(); } queryCommand.FireRow(new Row(f, values)); } }
IEnumerable<bool> ProcessRequest(byte packetNumber, byte[] packet) { var queryCommand = commands.Peek().Callback; packetReader.NewPacket(packet); var type = ResponsePacket.GetType(packet); if (type != ResponsePacketType.Other) { var responsePacket = ResponsePacket.Parse(packetReader); queryCommand.FireResponse(responsePacket); FireNextCommand(); yield return true; yield break; } long length = packetReader.ReadLength(); byte[] data; byte num; FieldPacket[] fields = new FieldPacket[length]; for (int i = 0; i < length; i++) { while (!ReadPacket(out num, out data)) { yield return false; } packetReader.NewPacket(data); var field = FieldPacket.Parse(packetReader); fields[i] = field; } var f = new Fields(fields); while (!ReadPacket(out num, out data)) { yield return false; } queryCommand.FireFields(f.FieldPackets); packetReader.NewPacket(data); // TODO: check if the packet is in place EOFPacket.Parse(packetReader); while (true) { while (!ReadPacket(out num, out data)) { yield return false; } if (ResponsePacket.GetType(data) == ResponsePacketType.EOF) { queryCommand.FireEnd(); FireNextCommand(); yield return true; yield break; } packetReader.NewPacket(data); string[] values = new string[length]; for (int i = 0; i < length; i++) { values[i] = packetReader.ReadLengthString(); } queryCommand.FireRow(new Row(f, values)); } }
object Convert(FieldPacket field, string val) { if (val == null) { return(null); } if ((field.Flags & ColumnFlags.UNSIGNED) > 0) { switch (field.Type) { case MySqlDbType.Int16: return(UInt16.Parse(val)); case MySqlDbType.Int24: return(UInt32.Parse(val)); case MySqlDbType.Int32: return(UInt32.Parse(val)); case MySqlDbType.Int64: return(UInt64.Parse(val)); case MySqlDbType.Byte: return(val == "1"); default: throw new Exception(string.Format("(Unsigned) Not supported type {0}:{1}", field.Type, val)); } } else { switch (field.Type) { case MySqlDbType.Int16: return(Int16.Parse(val)); case MySqlDbType.Int24: return(Int32.Parse(val)); case MySqlDbType.Int32: return(Int32.Parse(val)); case MySqlDbType.Int64: return(Int64.Parse(val)); case MySqlDbType.Byte: return(Byte.Parse(val)); case MySqlDbType.Float: return(float.Parse(val)); case MySqlDbType.Date: return(DateTime.Parse(val)); case MySqlDbType.DateTime: return(DateTime.Parse(val)); case MySqlDbType.String: case MySqlDbType.VarChar: case MySqlDbType.Blob: return(val); default: throw new Exception(string.Format("Not supported type {0}:{1}", field.Type, val)); } } }