String rewriteFilter()

in src/query-common/src/main/java/org/apache/kylin/query/util/DateNumberFilterTransformer.java [238:285]


        String rewriteFilter(String op, SqlNumericLiteral time, TimeExpression timeExpression) {
            String target = null;
            switch (op) {
            case "=":
                if (timeExpression.isYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) BETWEEN %s", timeExpression.colNameString(),
                            yearToRange(time.getValueAs(Integer.class)));
                } else if (timeExpression.isMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) BETWEEN %s", timeExpression.colNameString(),
                            monthYearToRange(time.getValueAs(Integer.class)));
                } else if (timeExpression.isDayMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) = %s", timeExpression.colNameString(),
                            dayMonthYearToDate(time.toString()));
                }
                break;
            case "!=":
            case "<>":
                if (timeExpression.isYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) NOT BETWEEN %s",
                            timeExpression.colNameString(), yearToRange(time.getValueAs(Integer.class)));
                } else if (timeExpression.isMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) NOT BETWEEN %s",
                            timeExpression.colNameString(), monthYearToRange(time.getValueAs(Integer.class)));
                } else if (timeExpression.isDayMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) <> %s", timeExpression.colNameString(),
                            dayMonthYearToDate(time.toString()));
                }
                break;
            case ">":
            case "<":
            case ">=":
            case "<=":
                if (timeExpression.isYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
                            yearToDate(time.getValueAs(Integer.class), op.equals(">") || op.equals("<=")));
                } else if (timeExpression.isMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
                            monthToDate(time.getValueAs(Integer.class), op.equals(">") || op.equals("<=")));
                } else if (timeExpression.isDayMonthYear(time)) {
                    target = String.format(Locale.ROOT, "cast(%s as date) %s %s", timeExpression.colNameString(), op,
                            dayMonthYearToDate(time.toString()));
                }
                break;
            default:
                break;
            }
            return target;
        }