in core/src/main/java/com/jetbrains/youtrackdb/internal/core/sql/parser/SQLMathExpression.java [583:656]
public Number apply(final Number a, final Operator operation, final Number b) {
if (a == null || b == null) {
throw new IllegalArgumentException("Cannot increment a null value");
}
if (a instanceof Integer || a instanceof Short) {
if (b instanceof Integer || b instanceof Short) {
return operation.apply(a.intValue(), b.intValue());
} else if (b instanceof Long) {
return operation.apply(a.longValue(), b.longValue());
} else if (b instanceof Float) {
return operation.apply(a.floatValue(), b.floatValue());
} else if (b instanceof Double) {
return operation.apply(a.doubleValue(), b.doubleValue());
} else if (b instanceof BigDecimal) {
return operation.apply(new BigDecimal((Integer) a), (BigDecimal) b);
}
} else if (a instanceof Long) {
if (b instanceof Integer || b instanceof Long || b instanceof Short) {
return operation.apply(a.longValue(), b.longValue());
} else if (b instanceof Float) {
return operation.apply(a.floatValue(), b.floatValue());
} else if (b instanceof Double) {
return operation.apply(a.doubleValue(), b.doubleValue());
} else if (b instanceof BigDecimal) {
return operation.apply(new BigDecimal((Long) a), (BigDecimal) b);
}
} else if (a instanceof Float) {
if (b instanceof Short || b instanceof Integer || b instanceof Long || b instanceof Float) {
return operation.apply(a.floatValue(), b.floatValue());
} else if (b instanceof Double) {
return operation.apply(a.doubleValue(), b.doubleValue());
} else if (b instanceof BigDecimal) {
return operation.apply(BigDecimal.valueOf((Float) a), (BigDecimal) b);
}
} else if (a instanceof Double) {
if (b instanceof Short
|| b instanceof Integer
|| b instanceof Long
|| b instanceof Float
|| b instanceof Double) {
return operation.apply(a.doubleValue(), b.doubleValue());
} else if (b instanceof BigDecimal) {
return operation.apply(BigDecimal.valueOf((Double) a), (BigDecimal) b);
}
} else if (a instanceof BigDecimal) {
if (b instanceof Integer) {
return operation.apply((BigDecimal) a, new BigDecimal((Integer) b));
} else if (b instanceof Long) {
return operation.apply((BigDecimal) a, new BigDecimal((Long) b));
} else if (b instanceof Short) {
return operation.apply((BigDecimal) a, new BigDecimal((Short) b));
} else if (b instanceof Float) {
return operation.apply((BigDecimal) a, BigDecimal.valueOf((Float) b));
} else if (b instanceof Double) {
return operation.apply((BigDecimal) a, BigDecimal.valueOf((Double) b));
} else if (b instanceof BigDecimal) {
return operation.apply((BigDecimal) a, (BigDecimal) b);
}
}
throw new IllegalArgumentException(
"Cannot increment value '"
+ a
+ "' ("
+ a.getClass()
+ ") with '"
+ b
+ "' ("
+ b.getClass()
+ ")");
}