@Override public Datum plus(Datum datum) { switch (datum.type()) { case INT2: case INT4: case INT8: { TimeMeta tm = asTimeMeta(); tm.plusDays(datum.asInt4()); return new DateDatum(tm); } case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(interval.months, interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIME: { TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); } default: throw new InvalidOperationException("operator does not exist: " + type() + " + " + datum.type()); } }
@Override public Datum plus(Datum datum) { switch (datum.kind()) { case INT2: case INT4: case INT8: { TimeMeta tm = asTimeMeta(); tm.plusDays(datum.asInt4()); return new DateDatum(tm); } case INTERVAL: IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(interval.months, interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); case TIME: { TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); } default: throw new InvalidOperationException("operator does not exist: " + type() + " + " + datum.type()); } }
@Override public Datum minus(Datum datum) { switch(datum.type()) { case INT2: case INT4: case INT8: { TimeMeta tm = asTimeMeta(); tm.plusDays(0 - datum.asInt4()); return new DateDatum(tm); } case INTERVAL: { IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(-interval.months, -interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); } case TIME: { TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(0 - DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); } case DATE: { DateDatum d = (DateDatum) datum; return new Int4Datum(jdate - d.jdate); } default: throw new InvalidOperationException("operator does not exist: " + type() + " - " + datum.type()); } }
@Override public Datum minus(Datum datum) { switch(datum.kind()) { case INT2: case INT4: case INT8: { TimeMeta tm = asTimeMeta(); tm.plusDays(0 - datum.asInt4()); return new DateDatum(tm); } case INTERVAL: { IntervalDatum interval = (IntervalDatum) datum; TimeMeta tm = asTimeMeta(); tm.plusInterval(-interval.months, -interval.milliseconds); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm)); } case TIME: { TimeMeta tm1 = asTimeMeta(); TimeMeta tm2 = datum.asTimeMeta(); tm1.plusTime(0 - DateTimeUtil.toTime(tm2)); return new TimestampDatum(DateTimeUtil.toJulianTimestamp(tm1)); } case DATE: { DateDatum d = (DateDatum) datum; return new Int4Datum(jdate - d.jdate); } default: throw new InvalidOperationException("operator does not exist: " + type() + " - " + datum.type()); } }