public Number apply()

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