@Override public Datum plus(Datum datum) { switch (datum.type()) { case INT2: return DatumFactory.createInt8(val + datum.asInt2()); case INT4: return DatumFactory.createInt8(val + datum.asInt4()); case INT8: return DatumFactory.createInt8(val + datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val + datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val + datum.asFloat8()); case DATE: TimeMeta tm = datum.asTimeMeta(); tm.plusDays(asInt4()); return new DateDatum(tm); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }
@Override public Datum plus(Datum datum) { switch (datum.kind()) { case INT2: return DatumFactory.createInt8(val + datum.asInt2()); case INT4: return DatumFactory.createInt8(val + datum.asInt4()); case INT8: return DatumFactory.createInt8(val + datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val + datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val + datum.asFloat8()); case DATE: TimeMeta tm = datum.asTimeMeta(); tm.plusDays(asInt4()); return new DateDatum(tm); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }
@Override public Datum minus(Datum datum) { switch (datum.kind()) { case INT2: return DatumFactory.createInt8(val - datum.asInt2()); case INT4: return DatumFactory.createInt8(val - datum.asInt4()); case INT8: return DatumFactory.createInt8(val - datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val - datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val - datum.asFloat8()); case DATE: TimeMeta tm = datum.asTimeMeta(); tm.plusDays(0 - asInt4()); return new DateDatum(tm); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }
@Override public Datum minus(Datum datum) { switch (datum.type()) { case INT2: return DatumFactory.createInt8(val - datum.asInt2()); case INT4: return DatumFactory.createInt8(val - datum.asInt4()); case INT8: return DatumFactory.createInt8(val - datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val - datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val - datum.asFloat8()); case DATE: TimeMeta tm = datum.asTimeMeta(); tm.plusDays(0 - asInt4()); return new DateDatum(tm); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }
@Override public Datum multiply(Datum datum) { switch (datum.type()) { case INT2: return DatumFactory.createInt8(val * datum.asInt2()); case INT4: return DatumFactory.createInt8(val * datum.asInt4()); case INT8: return DatumFactory.createInt8(val * datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val * datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val * datum.asFloat8()); case INTERVAL: IntervalDatum interval = (IntervalDatum)datum; int intVal = asInt4(); return new IntervalDatum(interval.getMonths() * intVal, interval.getMilliSeconds() * asInt8()); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }
@Override public Datum multiply(Datum datum) { switch (datum.kind()) { case INT2: return DatumFactory.createInt8(val * datum.asInt2()); case INT4: return DatumFactory.createInt8(val * datum.asInt4()); case INT8: return DatumFactory.createInt8(val * datum.asInt8()); case FLOAT4: return DatumFactory.createFloat8(val * datum.asFloat4()); case FLOAT8: return DatumFactory.createFloat8(val * datum.asFloat8()); case INTERVAL: IntervalDatum interval = (IntervalDatum)datum; int intVal = asInt4(); return new IntervalDatum(interval.getMonths() * intVal, interval.getMilliSeconds() * asInt8()); case NULL_TYPE: return datum; default: throw new InvalidOperationException(datum.type()); } }