private void AdjustOutputTypes()
        {
            // since MySQL likes to return user variables as strings
            // we reset the types of the readers internal value objects
            // this will allow those value objects to parse the string based
            // return values
            for (int i = 0; i < FieldCount; i++)
            {
                string fieldName = GetName(i);
                fieldName = fieldName.Remove(0, StoredProcedure.ParameterPrefix.Length + 1);
                MyCatParameter parameter = command.Parameters.GetParameterFlexible(fieldName, true);

                IMyCatValue v = MyCatField.GetIMyCatValue(parameter.MyCatDbType);
                if (v is MyCatBit)
                {
                    MyCatBit bit = (MyCatBit)v;
                    bit.ReadAsString = true;
                    resultSet.SetValueObject(i, bit);
                }
                else
                {
                    resultSet.SetValueObject(i, v);
                }
            }
        }
Exemple #2
0
        public MyCatField[] GetColumns(long count)
        {
            MyCatField[] fields = new MyCatField[count];
            for (int i = 0; i < count; i++)
            {
                fields[i] = new MyCatField(this);
            }
            handler.GetColumnsData(fields);

            return(fields);
        }
        private void GetColumnData(MyCatField 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);
            MyCatDbType type = (MyCatDbType)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 == MyCatDbType.Decimal || type == MyCatDbType.NewDecimal)
            {
                field.Precision = (byte)(field.ColumnLength - 2);
                if ((colFlags & ColumnFlags.UNSIGNED) != 0)
                {
                    field.Precision++;
                }
            }

            field.SetTypeAndFlags(type, colFlags);
        }
        public IMyCatValue ReadColumnValue(int index, MyCatField field, IMyCatValue 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));
        }
        private void SetDbType(DbType db_type)
        {
            dbType = db_type;
            switch (dbType)
            {
            case DbType.Guid:
                mySqlDbType = MyCatDbType.Guid;
                break;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

            case DbType.Object:
            case DbType.VarNumeric:
            case DbType.Binary:
            default:
                mySqlDbType = MyCatDbType.Blob;
                break;
            }

            if (dbType == DbType.Object)
            {
                var value = this.paramValue as byte[];
                if (value != null && value.Length == GEOMETRY_LENGTH)
                {
                    mySqlDbType = MyCatDbType.Geometry;
                }
            }

            ValueObject = MyCatField.GetIMyCatValue(mySqlDbType);
        }
Exemple #6
0
 public IMyCatValue ReadColumnValue(int index, MyCatField field, IMyCatValue value)
 {
     return(handler.ReadColumnValue(index, field, value));
 }
Exemple #7
0
 private void SetMyCatDbType(MyCatDbType mysql_dbtype)
 {
     mySqlDbType = mysql_dbtype;
     ValueObject = MyCatField.GetIMyCatValue(mySqlDbType);
     SetDbTypeFromMyCatDbType();
 }
        /// <summary>
        /// Returns a DataTable that describes the column metadata of the MyCatDataReader.
        /// </summary>
        /// <returns></returns>
        public override DataTable GetSchemaTable()
        {
            // Only Results from SQL SELECT Queries
            // get a DataTable for schema of the result
            // otherwise, DataTable is null reference
            if (FieldCount == 0)
            {
                return(null);
            }

            DataTable dataTableSchema = new DataTable("SchemaTable");

            dataTableSchema.Columns.Add("ColumnName", typeof(string));
            dataTableSchema.Columns.Add("ColumnOrdinal", typeof(int));
            dataTableSchema.Columns.Add("ColumnSize", typeof(int));
            dataTableSchema.Columns.Add("NumericPrecision", typeof(int));
            dataTableSchema.Columns.Add("NumericScale", typeof(int));
            dataTableSchema.Columns.Add("IsUnique", typeof(bool));
            dataTableSchema.Columns.Add("IsKey", typeof(bool));
            DataColumn dc = dataTableSchema.Columns["IsKey"];

            dc.AllowDBNull = true; // IsKey can have a DBNull
            dataTableSchema.Columns.Add("BaseCatalogName", typeof(string));
            dataTableSchema.Columns.Add("BaseColumnName", typeof(string));
            dataTableSchema.Columns.Add("BaseSchemaName", typeof(string));
            dataTableSchema.Columns.Add("BaseTableName", typeof(string));
            dataTableSchema.Columns.Add("DataType", typeof(Type));
            dataTableSchema.Columns.Add("AllowDBNull", typeof(bool));
            dataTableSchema.Columns.Add("ProviderType", typeof(int));
            dataTableSchema.Columns.Add("IsAliased", typeof(bool));
            dataTableSchema.Columns.Add("IsExpression", typeof(bool));
            dataTableSchema.Columns.Add("IsIdentity", typeof(bool));
            dataTableSchema.Columns.Add("IsAutoIncrement", typeof(bool));
            dataTableSchema.Columns.Add("IsRowVersion", typeof(bool));
            dataTableSchema.Columns.Add("IsHidden", typeof(bool));
            dataTableSchema.Columns.Add("IsLong", typeof(bool));
            dataTableSchema.Columns.Add("IsReadOnly", typeof(bool));

            int ord = 1;

            for (int i = 0; i < FieldCount; i++)
            {
                MyCatField f = resultSet.Fields[i];
                DataRow    r = dataTableSchema.NewRow();
                r["ColumnName"]    = f.ColumnName;
                r["ColumnOrdinal"] = ord++;
                r["ColumnSize"]    = f.IsTextField ? f.ColumnLength / f.MaxLength : f.ColumnLength;
                int prec   = f.Precision;
                int pscale = f.Scale;
                if (prec != -1)
                {
                    r["NumericPrecision"] = (short)prec;
                }
                if (pscale != -1)
                {
                    r["NumericScale"] = (short)pscale;
                }
                r["DataType"]        = GetFieldType(i);
                r["ProviderType"]    = (int)f.Type;
                r["IsLong"]          = f.IsBlob && f.ColumnLength > 255;
                r["AllowDBNull"]     = f.AllowsNull;
                r["IsReadOnly"]      = false;
                r["IsRowVersion"]    = false;
                r["IsUnique"]        = false;
                r["IsKey"]           = f.IsPrimaryKey;
                r["IsAutoIncrement"] = f.IsAutoIncrement;
                r["BaseSchemaName"]  = f.DatabaseName;
                r["BaseCatalogName"] = null;
                r["BaseTableName"]   = f.RealTableName;
                r["BaseColumnName"]  = f.OriginalColumnName;

                dataTableSchema.Rows.Add(r);
            }

            return(dataTableSchema);
        }