Пример #1
0
        public override SqlType GetAggregateType(SqlType other)
        {
            int num2;

            if (base.TypeCode == other.TypeCode)
            {
                if (base.Precision < other.Precision)
                {
                    return(other);
                }
                return(this);
            }
            int typeCode = other.TypeCode;

            if (typeCode <= 30)
            {
                switch (typeCode)
                {
                case 0:
                    return(this);

                case 1:
                    if (base.Precision < other.Precision)
                    {
                        return(GetCharacterType(base.TypeCode, other.Precision));
                    }
                    return(this);

                case 12:
                    if ((base.TypeCode == 40) || (base.TypeCode == 100))
                    {
                        if (base.Precision < other.Precision)
                        {
                            return(GetCharacterType(base.TypeCode, other.Precision));
                        }
                        return(this);
                    }
                    if (other.Precision < base.Precision)
                    {
                        return(this);
                    }
                    return(GetCharacterType(base.TypeCode, other.Precision));
                }
                if (typeCode != 30)
                {
                    goto Label_0174;
                }
            }
            else
            {
                if (typeCode <= 0x3d)
                {
                    if (typeCode == 40)
                    {
                        if (other.Precision < base.Precision)
                        {
                            return(GetCharacterType(other.TypeCode, base.Precision));
                        }
                        return(other);
                    }
                    if ((typeCode - 60) <= 1)
                    {
                        goto Label_0169;
                    }
                }
                else
                {
                    switch (typeCode)
                    {
                    case 100:
                        if (base.TypeCode == 40)
                        {
                            if (base.Precision < other.Precision)
                            {
                                return(GetCharacterType(base.TypeCode, other.Precision));
                            }
                            return(this);
                        }
                        if (other.Precision < base.Precision)
                        {
                            return(GetCharacterType(other.TypeCode, base.Precision));
                        }
                        return(other);

                    case 0x457:
                        goto Label_0169;
                    }
                }
                goto Label_0174;
            }
Label_0169:
            throw Error.GetError(0x15ba);
Label_0174:
            num2 = other.DisplaySize();
            return(GetCharacterType(12, (long)num2).GetAggregateType(this));
        }