Example #1
0
 public override void ExecuteStatement(MySqlPacket packetToExecute)
 {
     base.ExecuteStatement(packetToExecute);
       int pos = packetToExecute.Position;
       packetToExecute.Position = 1;
       int statementId = packetToExecute.ReadInteger(4);
       packetToExecute.Position = pos;
 }
Example #2
0
		public MySqlStream(Encoding encoding)
		{
			// we have no idea what the real value is so we start off with the max value
			// The real value will be set in NativeDriver.Configure()
			maxPacketSize = ulong.MaxValue;

			// we default maxBlockSize to MaxValue since we will get the 'real' value in 
			// the authentication handshake and we know that value will not exceed 
			// true maxBlockSize prior to that.
			maxBlockSize = Int32.MaxValue;

			packet = new MySqlPacket(encoding);
		}
Example #3
0
 internal void SendPacket(MySqlPacket p)
 {
     stream.SendPacket(p);
 }
Example #4
0
 void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
 {
     Single v = (val is Single) ? (Single)val : Convert.ToSingle(val);
       if (binary)
     packet.Write(BitConverter.GetBytes(v));
       else
     packet.WriteStringNoNull(v.ToString("R",
        CultureInfo.InvariantCulture));
 }
Example #5
0
        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));
        }
Example #6
0
        void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
        {
            byte[] buffToWrite = (val as byte[]);
              if (buffToWrite == null)
              {
            char[] valAsChar = (val as Char[]);
            if (valAsChar != null)
              buffToWrite = packet.Encoding.GetBytes(valAsChar);
            else
            {
              string s = val.ToString();
              if (length == 0)
            length = s.Length;
              else
            s = s.Substring(0, length);
              buffToWrite = packet.Encoding.GetBytes(s);
            }
              }

              // we assume zero length means write all of the value
              if (length == 0)
            length = buffToWrite.Length;

              if (buffToWrite == null)
            throw new MySqlException("Only byte arrays and strings can be serialized by MySqlBinary");

              if (binary)
              {
            packet.WriteLength(length);
            packet.Write(buffToWrite, 0, length);
              }
              else
              {
            packet.WriteStringNoNull("_binary ");
            packet.WriteByte((byte)'\'');
            EscapeByteArray(buffToWrite, length, packet);
            packet.WriteByte((byte)'\'');
              }
        }
Example #7
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            MySqlBinary b;
              if (nullVal)
            b = new MySqlBinary(type, true);
              else
              {
            if (length == -1)
              length = (long)packet.ReadFieldLength();

            byte[] newBuff = new byte[length];
            packet.Read(newBuff, 0, (int)length);
            b = new MySqlBinary(type, newBuff);
              }
              return b;
        }
Example #8
0
        private void InternalBindParameters(string sql, MySqlParameterCollection parameters,
        MySqlPacket packet)
        {
            bool sqlServerMode = command.Connection.Settings.SqlServerMode;

              if (packet == null)
              {
            packet = new MySqlPacket(Driver.Encoding);
            packet.Version = Driver.Version;
            packet.WriteByte(0);
              }

              MySqlTokenizer tokenizer = new MySqlTokenizer(sql);
              tokenizer.ReturnComments = true;
              tokenizer.SqlServerMode = sqlServerMode;

              int pos = 0;
              string token = tokenizer.NextToken();
              int parameterCount = 0;
              while (token != null)
              {
            // serialize everything that came before the token (i.e. whitespace)
            packet.WriteStringNoNull(sql.Substring(pos, tokenizer.StartIndex - pos));
            pos = tokenizer.StopIndex;
            if (MySqlTokenizer.IsParameter(token))
            {
              if ((!parameters.containsUnnamedParameters && token.Length == 1 && parameterCount > 0) || parameters.containsUnnamedParameters && token.Length > 1)
            throw new MySqlException(Resources.MixedParameterNamingNotAllowed);

              parameters.containsUnnamedParameters = token.Length == 1;
              if (SerializeParameter(parameters, packet, token, parameterCount))
            token = null;
              parameterCount++;
            }
            if (token != null)
            {
              if (sqlServerMode && tokenizer.Quoted && token.StartsWith("[", StringComparison.Ordinal))
            token = String.Format("`{0}`", token.Substring(1, token.Length - 2));
              packet.WriteStringNoNull(token);
            }
            token = tokenizer.NextToken();
              }
              buffers.Add(packet);
        }
Example #9
0
        IMySqlValue IMySqlValue.ReadValue(MySqlPacket packet, long length, bool nullVal)
        {
            if (nullVal)
            return new MySqlUInt32((this as IMySqlValue).MySqlDbType, true);

              if (length == -1)
            return new MySqlUInt32((this as IMySqlValue).MySqlDbType,
                     (uint)packet.ReadInteger(4));
              else
            return new MySqlUInt32((this as IMySqlValue).MySqlDbType,
                     packet.ReadStringAsUInt32(length));
        }
