コード例 #1
0
ファイル: MySqlInt16.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlInt16(true);

              if (length == -1)
            return new MySqlInt16((short)packet.ReadInteger(2));
              else
            return new MySqlInt16(Int16.Parse(packet.ReadString(length)));
        }
コード例 #2
0
ファイル: MySqlSingle.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlSingle(true);

              if (length == -1)
              {
            byte[] b = new byte[4];
            packet.Read(b, 0, 4);
            return new MySqlSingle(BitConverter.ToSingle(b, 0));
              }
              return new MySqlSingle(Single.Parse(packet.ReadString(length),
             CultureInfo.InvariantCulture));
        }
コード例 #3
0
ファイル: MySqlUInt64.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlUInt64(true);

              if (length == -1)
            return new MySqlUInt64(packet.ReadULong(8));
              else
            return new MySqlUInt64(UInt64.Parse(packet.ReadString(length)));
        }
コード例 #4
0
ファイル: MySqlGuid.cs プロジェクト: BjkGkh/R106
 IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
 {
     MySqlGuid g = new MySqlGuid();
       g.isNull = true;
       g.OldGuids = OldGuids;
       if (!nullVal)
       {
     if (OldGuids)
       return ReadOldGuid(packet, length);
     string s = String.Empty;
     if (length == -1)
       s = packet.ReadLenString();
     else
       s = packet.ReadString(length);
     g.mValue = new Guid(s);
     g.isNull = false;
       }
       return g;
 }
コード例 #5
0
ファイル: NativeDriver.cs プロジェクト: BjkGkh/R106
        public void Open()
        {
            // connect to one of our specified hosts
            baseStream = new RemoteConnection();
            baseStream.Connect(MySqlConnection.CurrentStringBuilder.ServerEndPoint, MySqlConnection.CurrentStringBuilder.ServerPort);

            int maxSinglePacket = 255 * 255 * 255;
            stream = new MySqlStream(baseStream, Encoding, false);

            stream.ResetTimeout((int)Settings.ConnectionTimeout * 1000);

            // read off the welcome packet and parse out it's values
            packet = stream.ReadPacket();
            int protocol = packet.ReadByte();
            string versionString = packet.ReadString();
            version = DBVersion.Parse(versionString);
            if (!version.isAtLeast(5, 0, 0))
                throw new NotSupportedException(Resources.ServerTooOld);
            threadId = packet.ReadInteger(4);
            encryptionSeed = packet.ReadString();

            maxSinglePacket = (256 * 256 * 256) - 1;

            // read in Server capabilities if they are provided
            ClientFlags serverCaps = 0;
            if (packet.HasMoreData)
                serverCaps = (ClientFlags)packet.ReadInteger(2);

            /* New protocol with 16 bytes to describe server characteristics */
            owner.ConnectionCharSetIndex = (int)packet.ReadByte();

            serverStatus = (ServerStatusFlags)packet.ReadInteger(2);

            // Since 5.5, high bits of server caps are stored after status.
            // Previously, it was part of reserved always 0x00 13-byte filler.
            uint serverCapsHigh = (uint)packet.ReadInteger(2);
            serverCaps |= (ClientFlags)(serverCapsHigh << 16);

            packet.Position += 11;
            string seedPart2 = packet.ReadString();
            encryptionSeed += seedPart2;

            string authenticationMethod = "";
            if ((serverCaps & ClientFlags.PLUGIN_AUTH) != 0)
            {
                authenticationMethod = packet.ReadString();
            }
            else
            {
                // Some MySql versions like 5.1, don't give name of plugin, default to native password.
                authenticationMethod = "mysql_native_password";
            }

            // based on our settings, set our connection flags
            SetConnectionFlags(serverCaps);

            packet.Clear();
            packet.WriteInteger((int)connectionFlags, 4);

            packet.WriteInteger(maxSinglePacket, 4);
            packet.WriteByte(8);
            packet.Write(new byte[23]);

            Authenticate(authenticationMethod, false);

            // if we are using compression, then we use our CompressedStream class
            // to hide the ugliness of managing the compression
            if ((connectionFlags & ClientFlags.COMPRESS) != 0)
                stream = new MySqlStream(baseStream, Encoding, true);

            // give our stream the server version we are connected to.
            // We may have some fields that are read differently based
            // on the version of the server we are connected to.
            packet.Version = version;
            stream.MaxBlockSize = maxSinglePacket;
        }
