Ejemplo n.º 1
0
        public override object Subtract(object a, object b, SqlType aType, SqlType otherType)
        {
            if ((a == null) || (b == null))
            {
                return(null);
            }
            switch (base.TypeCode)
            {
            case 0x65:
            case 0x66:
            case 0x6b:
            {
                IntervalMonthData data  = a as IntervalMonthData;
                IntervalMonthData data2 = b as IntervalMonthData;
                if ((data == null) || (data2 == null))
                {
                    TimestampData data3 = a as TimestampData;
                    TimestampData data4 = b as TimestampData;
                    if ((data3 == null) || (data4 == null))
                    {
                        throw Error.RuntimeError(0xc9, "IntervalType");
                    }
                    bool isYear = base.TypeCode == 0x65;
                    return(new IntervalMonthData((long)DateTimeType.SubtractMonths(data3, data4, isYear), this));
                }
                return(new IntervalMonthData(data.Units - data2.Units, this));
            }

            case 0x67:
            case 0x68:
            case 0x69:
            case 0x6a:
            case 0x6c:
            case 0x6d:
            case 110:
            case 0x6f:
            case 0x70:
            case 0x71:
            {
                IntervalSecondData data5 = a as IntervalSecondData;
                IntervalSecondData data6 = b as IntervalSecondData;
                if ((data5 == null) || (data6 == null))
                {
                    TimeData data7 = a as TimeData;
                    TimeData data8 = b as TimeData;
                    if ((data7 != null) && (data8 != null))
                    {
                        long num4 = data7.GetSeconds() - data8.GetSeconds();
                        return(new IntervalSecondData(num4, data7.GetNanos() - data8.GetNanos(), this, true));
                    }
                    TimestampData data9  = a as TimestampData;
                    TimestampData data10 = b as TimestampData;
                    if ((data9 != null) && (data10 != null))
                    {
                        long num6 = data9.GetSeconds() - data10.GetSeconds();
                        return(new IntervalSecondData(num6, data9.GetNanos() - data10.GetNanos(), this, true));
                    }
                    break;
                }
                long seconds = data5.Units - data6.Units;
                return(new IntervalSecondData(seconds, data5.Nanos - data6.Nanos, this, true));
            }
            }
            throw Error.RuntimeError(0xc9, "IntervalType");
        }