Example #10
0
        void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
        {
            if (!(val is TimeSpan))
            throw new MySqlException("Only TimeSpan objects can be serialized by MySqlTimeSpan");

              TimeSpan ts = (TimeSpan)val;
              bool negative = ts.TotalMilliseconds < 0;
              ts = ts.Duration();

              if (binary)
              {
            if (ts.Milliseconds > 0)
              packet.WriteByte(12);
            else
              packet.WriteByte(8);

            packet.WriteByte((byte)(negative ? 1 : 0));
            packet.WriteInteger(ts.Days, 4);
            packet.WriteByte((byte)ts.Hours);
            packet.WriteByte((byte)ts.Minutes);
            packet.WriteByte((byte)ts.Seconds);
            if (ts.Milliseconds > 0)
            {
              long mval = ts.Milliseconds*1000;
              packet.WriteInteger(mval, 4);
            }
              }
              else
              {
            String s = String.Format("'{0}{1} {2:00}:{3:00}:{4:00}.{5}'",
            negative ? "-" : "", ts.Days, ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds);

            packet.WriteStringNoNull(s);
              }
        }
Example #11
0
 void IMySqlValue.SkipValue(MySqlPacket packet)
 {
     int len = packet.ReadByte();
       packet.Position += len;
 }
Example #12
0
        public override void SendQuery(MySqlPacket p)
        {
            rowSizeInBytes = 0;
              string cmdText = Encoding.GetString(p.Buffer, 5, p.Length - 5);
              string normalized_query = null;

              if (cmdText.Length > 300)
              {
            QueryNormalizer normalizer = new QueryNormalizer();
            normalized_query = normalizer.Normalize(cmdText);
            cmdText = cmdText.Substring(0, 300);
              }

              base.SendQuery(p);
        }
Example #13
0
 private void ReadEOF()
 {
     packet = stream.ReadPacket();
     CheckEOF();
 }
Example #14
0
        private void GetColumnData(MySqlField field)
        {
            stream.Encoding = Encoding;
            packet = stream.ReadPacket();
            field.Encoding = Encoding;
            field.CatalogName = packet.ReadLenString();
            field.DatabaseName = packet.ReadLenString();
            field.TableName = packet.ReadLenString();
            field.RealTableName = packet.ReadLenString();
            field.ColumnName = packet.ReadLenString();
            field.OriginalColumnName = packet.ReadLenString();
            packet.ReadByte();
            field.CharacterSetIndex = packet.ReadInteger(2);
            field.ColumnLength = packet.ReadInteger(4);
            MySqlDbType type = (MySqlDbType)packet.ReadByte();
            ColumnFlags colFlags;
            if ((connectionFlags & ClientFlags.LONG_FLAG) != 0)
                colFlags = (ColumnFlags)packet.ReadInteger(2);
            else
                colFlags = (ColumnFlags)packet.ReadByte();
            field.Scale = (byte)packet.ReadByte();

            if (packet.HasMoreData)
            {
                packet.ReadInteger(2); // reserved
            }

            if (type == MySqlDbType.Decimal || type == MySqlDbType.NewDecimal)
            {
                field.Precision = (byte)(field.ColumnLength - 2);
                if ((colFlags & ColumnFlags.UNSIGNED) != 0)
                    field.Precision++;
            }

            field.SetTypeAndFlags(type, colFlags);
        }
Example #15
0
 private void ExecutePacket(MySqlPacket packetToExecute)
 {
     try
     {
         warnings = 0;
         stream.SequenceByte = 0;
         stream.SendPacket(packetToExecute);
     }
     catch (MySqlException ex)
     {
         HandleException(ex);
         throw;
     }
 }
Example #16
0
 void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
 {
     int v = (val is Int32) ? (int)val : Convert.ToInt32(val);
       if (binary)
     packet.WriteInteger((long)v, 2);
       else
     packet.WriteStringNoNull(v.ToString());
 }
Example #17
0
        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)));
        }
Example #18
0
        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;
        }
Example #19
0
 void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object v, int length)
 {
     uint val = (v is uint) ? (uint)v : Convert.ToUInt32(v);
       if (binary)
     packet.WriteInteger((long)val, is24Bit ? 3 : 4);
       else
     packet.WriteStringNoNull(val.ToString());
 }
Example #20
0
 void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
 {
     ulong v = (val is ulong) ? (ulong)val : Convert.ToUInt64(val);
       if (binary)
     packet.WriteInteger((long)v, 8);
       else
     packet.WriteStringNoNull(v.ToString());
 }
