Ejemplo n.º 1
0
        public IMySqlValue ReadColumnValue(int index, MySqlField field, IMySqlValue valObject)
        {
            long length = -1;
            bool isNull;

            if (nullMap != null)
                isNull = nullMap[index + 2];
            else
            {
                length = packet.ReadFieldLength();
                isNull = length == -1;
            }

            packet.Encoding = field.Encoding;
            packet.Version = version;
            return valObject.ReadValue(packet, length, isNull);
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
 public void GetColumnsData(MySqlField[] columns)
 {
     for (int i = 0; i < columns.Length; i++)
         GetColumnData(columns[i]);
     ReadEOF();
 }
Ejemplo n.º 4
0
        public int PrepareStatement(string sql, ref MySqlField[] parameters)
        {
            //TODO: check this
            //ClearFetchedRow();

            packet.Length = sql.Length * 4 + 5;
            byte[] buffer = packet.Buffer;
            int len = Encoding.GetBytes(sql, 0, sql.Length, packet.Buffer, 5);
            packet.Position = len + 5;
            buffer[4] = (byte)DBCmd.PREPARE;
            ExecutePacket(packet);

            packet = stream.ReadPacket();

            int marker = packet.ReadByte();
            if (marker != 0)
                throw new MySqlException("Expected prepared statement marker");

            int statementId = packet.ReadInteger(4);
            int numCols = packet.ReadInteger(2);
            int numParams = packet.ReadInteger(2);
            //TODO: find out what this is needed for
            packet.ReadInteger(3);
            if (numParams > 0)
            {
                parameters = owner.GetColumns(numParams);
                // we set the encoding for each parameter back to our connection encoding
                // since we can't trust what is coming back from the server
                for (int i = 0; i < parameters.Length; i++)
                    parameters[i].Encoding = Encoding;
            }

            if (numCols > 0)
            {
                while (numCols-- > 0)
                {
                    packet = stream.ReadPacket();
                    //TODO: handle streaming packets
                }

                ReadEOF();
            }

            return statementId;
        }
Ejemplo n.º 5
0
 public IMySqlValue ReadColumnValue(int index, MySqlField field, IMySqlValue value)
 {
     return handler.ReadColumnValue(index, field, value);
 }
 public override int PrepareStatement(string sql, ref MySqlField[] parameters)
 {
     int statementId = base.PrepareStatement(sql, ref parameters);
     MySqlTrace.TraceEvent(TraceEventType.Information, MySqlTraceEventType.StatementPrepared,
         Resources.TraceStatementPrepared, driverId, sql, statementId);
     return statementId;
 }
Ejemplo n.º 7
0
 public virtual int PrepareStatement(string sql, ref MySqlField[] parameters)
 {
     return handler.PrepareStatement(sql, ref parameters);
 }
Ejemplo n.º 8
0
        public MySqlField[] GetColumns(int count)
        {
            MySqlField[] fields = new MySqlField[count];
            for (int i = 0; i < count; i++)
                fields[i] = new MySqlField(this);
            handler.GetColumnsData(fields);

            return fields;
        }
Ejemplo n.º 9
0
        private void SetDbType(DbType db_type)
        {
            dbType = db_type;
            switch (dbType)
            {
            case DbType.Guid:
                mySqlDbType = MySqlDbType.Guid;
                break;

            case DbType.AnsiString:
            case DbType.String:
                mySqlDbType = MySqlDbType.VarChar;
                break;

            case DbType.AnsiStringFixedLength:
            case DbType.StringFixedLength:
                mySqlDbType = MySqlDbType.String;
                break;

            case DbType.Boolean:
            case DbType.Byte:
                mySqlDbType = MySqlDbType.UByte;
                break;

            case DbType.SByte:
                mySqlDbType = MySqlDbType.Byte;
                break;

            case DbType.Date:
                mySqlDbType = MySqlDbType.Date;
                break;

            case DbType.DateTime:
                mySqlDbType = MySqlDbType.DateTime;
                break;

            case DbType.Time:
                mySqlDbType = MySqlDbType.Time;
                break;

            case DbType.Single:
                mySqlDbType = MySqlDbType.Float;
                break;

            case DbType.Double:
                mySqlDbType = MySqlDbType.Double;
                break;

            case DbType.Int16:
                mySqlDbType = MySqlDbType.Int16;
                break;

            case DbType.UInt16:
                mySqlDbType = MySqlDbType.UInt16;
                break;

            case DbType.Int32:
                mySqlDbType = MySqlDbType.Int32;
                break;

            case DbType.UInt32:
                mySqlDbType = MySqlDbType.UInt32;
                break;

            case DbType.Int64:
                mySqlDbType = MySqlDbType.Int64;
                break;

            case DbType.UInt64:
                mySqlDbType = MySqlDbType.UInt64;
                break;

            case DbType.Decimal:
            case DbType.Currency:
                mySqlDbType = MySqlDbType.Decimal;
                break;

            case DbType.Object:
            case DbType.VarNumeric:
            case DbType.Binary:
            default:
                mySqlDbType = MySqlDbType.Blob;
                break;
            }
            valueObject = MySqlField.GetIMySqlValue(mySqlDbType);
        }
Ejemplo n.º 10
0
        private void SetMySqlDbType(MySqlDbType mysql_dbtype)
        {
            mySqlDbType = mysql_dbtype;
            valueObject = MySqlField.GetIMySqlValue(mySqlDbType);

            switch (mySqlDbType)
            {
            case MySqlDbType.Decimal:
                dbType = DbType.Decimal;
                break;

            case MySqlDbType.Byte:
                dbType = DbType.SByte;
                break;

            case MySqlDbType.UByte:
                dbType = DbType.Byte;
                break;

            case MySqlDbType.Int16:
                dbType = DbType.Int16;
                break;

            case MySqlDbType.UInt16:
                dbType = DbType.UInt16;
                break;

            case MySqlDbType.Int24:
            case MySqlDbType.Int32:
                dbType = DbType.Int32;
                break;

            case MySqlDbType.UInt24:
            case MySqlDbType.UInt32:
                dbType = DbType.UInt32;
                break;

            case MySqlDbType.Int64:
                dbType = DbType.Int64;
                break;

            case MySqlDbType.UInt64:
                dbType = DbType.UInt64;
                break;

            case MySqlDbType.Bit:
                dbType = DbType.UInt64;
                break;

            case MySqlDbType.Float:
                dbType = DbType.Single;
                break;

            case MySqlDbType.Double:
                dbType = DbType.Double;
                break;

            case MySqlDbType.Timestamp:
            case MySqlDbType.DateTime:
                dbType = DbType.DateTime;
                break;

            case MySqlDbType.Date:
            case MySqlDbType.Newdate:
            case MySqlDbType.Year:
                dbType = DbType.Date;
                break;

            case MySqlDbType.Time:
                dbType = DbType.Time;
                break;

            case MySqlDbType.Enum:
            case MySqlDbType.Set:
            case MySqlDbType.VarChar:
                dbType = DbType.String;
                break;

            case MySqlDbType.TinyBlob:
            case MySqlDbType.MediumBlob:
            case MySqlDbType.LongBlob:
            case MySqlDbType.Blob:
                dbType = DbType.Object;
                break;

            case MySqlDbType.String:
                dbType = DbType.StringFixedLength;
                break;

            case MySqlDbType.Guid:
                dbType = DbType.Guid;
                break;
            }
        }
Ejemplo n.º 11
0
 public IMySqlValue ReadColumnValue(int index, MySqlField field, IMySqlValue value)
 {
     return(handler.ReadColumnValue(index, field, value));
 }