Пример #1
0
        public override object Aggregate(int[] records, AggregateType kind)
        {
            bool flag = false;

            try
            {
                int        num;
                SqlDouble  num2;
                SqlDouble  num3;
                int        num4;
                int        num5;
                int        num6;
                int        num7;
                int        num8;
                int        num9;
                int        num10;
                int        num11;
                SqlDecimal minValue;
                int        num13;
                SqlDecimal maxValue;
                SqlDouble  num15;
                int        num16;
                SqlDecimal num17;
                SqlDecimal num18;
                int[]      numArray;
                SqlDouble  num19;
                int        num21;
                int[]      numArray2;
                int        num22;
                int[]      numArray3;
                switch (kind)
                {
                case AggregateType.Sum:
                    num18     = 0L;
                    numArray3 = records;
                    num10     = 0;
                    goto Label_0078;

                case AggregateType.Mean:
                    num17     = 0L;
                    num16     = 0;
                    numArray2 = records;
                    num9      = 0;
                    goto Label_00EA;

                case AggregateType.Min:
                    maxValue = SqlDecimal.MaxValue;
                    num6     = 0;
                    goto Label_0306;

                case AggregateType.Max:
                    minValue = SqlDecimal.MinValue;
                    num5     = 0;
                    goto Label_0385;

                case AggregateType.First:
                    if (records.Length <= 0)
                    {
                        return(null);
                    }
                    return(this.values[records[0]]);

                case AggregateType.Count:
                    num  = 0;
                    num4 = 0;
                    goto Label_03EA;

                case AggregateType.Var:
                case AggregateType.StDev:
                    num      = 0;
                    num2     = 0.0;
                    num19    = 0.0;
                    num3     = 0.0;
                    num15    = 0.0;
                    numArray = records;
                    num8     = 0;
                    goto Label_01D9;

                default:
                    goto Label_040F;
                }
Label_0044:
                num22 = numArray3[num10];
                if (!this.IsNull(num22))
                {
                    num18 += this.values[num22];
                    flag   = true;
                }
                num10++;
Label_0078:
                if (num10 < numArray3.Length)
                {
                    goto Label_0044;
                }
                if (flag)
                {
                    return(num18);
                }
                return(base.NullValue);

Label_00B0:
                num21 = numArray2[num9];
                if (!this.IsNull(num21))
                {
                    num17 += this.values[num21];
                    num16++;
                    flag = true;
                }
                num9++;
Label_00EA:
                if (num9 < numArray2.Length)
                {
                    goto Label_00B0;
                }
                if (flag)
                {
                    return(num17 / ((long)num16));
                }
                return(base.NullValue);

Label_0171:
                num7 = numArray[num8];
                if (!this.IsNull(num7))
                {
                    num3  += this.values[num7].ToSqlDouble();
                    num15 += this.values[num7].ToSqlDouble() * this.values[num7].ToSqlDouble();
                    num++;
                }
                num8++;
Label_01D9:
                if (num8 < numArray.Length)
                {
                    goto Label_0171;
                }
                if (num <= 1)
                {
                    return(base.NullValue);
                }
                num2  = ((SqlDouble)(num * num15)) - (num3 * num3);
                num19 = num2 / (num3 * num3);
                bool x = num19 < 1E-15;
                if (!SqlBoolean.op_True(x))
                {
                }
                if (SqlBoolean.op_True(x | (num2 < 0.0)))
                {
                    num2 = 0.0;
                }
                else
                {
                    num2 /= (double)(num * (num - 1));
                }
                if (kind == AggregateType.StDev)
                {
                    return(Math.Sqrt(num2.Value));
                }
                return(num2);

Label_02B6:
                num13 = records[num6];
                if (!this.IsNull(num13))
                {
                    if (SqlDecimal.LessThan(this.values[num13], maxValue).IsTrue)
                    {
                        maxValue = this.values[num13];
                    }
                    flag = true;
                }
                num6++;
Label_0306:
                if (num6 < records.Length)
                {
                    goto Label_02B6;
                }
                if (flag)
                {
                    return(maxValue);
                }
                return(base.NullValue);

Label_0335:
                num11 = records[num5];
                if (!this.IsNull(num11))
                {
                    if (SqlDecimal.GreaterThan(this.values[num11], minValue).IsTrue)
                    {
                        minValue = this.values[num11];
                    }
                    flag = true;
                }
                num5++;
Label_0385:
                if (num5 < records.Length)
                {
                    goto Label_0335;
                }
                if (flag)
                {
                    return(minValue);
                }
                return(base.NullValue);

Label_03D4:
                if (!this.IsNull(records[num4]))
                {
                    num++;
                }
                num4++;
Label_03EA:
                if (num4 < records.Length)
                {
                    goto Label_03D4;
                }
                return(num);
            }
            catch (OverflowException)
            {
                throw ExprException.Overflow(typeof(SqlDecimal));
            }
Label_040F:
            throw ExceptionBuilder.AggregateException(kind, base.DataType);
        }
        public override object Aggregate(int[] records, AggregateType kind)
        {
            bool flag = false;

            try
            {
                int        num;
                SqlDouble  num2;
                SqlDouble  num3;
                int        num4;
                int        num5;
                int        num6;
                int        num7;
                int        num8;
                int        num9;
                int        num10;
                int        num11;
                SqlMoney   minValue;
                int        num12;
                SqlMoney   maxValue;
                SqlDouble  num13;
                int        num14;
                SqlDecimal num15;
                SqlDecimal num16;
                int[]      numArray;
                SqlDouble  num17;
                int        num18;
                int[]      numArray2;
                int        num19;
                int[]      numArray3;
                switch (kind)
                {
                case AggregateType.Sum:
                    num16     = 0L;
                    numArray3 = records;
                    num10     = 0;
                    goto Label_007D;

                case AggregateType.Mean:
                    num15     = 0L;
                    num14     = 0;
                    numArray2 = records;
                    num9      = 0;
                    goto Label_00EF;

                case AggregateType.Min:
                    maxValue = SqlMoney.MaxValue;
                    num6     = 0;
                    goto Label_0314;

                case AggregateType.Max:
                    minValue = SqlMoney.MinValue;
                    num5     = 0;
                    goto Label_0393;

                case AggregateType.First:
                    if (records.Length <= 0)
                    {
                        return(null);
                    }
                    return(this.values[records[0]]);

                case AggregateType.Count:
                    num  = 0;
                    num4 = 0;
                    goto Label_03F8;

                case AggregateType.Var:
                case AggregateType.StDev:
                    num      = 0;
                    num2     = 0.0;
                    num17    = 0.0;
                    num3     = 0.0;
                    num13    = 0.0;
                    numArray = records;
                    num8     = 0;
                    goto Label_01E7;

                default:
                    goto Label_041D;
                }
Label_0044:
                num19 = numArray3[num10];
                if (!this.IsNull(num19))
                {
                    num16 += this.values[num19];
                    flag   = true;
                }
                num10++;
Label_007D:
                if (num10 < numArray3.Length)
                {
                    goto Label_0044;
                }
                if (flag)
                {
                    return(num16);
                }
                return(base.NullValue);

Label_00B5:
                num18 = numArray2[num9];
                if (!this.IsNull(num18))
                {
                    num15 += this.values[num18].ToSqlDecimal();
                    num14++;
                    flag = true;
                }
                num9++;
Label_00EF:
                if (num9 < numArray2.Length)
                {
                    goto Label_00B5;
                }
                if (flag)
                {
                    SqlDecimal num20 = num15 / ((long)num14);
                    return(num20.ToSqlMoney());
                }
                return(base.NullValue);

Label_017F:
                num7 = numArray[num8];
                if (!this.IsNull(num7))
                {
                    num3  += this.values[num7].ToSqlDouble();
                    num13 += this.values[num7].ToSqlDouble() * this.values[num7].ToSqlDouble();
                    num++;
                }
                num8++;
Label_01E7:
                if (num8 < numArray.Length)
                {
                    goto Label_017F;
                }
                if (num <= 1)
                {
                    return(base.NullValue);
                }
                num2  = ((SqlDouble)(num * num13)) - (num3 * num3);
                num17 = num2 / (num3 * num3);
                bool x = num17 < 1E-15;
                if (!SqlBoolean.op_True(x))
                {
                }
                if (SqlBoolean.op_True(x | (num2 < 0.0)))
                {
                    num2 = 0.0;
                }
                else
                {
                    num2 /= (double)(num * (num - 1));
                }
                if (kind == AggregateType.StDev)
                {
                    return(Math.Sqrt(num2.Value));
                }
                return(num2);

Label_02C4:
                num12 = records[num6];
                if (!this.IsNull(num12))
                {
                    if (SqlMoney.LessThan(this.values[num12], maxValue).IsTrue)
                    {
                        maxValue = this.values[num12];
                    }
                    flag = true;
                }
                num6++;
Label_0314:
                if (num6 < records.Length)
                {
                    goto Label_02C4;
                }
                if (flag)
                {
                    return(maxValue);
                }
                return(base.NullValue);

Label_0343:
                num11 = records[num5];
                if (!this.IsNull(num11))
                {
                    if (SqlMoney.GreaterThan(this.values[num11], minValue).IsTrue)
                    {
                        minValue = this.values[num11];
                    }
                    flag = true;
                }
                num5++;
Label_0393:
                if (num5 < records.Length)
                {
                    goto Label_0343;
                }
                if (flag)
                {
                    return(minValue);
                }
                return(base.NullValue);

Label_03E2:
                if (!this.IsNull(records[num4]))
                {
                    num++;
                }
                num4++;
Label_03F8:
                if (num4 < records.Length)
                {
                    goto Label_03E2;
                }
                return(num);
            }
            catch (OverflowException)
            {
                throw ExprException.Overflow(typeof(SqlMoney));
            }
Label_041D:
            throw ExceptionBuilder.AggregateException(kind, base.DataType);
        }