コード例 #6
0
ファイル: MySqlTime.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal) return new MySqlTimeSpan(true);

              if (length >= 0)
              {
            string value = packet.ReadString(length);
            ParseMySql(value);
            return this;
              }

              long bufLength = packet.ReadByte();
              int negate = 0;
              if (bufLength > 0)
            negate = packet.ReadByte();

              isNull = false;
              if (bufLength == 0)
            isNull = true;
              else if (bufLength == 5)
            mValue = new TimeSpan(packet.ReadInteger(4), 0, 0, 0);
              else if (bufLength == 8)
            mValue = new TimeSpan(packet.ReadInteger(4),
             packet.ReadByte(), packet.ReadByte(), packet.ReadByte());
              else
            mValue = new TimeSpan(packet.ReadInteger(4),
             packet.ReadByte(), packet.ReadByte(), packet.ReadByte(),
             packet.ReadInteger(4) / 1000000);

              if (negate == 1)
            mValue = mValue.Negate();
              return this;
        }
コード例 #7
0
ファイル: MySqlUByte.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlUByte(true);

              if (length == -1)
            return new MySqlUByte((byte)packet.ReadByte());
              else
            return new MySqlUByte(Byte.Parse(packet.ReadString(length)));
        }
コード例 #8
0
ファイル: NativeDriver.cs プロジェクト: BjkGkh/R106
        public int GetResult(ref int affectedRow, ref long insertedId)
        {
            try
            {
                packet = stream.ReadPacket();
            }
            catch (TimeoutException)
            {
                // Do not reset serverStatus, allow to reenter, e.g when
                // ResultSet is closed.
                throw;
            }
            catch (Exception)
            {
                serverStatus = 0;
                throw;
            }

            int fieldCount = (int)packet.ReadFieldLength();
            if (-1 == fieldCount)
            {
                string filename = packet.ReadString();
                SendFileToServer(filename);

                return GetResult(ref affectedRow, ref insertedId);
            }
            else if (fieldCount == 0)
            {
                // the code to read last packet will set these server status vars
                // again if necessary.
                serverStatus &= ~(ServerStatusFlags.AnotherQuery |
                                  ServerStatusFlags.MoreResults);
                affectedRow = (int)packet.ReadFieldLength();
                insertedId = (long)packet.ReadFieldLength();

                serverStatus = (ServerStatusFlags)packet.ReadInteger(2);
                warnings += packet.ReadInteger(2);
                if (packet.HasMoreData)
                {
                    packet.ReadLenString(); //TODO: server message
                }
            }
            return fieldCount;
        }
コード例 #9
0
ファイル: MySqlString.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlString(type, true);

              string s = String.Empty;
              if (length == -1)
            s = packet.ReadLenString();
              else
            s = packet.ReadString(length);
              MySqlString str = new MySqlString(type, s);
              return str;
        }
コード例 #10
0
ファイル: MySqlDecimal.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlDecimal(true);

              string s = String.Empty;
              if (length == -1)
            s = packet.ReadLenString();
              else
            s = packet.ReadString(length);
              return new MySqlDecimal(s);
        }
コード例 #11
0
ファイル: MySqlDateTime.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal) return new MySqlDateTime(type, true);

              if (length >= 0)
              {
            string value = packet.ReadString(length);
            return ParseMySql(value);
              }

              long bufLength = packet.ReadByte();
              int year = 0, month = 0, day = 0;
              int hour = 0, minute = 0, second = 0, millisecond = 0;
              if (bufLength >= 4)
              {
            year = packet.ReadInteger(2);
            month = packet.ReadByte();
            day = packet.ReadByte();
              }

              if (bufLength > 4)
              {
            hour = packet.ReadByte();
            minute = packet.ReadByte();
            second = packet.ReadByte();
              }

              if (bufLength > 7)
              {
            millisecond = packet.Read3ByteInt();
            packet.ReadByte();
              }

              return new MySqlDateTime(type, year, month, day, hour, minute, second, millisecond);
        }
コード例 #12
0
ファイル: MySqlDouble.cs プロジェクト: BjkGkh/R106
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length,
    bool nullVal)
        {
            if (nullVal)
            return new MySqlDouble(true);

              if (length == -1)
              {
            byte[] b = new byte[8];
            packet.Read(b, 0, 8);
            return new MySqlDouble(BitConverter.ToDouble(b, 0));
              }
              string s = packet.ReadString(length);
              double d;
              try
              {
            d = Double.Parse(s, CultureInfo.InvariantCulture);
              }
              catch (OverflowException)
              {
            // MySQL server < 5.5 can return values not compatible with
            // Double.Parse(), i.e out of range for double.

            if (s.StartsWith("-", StringComparison.Ordinal))
              d = double.MinValue;
            else
              d = double.MaxValue;
              }
              return new MySqlDouble(d);
        }
コード例 #13
0
ファイル: MySqlBit.cs プロジェクト: BjkGkh/R106
        public IMySqlValue ReadValue(MySqlPacket packet, long length, bool isNull)
        {
            this.isNull = isNull;
              if (isNull)
            return this;

              if (length == -1)
            length = packet.ReadFieldLength();

              if (ReadAsString)
            mValue = UInt64.Parse(packet.ReadString(length));
              else
            mValue = (UInt64)packet.ReadBitValue((int)length);
              return this;
        }