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"); }