@ConstantFunction.List(list = {
            @ConstantFunction(name = "months_add", argTypes = {DATETIME,
                    INT}, returnType = DATETIME, isMonotonic = true),
            @ConstantFunction(name = "add_months", argTypes = {DATETIME,
                    INT}, returnType = DATETIME, isMonotonic = true),
            @ConstantFunction(name = "months_add", argTypes = {DATE, INT}, returnType = DATE, isMonotonic = true),
            @ConstantFunction(name = "add_months", argTypes = {DATE, INT}, returnType = DATE, isMonotonic = true)
    })
    public static ConstantOperator monthsAdd(ConstantOperator date, ConstantOperator month) {
        if (date.getType().isDate()) {
            return ConstantOperator.createDateOrNull(date.getDate().plusMonths(month.getInt()));
        } else {
            return ConstantOperator.createDatetimeOrNull(date.getDatetime().plusMonths(month.getInt()));
        }
    }
@Test
    public void monthsAdd() {
        assertEquals("2016-01-23T09:23:55",
                ScalarOperatorFunctions.monthsAdd(O_DT_20150323_092355, O_INT_10).getDatetime().toString());
    }