Example #21
0
        /// <summary>
        /// Serializes the given parameter to the given memory stream
        /// </summary>
        /// <remarks>
        /// <para>This method is called by PrepareSqlBuffers to convert the given
        /// parameter to bytes and write those bytes to the given memory stream.
        /// </para>
        /// </remarks>
        /// <returns>True if the parameter was successfully serialized, false otherwise.</returns>
        private bool SerializeParameter(MySqlParameterCollection parameters,
                                    MySqlPacket packet, string parmName, int parameterIndex)
        {
            MySqlParameter parameter = null;

              if (!parameters.containsUnnamedParameters)
            parameter = parameters.GetParameterFlexible(parmName, false);
              else
              {
            if (parameterIndex <= parameters.Count)
              parameter = parameters[parameterIndex];
            else
              throw new MySqlException(Resources.ParameterIndexNotFound);
              }

              if (parameter == null)
              {
            // if we are allowing user variables and the parameter name starts with @
            // then we can't throw an exception
            if (parmName.StartsWith("@", StringComparison.Ordinal) && ShouldIgnoreMissingParameter(parmName))
              return false;
            throw new MySqlException(
            String.Format(Resources.ParameterMustBeDefined, parmName));
              }
              parameter.Serialize(packet, false, Connection.Settings);
              return true;
        }
Example #22
0
        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)));
        }
Example #23
0
 void IMySqlValue.SkipValue(MySqlPacket packet)
 {
     int len = (int)packet.ReadFieldLength();
       packet.Position += len;
 }
Example #24
0
 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;
 }
Example #25
0
        private static void EscapeByteArray(byte[] bytes, int length, MySqlPacket packet)
        {
            for (int x = 0; x < length; x++)
              {
            byte b = bytes[x];
            if (b == '\0')
            {
              packet.WriteByte((byte)'\\');
              packet.WriteByte((byte)'0');
            }

            else if (b == '\\' || b == '\'' || b == '\"')
            {
              packet.WriteByte((byte)'\\');
              packet.WriteByte(b);
            }
            else
              packet.WriteByte(b);
              }
        }
Example #26
0
        void IMySqlValue.WriteValue(MySqlPacket packet, bool binary, object val, int length)
        {
            Guid guid = Guid.Empty;
              string valAsString = val as string;
              byte[] valAsByte = val as byte[];

              if (val is Guid)
            guid = (Guid)val;
              else
              {
            try
            {
              if (valAsString != null)
            guid = new Guid(valAsString);
              else if (valAsByte != null)
            guid = new Guid(valAsByte);
            }
            catch (Exception ex)
            {
              throw new MySqlException(Resources.DataNotInSupportedFormat, ex);
            }
              }

              if (OldGuids)
            WriteOldGuid(packet, guid, binary);
              else
              {
            guid.ToString("D");

            if (binary)
              packet.WriteLenString(guid.ToString("D"));
            else
              packet.WriteStringNoNull("'" + MySqlHelper.EscapeString(guid.ToString("D")) + "'");
              }
        }
Example #27
0
 void IMySqlValue.SkipValue(MySqlPacket packet)
 {
     packet.Position += 4;
 }
Example #28
0
        private MySqlGuid ReadOldGuid(MySqlPacket packet, long length)
        {
            if (length == -1)
            length = (long)packet.ReadFieldLength();

              byte[] buff = new byte[length];
              packet.Read(buff, 0, (int)length);
              MySqlGuid g = new MySqlGuid(buff);
              g.OldGuids = OldGuids;
              return g;
        }
Example #29
0
 internal void Serialize(MySqlPacket packet, bool binary, MySqlConnectionStringBuilder settings)
 {
     if (!binary && (paramValue == null || paramValue == DBNull.Value))
     packet.WriteStringNoNull("NULL");
       else
       {
     if (ValueObject.MySqlDbType == MySqlDbType.Guid)
     {
       MySqlGuid g = (MySqlGuid)ValueObject;
       g.OldGuids = settings.OldGuids;
       valueObject = g;
     }
     ValueObject.WriteValue(packet, binary, paramValue, size);
       }
 }
Example #30
0
        private void WriteOldGuid(MySqlPacket packet, Guid guid, bool binary)
        {
            byte[] bytes = guid.ToByteArray();

              if (binary)
              {
            packet.WriteLength(bytes.Length);
            packet.Write(bytes);
              }
              else
              {
            packet.WriteStringNoNull("_binary ");
            packet.WriteByte((byte)'\'');
            EscapeByteArray(bytes, bytes.Length, packet);
            packet.WriteByte((byte)'\'');
              }
        }