Пример #1
0
        public static FieldPacket Parse(PacketReader packetReader)
        {
            return(new FieldPacket()
            {
                Catalog = packetReader.ReadLengthString(),
                Database = packetReader.ReadLengthString(),
                Table = packetReader.ReadLengthString(),
                OriginalTable = packetReader.ReadLengthString(),
                Name = packetReader.ReadLengthString(),
                OriginalName = packetReader.ReadLengthString(),

                Filler = packetReader.ReadByte(),

                CharsetNumber = packetReader.ReadShort(),
                Length = packetReader.ReadInt(),
                Type = (MySqlDbType)packetReader.ReadByte(),
                Flags = (ColumnFlags)packetReader.ReadShort(),
                Decimals = packetReader.ReadByte(),

                Filler2 = packetReader.ReadBytes(2),
                Default = packetReader.ReadLengthBytes()
            });
        }
Пример #2
0
        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));
            }
        }
Пример #3
0
		public static FieldPacket Parse(PacketReader packetReader)
		{
			return new FieldPacket() {
				Catalog       = packetReader.ReadLengthString(),
				Database      = packetReader.ReadLengthString(),
				Table         = packetReader.ReadLengthString(),
				OriginalTable = packetReader.ReadLengthString(),
				Name          = packetReader.ReadLengthString(),
				OriginalName  = packetReader.ReadLengthString(),
				
				Filler = packetReader.ReadByte(),
				
				CharsetNumber = packetReader.ReadShort(),
				Length        = packetReader.ReadInt(),
				Type          = (MySqlDbType)packetReader.ReadByte(),
				Flags         = (ColumnFlags)packetReader.ReadShort(),
				Decimals      = packetReader.ReadByte(),
				
				Filler2 = packetReader.ReadBytes(2),
				Default = packetReader.ReadLengthBytes()
			};
		}